自动驾驶建图--道路边缘生成方案探讨

自动驾驶建图–道路边缘生成方案探讨

image

一、背景

对于自动驾驶来说,建图是必不可少的,目前主流厂商技术都在从HD到"无图"进行过渡筹备中,不过想要最终实现真正的"无图"还是有很长的一段路要走。 对于建图来说,包含了很多的道路元素,车道线,停止线,斑马线,导流属性,道路边缘以及中心线(包含引导线)等。这里,中心线的预测通常是根据轨迹,通过数学公式进行拟合,目前学术上逐渐采用模型进行预测,但是对于下游(PNC)来说,还是存在不够平滑,曲率不够精准等问题,不过这个不在本次方案讨论范围内,先忽略,以后有空可以写一写。 道路边界对于PNC来说也是至关重要,约束车辆行驶范围,避免物理碰撞发生。通常道路边界的生成有几种方法,一种是当做车道线的一部分,跟着模型一起输出,但是没有车道线的特征明显,容易漏检,而且道路边界是异形的,基于分割的方案会比基于Anchor的方案效果稳定一些。另一种是HD的方法,根据处理后的车道线,按照距离和规则等虚拟出道路边界线。本文给出一种新的解决方案,略微繁琐,但是优点是可以延用已有的公开数据集进行处理生成,快速落地验证,缺点是本方案不具备时效性,是离线的方法。

二、方案

数据集&模型 整个方案的pipline如上图所示,为了快速验证效果,所以直接采用了公开的数据集BDD100k,这个数据集主要是用于可行驶区域, 车道线以及全景分割等。它的车道线有标边线,但是没有区分类别,没办法直接用,所以采用freespace来进行验证。模型方面,理论上采用任何一个分割都可以,这里采用的是YOLOPv2, 模型提供了训练好的权重和推理脚本,输出如下所示。

image

YOLOPv2输出

差异性 这个数据集存在一个与建图的需求有所差异的问题,刚才提到这个方案是基于freespace做的,但是freespace是以实际能看到的边界作区分的而不是道路的边界,所以和实际建图的需求有一些diff,上面图里面能看到绿色的就是freespace的结果,被左边的车挡住了道路的边界,所以freespace就会以车辆边界作为自身的界限。如果是实时的没有什么问题,但是离线的话会产生diff,如果第一天有车,建图后,第二天发现没有车,那么可通行的范围就被压榨了。所以后续如果实际使用,需要以道路的边界作为freespace的边界线。

image

overview

整体方案 整个方案的pipline如上所示,对前视摄像头得到的图像进行畸变矫正后,喂进模型,输出对应的freespace,由于IPM对于边界以及远处的投影效果不好的问题,所以只选取车前15m,左右20m的范围,得到的freespace根据内外参以及自车位置投影到世界坐标系下。通过连续帧的叠加,可以生成世界坐标系下的2d点云。实际上需要的是边缘,所以还需要对点云进行处理得到道路的边缘,这里有尝试过PCL以及AlphaShape等点云处理方法,能解决部分case的提取,但是还是依赖于调参,没办法自动化处理,下面有一些bad case示例。

  1. 世界坐标系2d点云

image

2d点云

  1. PCL

image

pcl滤波+边缘提取结果

  1. AlphaShape

image

alphashape提取结果

针对上面的问题,首先对世界坐标系的点云进行投影映射,我这里设置的是1个像素表示0.05m,因为一个车道线大概15-20cm宽,所以这一点点的误差不影响反投影回去的结果。映射后,可以得到栅格的点云,由于从uv到世界坐标系转换中,远处的点会发散,所以在栅格图像中需要对其进行过滤和填充处理,处理前后如下图所示。

image

栅格处理

然后可以用图像处理的方法得到整个栅格图的边缘并根据映射关系反投影到世界坐标系下,根据下游的需求对矢量化的点进行稀疏采样或者插值处理,结果如下所示。

image

边缘处理

接下来一步,就是需要根据RTK信息来对边缘的两端进行截断(不然封闭的区域车也没发行驶),此步骤略微繁琐,逻辑简化如下: - 根据属性判断是否是直行,转弯还是掉头路口等 - 根据不同的属性,设置不同的切分逻辑 - 直行|转弯,采用双头切分,分别根据起始和终止RTK位置,通过设置距离参数来找训左右两端的切分点进行切分。 - 掉头,采用单头切分,选定起始位置后定位关键点,通过设置较长的距离来贯穿整个掉头路口,定位4个点进行切分。 - 过滤异常点,平滑处理。

image

切分前后效果,这里蓝色是切分后的边缘

最后,就是不断的优化和迭代的逻辑了,模型效果不好那就优化模型,逻辑不够鲁邦就优化逻辑。之前有提到数据集中的freespace不是以实际道路边缘边界区分的,所以后面还需要标数据进行模型优化。

为了验证精度是否够高,可以拼接到HD上进行对比

image

底图是hd提供的车道线和参考线,红色是路口的道路边界

最后的最后,PNC实际上用不了这种异形的边缘的,事实证明了,一切的一切还是要向HD看齐,所以还要根据生成的边缘来做二次约束进行曲线平滑优化处理。这里就不展开讲了,又是一个非常复杂的数学问题。

image

基于边缘约束优化后效果

三、结论

本方案只是提供了一种快速落地的思路,里面实际上还有很多的细节问题需要进行优化。不过基于freespace的方案相比于只去预测道路边缘的方案来说,泛化能力相对来说会强一点,同时可以一份标注数据多种用途。不过速度上需要注意,离线可以满足要求,在线实时还是要看优化的效率。

有想要交流的可以在评论区留言或者私信我

倾囊相授自动驾驶学习资料和落地经验:链接

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

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

相关文章

二.寄存器

1. 2. 例如:h即为high(高位),l即为low(低位) 3.一个字是两个字节 4.在写一条汇编指令或一个寄存器的名称时不区分大小写。 5.al,ah,ax在接受汇编指令时,并不相等&…

【计算机毕业设计】基于ssm038框架的网上招聘系统的设计与实现lw7

基于ssm038框架的网上招聘系统的设计与实现lw7: 本课题是基于ssm框架(springMVC,spring,mybatis)的招聘系统,是标准的MVC模式,将系统分为表现层、controller层、service层、DAO层四层,使用spring MVC负责请求的转发和视…

在pycharm中运行程序时总是以tests方式运行

## 问题描述 前两天在使用python写机器学习的算法时,有一个程序一直以Python tests的方式运行,并且一直运行失败,截图如下: 解决方法 到设置中:File->Settings->Tools->Python integrated Tools 文件->…

DBO优化朴素贝叶斯分类预测(matlab代码)

DBO-朴素贝叶斯分类预测matlab代码 蜣螂优化算法(Dung Beetle Optimizer, DBO)是一种新型的群智能优化算法,在2022年底提出,主要是受蜣螂的的滚球、跳舞、觅食、偷窃和繁殖行为的启发。 数据为Excel分类数据集数据。 数据集划分为训练集、验证集、测试…

基于springboot+vue的教学改革项目管理系统(源码+论文)

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:spring…

vs2019新建Qt工程中双击 .ui 文件无法打开

vs2019 中创建的 Qt 工程,在使用的过程中,经常会有:双击 .ui 文件,闪退的情况,也即 .ui 文件无法打开! 针对该问题的详细解决步骤如下: 1、右击该 .ui 文件,选择“打开方式” 2、…

6、kubenetes 卷

1、什么是卷 在某些场景下,我们可能希望新的容器可以在之前容器结束的位 置继续运⾏,⽐如在物理机上重启进程。可能不需要(或者不想要) 整个⽂件系统被持久化,但又希望能保存实际数据的⽬录。 Kubernetes通过定义存储…

指尖论文能用吗 #经验分享#微信

指尖论文是一款非常好用、靠谱、方便的论文写作、查重降重工具。无论是学生还是学者,都可以通过指尖论文轻松完成论文写作任务。指尖论文提供了丰富的论文模板和参考资料,让论文写作变得更加简单和高效。 指尖论文还内置了强大的查重和降重功能&#xff…

Centos上安装Harbor并使用

harbor的安装与使用 Harbor介绍安装前的准备工作为Harbor自签发证书安装Harbor安装docker开启包转发功能和修改内核参数安装harbor扩展 Harbor 图像化界面使用说明测试使用harbor私有镜像仓库从harbor仓库下载镜像 Harbor介绍 容器应用的开发和运行离不开可靠的 镜像管理&…

2024年阿里云服务器优惠价格表_一张表清晰明了

2024年腾讯云服务器优惠价格表,一张表整理阿里云服务器最新报价,阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单,大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新的云服务器优惠券…

Mac上玩《赛博朋克2077》mac电脑怎么玩这个游戏

X用户crushovitz_b最近发现,在《赛博朋克2077》游戏主菜单页面,将鼠标停在版本号选项卡上面足够长时间,就会发现游戏当前的版本号由2.12变为了2.0.77,这是对游戏标题2077的致敬彩蛋。 《赛博朋克2077》的叙事总监兼续集副总监Pawe…

C语言实现三子棋强化学习算法AI,思路详解+完整代码

写个三子棋的强化学习AI玩玩。写这玩意只需要有一点C语言基础就可以了,至于AI部分,也是很好理解的。 三子棋 在3*3的棋盘中,先手方画O,后手方画X,连成3个就赢了。事实上,只需要很简单的试验,你…

大学期末考试搜题软件?这4款足够解决问题 #知识分享#笔记#职场发展

当代大学生面临着繁重的学业压力和海量的知识点,如何高效地进行学习和搜题成了他们关注的焦点。幸运的是,随着科技的不断进步,我们有越来越多的日常搜题和学习软件可以帮助我们更好地应对这些挑战。在本文中,我将为大家介绍10款备…

最新消息!Stable Diffusion核心研究团队已集体辞职!Stable Diffusion 3后可能再无开源

最新消息,Stable Diffusion核心研究团队已集体辞职! 名单包括研究团队领导、论文一作Robin Rombach,共同一作Andreas Blattmann,以及另一位作者Dominik Lorenz合作开发了图像生成模型Stable Diffusion。这项技术帮助Stability AI…

linux下线程分离属性

linux下线程分离属性 一、线程的属性---分离属性二、线程属性设置2.1 线程创建前设置分离属性2.2 线程创建后设置分离属性 一、线程的属性—分离属性 什么是分离属性? 首先分离属性是线程的一个属性,有了分离属性的线程,不需要别的线程去接合…

oracle设置主键自增步骤

设置主键自增步骤: 每一张表都要设置序列,然后设置触发器。比mysql繁琐。 一、设置序列 选中表后,—》 文件—》新建—》其他—》序列. 设置如下四个值即可。 crtls保存。 给序列起个名字,一定要全大写字母。 二、设置触发器…

移相全桥DC-DC变换器

本篇将基于PPEC-86CA3A移相全桥数字电源控制芯片以及PPEC Workbench开发软件带领大家进行实际移相全桥DC-DC变换器的设计与开发 。 一、移相全桥变换器设计与开发 1、外围电路设计与硬件平台搭建 1)外围电路设计 这里给出了PPEC-86CA3A移相全桥数字电源控制芯片的…

校招C++大概学习到什么程度?

游戏引擎、图形学的主要开发语言就是C,所以在面试中回答了了几个C问题。我在面试之前完全没有看过任何面试经验,也没有做过类似的题目。可能是因为招实习生,也可能是因为不是C开发,所以问题我觉得都比较简单。在开始前我有一些资料…

QT:三大特性

QT的三大特性: 1、信号与槽 2、内存管理 3、事件处理 1、信号与槽 当信号产生时,就会自动调用绑定的槽函数。 自定义信号: 类中需要添加O_OBJECT宏 声明: signals标签之下进行声明 定义: 信号不需要定义 …

【MySql】1.mysql数据库

一、数据库的基本概念 1.数据 记录事物的信息;按统一的格式进行存储 2.表 数据的集合,行和列的组合;将多条数据组织在一起 3.数据库 表的集合,是存储 相互有关 数据的仓库 二、数据库管理系统 DBMS的主要功能: …