carla中lka实现(二)

前言:

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

一、车辆中心线

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

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.0if 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/960return 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.rhkb.cn/news/95197.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js watermark实现水印效果

2023.8.15今天学习了如何给页面添加水印,效果如下: 1.创建watermark.js文件: import id from "element-ui/src/locale/lang/id";let watermark {} let setWatermark (str) > {let id 1.23452384164.123412415if (document.g…

WebGL游戏站优化实录【myshmup.com】

myshmup.com 允许在浏览器中创建 shmup(射击)游戏。 你可以使用具有创意通用许可证的资源或上传自己的艺术作品和声音。 创建的游戏可以在网站上发布。 该平台不需要编码,游戏对象的配置是在用户界面的帮助下执行的。 后端是使用Django框架开…

Git多版本并行开发实践

本文目的: 实现多个项目同时进行的git多版本管理工作流。 名词解释: feature-XXXX:特性分支指CCS中一个项目或者一个迭代,在该分支上开发,完成后,合并,最后,删除该分支,…

设计模式之中介者模式(Mediator)的C++实现

1、中介者模式的提出 在软件组件开发过程中,如果存在多个对象,且这些对象之间存在的相互交互的情况不是一一对应的情况,这种功能组件间的对象引用关系比较复杂,耦合度较高。如果有一些新的需求变化,则不易扩展。中介者…

uniapp 官方扩展组件 uni-combox 实现:只能选择不能手写(输入中支持过滤显示下拉列表)

uniapp 官方扩展组件 uni-combox 实现:只能选择不能手写(输入中支持过滤显示下拉列表) uni-comboxuni-combox 原本支持:问题: 改造源码参考资料 uni-combox uni-combox 原本支持: 下拉选择。输入关键字&am…

ATF(TF-A) 威胁模型汇总

安全之安全(security)博客目录导读 目录计划如下,相关内容补充中,待完成后进行超链接,敬请期待,欢迎您的关注 1、通用威胁模型 2、SPMC威胁模型 3、EL3 SPMC威胁模型 4、fvp_r 平台威胁模型 5、RSS-AP接口威胁模型 威胁建模是安全…

TCP服务器实现—多进程版,多线程版,线程池版

目录 前言 1.存在的问题 2.多进程版 3.多线程版 4.线程池版 总结 前言 在上一篇文章中使用TCP协议实现了一个简单的服务器,可以用来服务端和客户端通信,但是之前的服务器存在一个问题,就是当有多个客户端连接服务器的时候,服…

【Unity细节】Unity中的层级LayerMask

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏:unity细节和bug 😶‍🌫️优质专栏 ⭐【…

MySQL索引介绍 为什么mysql使用B+树

什么是索引? 索引是一种用于快速查询和检索数据的数据结构,常见的索引结构有:B树,B树和Hash。 索引的作用就相当于目录。打个比方,我们在查字典的时候,如果没有目录,那我们就只能一页一页的去…

K8S核心组件etcd详解(上)

1 介绍 https://etcd.io/docs/v3.5/ etcd是一个高可用的分布式键值存储系统,是CoreOS(现在隶属于Red Hat)公司开发的一个开源项目。它提供了一个简单的接口来存储和检索键值对数据,并使用Raft协议实现了分布式一致性。etcd广泛应用…

Llama 2免费托管及API提供

Llama 2 是 Meta 最新的文本生成模型,目前其性能优于所有开源替代方案。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 1、强大的Llama 2 它击败了 Falcon-40B(之前最好的开源基础模型),与 GPT-3.5 相当,仅低…

redis的三种集群方式

redis有三种集群方式:主从复制,哨兵模式和集群。 1.主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所…

Fluent-MyBatis

Fluent-MyBatis Fluent-MyBatis 简介 何为 Fluent Mybatis? Fluent Mybatis, 是一款 Mybatis 语法增强框架, 综合了 Mybatis Plus, Dynamic SQL, JPA 等框架特性和优点 Fluent-MyBatis 开源地址 Fluent-MyBatis 原理 Fluent-MyBatis 原理是利用 annotation pro…

2023.8.12号论文阅读

文章目录 TriFormer: A Multi-modal Transformer Framework For Mild Cognitive Impairment Conversion Prediction摘要本文方法实验结果 SwIPE: Efficient and Robust Medical Image Segmentation with Implicit Patch Embeddings摘要本文方法实验结果 TriFormer: A Multi-mod…

Java实现钉钉企业内部应用机器和自定义机器人发送消息

前言 公司让写一个服务监控的功能,当监测到服务停止时,向钉钉群里推送报警信息。之前大概看到钉钉的开放平台的API文档,好像能群发消息的只有机器人。 钉钉开放平台目前提供三种机器人: 企业内部应用机器人 群模板机器人 自定义机器人 本来向用自己比较熟悉的自定义机器人…

【实用黑科技】如何 把b站的缓存视频弄到本地——数据恢复软件WinHex 和 音视频转码程序FFmpeg

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:效率…

numpy与matplotlib 常用日常代码

matplotlab 和 numpy 可能是python 数据处理工作中用的最多的库了, 官网的文档十分详细,但是就是因为数量庞大,很多时候常用的功能和生僻冷门的功能混在一起,找不到重点。按照二八原则,掌握20%的功能就已经能应付绝大多…

[Docker精进篇] Docker镜像构建和实践 (三)

前言: Docker镜像构建的作用是将应用程序及其依赖打包到一个可移植、自包含的镜像中,以便在不同环境中快速、可靠地部署和运行应用程序。 文章目录 Docker镜像构建1️⃣是什么?2️⃣为什么?3️⃣镜像构建一、用现有容器构建新镜像…

最强自动化测试框架Playwright(34)CDPSession

在 Playwright 中,CDPSession 类是用于与浏览器的 Chrome DevTools Protocol (CDP) 会话进行交互的对象。CDP 是与Chromium浏览器通信的底层协议,它提供了许多与浏览器进行交互和控制的功能。 CDPSession 类提供了执行底层 CDP 命令的方法,并…

优测云服务平台|【压力测试功能升级】轻松完成压测任务

一、本次升级主要功能如下: 1.多份报告对比查看测试结果 2.报告新增多种下载格式 Word格式Excel格式 3.新增多种编排复杂场景的控制器 漏斗控制器并行控制器事务控制器仅一次控制器分组控制器集合点 4.新增概览页面,包含多种统计维度 二、报告对比…