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

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

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.hqwc.cn/news/562882.html

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

相关文章

clang-query 的编译安装与使用示例

1,clang query 概述 作用: 检查一个程序源码的抽象语法树,测试 AST 匹配器; 帮助检查哪些 AST 节点与指定的 AST 匹配器相匹配; 2,clang-query 安装 准备: git clone --recursive https://git…

EI级!高创新原创未发表!VMD-TCN-BiGRU-MATT变分模态分解卷积神经网络双向门控循环单元融合多头注意力机制多变量时间序列预测(Matlab)

EI级!高创新原创未发表!VMD-TCN-BiGRU-MATT变分模态分解卷积神经网络双向门控循环单元融合多头注意力机制多变量时间序列预测(Matlab) 目录 EI级!高创新原创未发表!VMD-TCN-BiGRU-MATT变分模态分解卷积神经…

Linux:Jenkins全自动持续集成持续部署(3)

在上一章部署好了之后,还需要点击一下才能进行部署,本章的效果是:当gitlab上的代码发生了变化后,我们不需要做任何事情不需要去点击构建按钮,Jenkins直接自动检测变化,然后自动去集成部署Linux:…

【动态规划】Leetcode 746. 使用最小花费爬楼梯

【动态规划】Leetcode 746. 使用最小花费爬楼梯 解法 ---------------🎈🎈题目链接🎈🎈------------------- 解法 😒: 我的代码实现> 动规五部曲 ✒️确定dp数组以及下标的含义 dp[i] 表示跳跃到第 i 层&#x…

【小白入门篇1】GPT到底是怎样练成?

由于具有代表性的OpenAI公司GPT模型并没有开源,所以本章节是参考一些开源和现有课程(李宏毅)讲解ChatGPT原理。本章没有涉及到很多数学运算,比较适合小白了解GPT到底是怎么练成。GPT的三个英文字母分别代表Generative(生成式)&…

腾讯云GPU服务器介绍_GPU实例规格价格_AI_深度学习

腾讯云GPU服务器是提供GPU算力的弹性计算服务,腾讯云GPU服务器具有超强的并行计算能力,可用于深度学习训练、科学计算、图形图像处理、视频编解码等场景,腾讯云百科txybk.com整理腾讯云GPU服务器租用价格表、GPU实例优势、GPU解决方案、GPU软…

STM32 CAN的工作模式

STM32 CAN的工作模式 正常模式 正常模式下就是一个正常的CAN节点,可以向总线发送数据和接收数据。 静默模式 静默模式下,它自己的输出端的逻辑0数据会直接传输到它自己的输入端,逻辑1可以被发送到总线,所以它不能向总线发送显性…

数据结构/C++:哈希表

数据结构/C:哈希表 哈希表概念哈希函数直接定址法除留余数法 哈希冲突闭散列 - 开放定址法基本结构查找插入删除总代码展示 开散列 - 哈希桶基本结构查找插入删除代码展示 哈希表概念 在顺序表中,查找一个数据的时间复杂度为O(N);在平衡树这…

Linux的学习之路:2、基础指令(1)

一、ls指令 上篇文章已经说了一点点的ls指令,不过那还是不够的,这篇文章会介绍更多的指令,最起码能使用命令行进行一些简单的操作,下面开始介绍了 ls常用选项 -a 列出目录下的所有文件,包括以 . 开头的隐含文件。 -d…

蓝桥杯-单片机基础8——上下位机的串口通信设置(附小蜜蜂课程代码)

蓝桥杯单片机组备赛指南请查看这篇文章:戳此跳转蓝桥杯备赛指南文章 本文章针对蓝桥杯-单片机组比赛开发板所写,代码可直接在比赛开发板上使用。 型号:国信天长4T开发板(绿板),芯片:IAP15F2K6…

Python 从0开始 一步步基于Django创建项目(3)使用Admin site管理数据模型

本文内容建立在《Python 从0开始 一步步基于Django创建项目(2)创建应用程序&数据模型》的基础上。 Django提供的admin site,使得网站管理员,能够轻松管理网站的数据模型。 本文首先创建‘管理员账户’,即超级用户…

Day 1 二分算法(C++)

算法简介 二分查找(Binary Search)是一种常见的查找算法,它适用于已经排序好的数组或列表。它的基本思想是不断地将待查找区间分成两半,并通过比较目标值与中间元素的大小关系来确定目标值在哪一半中,从而缩小查找范围…