carla中lka实现(二)

news2025/1/19 20:30:25

前言:

首先计算之前检测出来的车道线的中线与输入图像的中线进行计算距离,,并设置不同的阈值对于不同的方向进行相关的调整。

一、车辆中心线

一般而言将摄像头架设在车辆的正中心轴上,所获得的图像的中间线极为车辆的中心。

def CalculateCurvature(binary_image, left_fit, right_fit, l_lane_inds, r_lane_inds):

    img_size = (binary_image.shape[1], binary_image.shape[0])
    ploty = np.linspace(0, img_size[1]-1, img_size[1])
    y_eval = np.max(ploty)
  
  # 找到图像中不为零的所有像素点的像素坐标
    nonzero = binary_image.nonzero()
    nonzeroy = np.array(nonzero[0])
    nonzerox = np.array(nonzero[1])
    # 将这些不为零的像素点坐标分成x,y车道线中
    leftx = nonzerox[l_lane_inds]
    lefty = nonzeroy[l_lane_inds] 
    rightx = nonzerox[r_lane_inds]
    righty = nonzeroy[r_lane_inds]
    # 将这些像素点对应到世界坐标系中,然后拟合成二次曲线
    left_fit_cr = np.polyfit(lefty, leftx*xm_per_pix, 2)
    right_fit_cr = np.polyfit(righty, rightx*xm_per_pix, 2) 

## 以下计算本车在车道线中心的位置
    dist_from_center = 0.0
    if right_fit is not None:
        if left_fit is not None:
            # 摄像头位于图像中间,也是本车的中心
            camera_pos = img_size[0] / 2
        # 左右车道线最底端x坐标
            left_lane_pix = np.polyval(left_fit, binary_image.shape[0])
            right_lane_pix = np.polyval(right_fit, binary_image.shape[0])
        # 左右车道线中点x坐标
            center_of_lane_pix = (left_lane_pix + right_lane_pix) / 2
        # 摄像头(本车中心)与车道线中心的距离
            dist_from_center = (camera_pos - center_of_lane_pix) * 3.7/960
    return dist_from_center

其中返回的dist_from_center是车辆中心线和车道线中心线之间的距离。

二、输出显示距离

在Carla中生成一辆车,并在车辆中心线位置生成一个相机,采集图像信息,首先在车辆中心线上生成一一条线,并显示出来。

直接取图像的size然后设置起点和终点,

使用函数cv2.line就可以,

results = cv2.line(results, start_point, end_point, line_color, thickness)

这个是在图像正中间画上一条线。

然后再在识别出的车道线正中间画上一条线

之前写的函数lane_position会返回左边和右边的车道线的点,

取这两个点然后算平均值,

        lanes_pos = lane_position(img_histogram)
        l1 = lanes_pos[0][0]
        r1 = lanes_pos[1][0]
        p1 = int((l1 + r1) / 2)
        start_point1 = (p1, 0)
        end_point1 = (p1, int(height))

最后输出结果:

 红线是图像的中心线,黄线是车道线的中心线。

之后的步骤就是直接用它们两个之间的距离来计算控制车辆左转和右转。

三、车辆控制

在Carla中生成一辆车,中心线上搭载相机,Carla中有两种相机可以选择,一种是普通的RGB相机,另外一种是直接有的语义分割相机,选择语义分割相机简单简单很多。

注意Carla中输出的是图像的格式是png格式,这会有一个问题,是它rgb通道会归一化,所以输出为0.8到1之间,大坑卡了我很久。

原始图像:

通过rgb图像旋转输出的图像:

tmd,4通道图象第四列全部设置为1才行!卡我很久

最好直接把第4列去除,方便!

融合sobel和rgb信息后输出:

 然后选择感兴趣的区域:

 透视变换:

找到点为:

    top_left =[1000,700]
    top_right = [1374,700]
    bottom_left = [330,1100]
    bottom_right =  [2000,1100]
    # give 4 points to project.
    proj_top_left = [200,100]
    proj_top_right = [2200,100]
    proj_bottom_left  =  [200,1100]
    proj_bottom_right =  [2200,1100]

 直方图输出:

 滑动窗口输出:

 曲线拟合:

 添加图层蒙版:

未完待续。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/895875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

激光雷达 01 线数

一、线数 对于 360 旋转式和一维转镜式架构的激光雷达来说,有几组激光收发模块,垂直方向上就有几条线,被称为线数。这种情况下,线数就等同于激光雷达内部激光器的数量[参考]。 通俗来讲,线数越高,激光器的…

Adobe Acrobat 无法使用 PS 编辑图片 的解决方法

问题描述 使用较新版本的Adobe Acrobat时,有时会遇到问题。 比如对pdf中的图片使用 PS 进行编辑,会弹出以下窗口,导致打不开 PS ,无法对图片进行编辑。 Adobe 无法启动您指定的图像编辑应用程序。请在"首选项"的"…

【STM32CubeMX】低功耗模式

前言 本文讲解STM32F10X的低功耗模式,部分资料参考自STM32手册。STM32F10X提供了三种低功耗模式:睡眠模式(Sleep mode)、停机模式(Stop mode)和待机模式(Standby mode)。这些低功耗模…

双环传动CIO吴学信:数字化转型为企业高效运转和业绩腾飞提供重要支撑

引言 浙江双环传动机械股份有限公司(股票代码:002472)创建40年来专注于机械传动核心部件——齿轮及其组件的研发、制造与销售,已成为全球最大的专业齿轮产品制造商和服务商之一。 2019年以来,双环传动与纷享销客CRM建…

【0Ω电阻在PCB板中的5大常见作用】

文章目录 前言1、充当跳线2、进行调试时的前后级隔离3、让调试更灵活4、方便测试电流5、用于单点接地 前言 在PCB板中,时常见到一些阻值为0Ω的电阻。我们都知道,在电路中,电阻的作用是阻碍电流,而0Ω电阻显然失去了这个作用。那…

LC-将有序数组转换为二叉搜索树

LC-将有序数组转换为二叉搜索树 链接:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/ 描述: 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索…

new String()到底创建了几个对象

题目: new String("abc")会创建几个对象? 看字节码,就知道是两个。

经验分享丨HR告诉你:同样是找工作,这些简历绝对会被直接刷掉!

上次的文章分享了自己软件测试面试时的一些经历,今天我想分享一下自己当时写简历以及投简历方面的经历,本文内容纯粹是个人简单分享,如果有写得不好的地方还请读者包涵与指正。 我是去年的九月初开始投递简历的,貌似各行各业的人都…

[JavaWeb]【七】web后端开发-MYSQL

前言:MySQL是一种流行的关系型数据库管理系统,它的作用是存储和管理数据。在Web开发中,MySQL是必备的数据库技能之一,因为它可以帮助Web开发人员处理大量的数据,并且提供了强大的数据查询和管理功能。 一 数据库介绍 1.1 什么是数据库 1.2 数据库产品 二 MySQL概述…

电煎锅出口欧洲CE认证标准

电煎锅是家庭烹饪中比较常见的电器,一般家庭在日常生活中都会使用,所以电煎锅具有广大的市场,尤其在欧洲市场更是日常烹饪离不开的家庭电器。欧洲是我国出口比例占比较大的地区,每年出口到欧洲的家庭电器占很大一部分。而根据欧盟…

3 Python的数据类型

概述 在上一节,我们介绍了Python的基础语法,包括:编码格式、标识符、关键字、注释、多行、空行、缩进、引号、输入输出、import、运算符、条件控制、循环等内容。Python是一种动态类型的编程语言,这意味着当你创建一个变量时&…

解决c/c++ Error: redefinition of ‘xxx’ 的问题

错误信息 两个类/文件同时引用定义ReplyInfo的头文件,会造成头文件中定义重复定义 如两个类/文件重复引用massage文件报错 message.h:36:16: error: redefinition of struct MSG_SERVOCTRL message.h:40:2: error: conflicting types for servoctrl解决 一般是目…

[SWPUCTF 2022 新生赛]ez_ez_php

这段代码是一个简单的PHP文件处理脚本。让我们逐行进行分析: error_reporting(0); - 这行代码设置了错误报告的级别为0,意味着不显示任何错误。 if (isset($_GET[file])) { - 这行代码检查是否存在一个名为"file"的GET参数。 if ( substr($_…

步步为赢:打造一个酷炫而吸引人的Hadoop HDFS分布式文件系统集群部署方案

文章目录 版权声明一 分布式存储缘起二 分布式的基础架构2.1 大数据架构模式2.2 主从模式 三 HDFS的基础架构HDFS的角色组成 四 HDFS集群环境部署4.1 安装包下载4.2 Hadoop安装包目录结构4.3 修改配置文件,应用自定义设置4.4 分发Hadoop文件夹4.5 配置环境变量4.6 授…

【论文笔记】基于指令回译的语言模型自对齐-MetaAI

MetaAI最近发布的Humpback,论文链接:https://arxiv.org/abs/2308.06259 解决什么问题? 大量高质量的指令微调数据集的生成。 思路 在这项工作中,我们通过开发迭代自训练算法来利用大量未标记的数据来创建高质量的指令调优数据集…

IC流程中 DFT 学习笔记(2)

引言 DFT是ASIC芯片设计流程中不可或缺的环节。其主要目的是在芯片前端设计验证完成后插入一些诸如寄存器链等可供测试的逻辑,算是IC后端设计的范畴,属于结构测试而非功能测试。主要是在ASIC芯片流片完成后,通过这些已插入的逻辑&#xff0c…

Rancher-RKE-install 部署k8s集群

一、为什么用Rancher-RKE-install 1.CNCF认证的k8s安装程序。 2.有中文文档。 二、安装步骤 1.下载Rancher-Rke的二进制包-下面是项目的地址 GitHub - rancher/rke: Rancher Kubernetes Engine (RKE), an extremely simple, lightning fast Kubernetes distrib…

javaScript:还有人不会js中的Math方法?

目录 一.前言 二.Math方法 1.Math.floor()向下取整(重点) 示例 注意 2.Math.ceil()向上取整 示例 3.Math.round() 四舍五入 示例 4.Math.random()随机数(重点) 范围 示例 m-n之间的随机整数数(重点) 示例 输出10个[2…

时序结构重要性加权图卷积网络用于时序知识图谱补全

目录 摘要部分 四元数 时间戳 时间信息对四元数的影响 知识图谱里的结构信息 时序注意模块 重要性加权的图卷积网络 引言部分 现有方法的不足 本文主要贡献 准备工作 问题定义 大部分方法的缺陷 本文方法 框架 时序注意模块 实体分类 带有注意力机制的双向长短…

Spring-MVC的数据响应-19

在访问服务端MVC的时候,这个controller层进行相应操作之后 他要做两件事:页面跳转和返回字符串,在做完这些操作之后,我们一般进行页面展示:排除页面展示之外,有些需求可能直接回写给我们一些数据: 页面跳…