作者 | RentyZhu 编辑 | 汽车人
原文链接:https://zhuanlan.zhihu.com/p/603533514
点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心【车道线检测】技术交流群
后台回复【车道线综述】获取基于检测、分割、分类、曲线拟合等近几十篇学习论文!
在自动驾驶技术中,车道线的检测和跟踪是不可缺少的一部分。车道线可以用来在没有高精地图或者定位效果较差的地方,使pnc控制自动驾驶车辆沿着车道线行驶。也可用于定位模块的横向定位。
End2end纯视觉3D车道线感知是一个比较困难的问题,相对于3D车道线感知而言,End2end 2D车道线感知较为简单,有很多现成的论文和开源项目可以作为参考。关于2D车道线感知方法在这里暂不赘述,本文探讨一下在获取了2D车道线的情况下如何通过重建的方法计算对应的3D车道线。从另外一个思路上解决3D车道线感知问题。
1.数学模型
1.1 坐标系
以自车后轴中心在地面的垂直投影点为原点建立车体坐标系,其定义如下图1所示,其中x轴指向车辆正前方,y轴指向车辆左侧,z轴指向天空。

以当前帧车体坐标系原点为原点,车体坐标系x轴在地平面投影为x轴建立地面坐标系。其y轴在地平面上垂直x轴向右,z轴垂直与地平面向上。理想条件下车体坐标系和地面坐标系完全重合。
1.2 地面位置的影响
从2D车道线到3D车道线的转换,最简单的方法是利用相机的外参和地平面假设求取车道线位置,即假设偏航角、俯仰角和横滚角的误差均为0。自动驾驶车体坐标系下3D点的投影公式如下:

上图的公式中有三个方程,但是有s,x,y,z四个不变量,原本是不可解的。但由于车道线点都在地面上,所有的Z取值均为0,因此公式变得可解了。求解该公式,结果如图3绿色点所示。可见其与真值有较大的偏差,主要原因是当车辆发生颠簸或者在上下坡区域下,真实地平面和理想地平面不一致,地平面假设不成立了。

1.3 地面位置表示方法
1.1节中我们提到理想条件下车体坐标系和地平面坐标系完全重合, 但是当车辆发生颠簸或者在上下坡区域下,车辆坐标系和地面坐标系之间存在三个欧拉角偏差,将偏航角、俯仰角和横滚角的误差分别记为y 、 p 、r。通过这三个误差项我们可以求取真实地平面和理想地平面之间的位置差异,对这三个角我们统称为动态外参。此外,由于地面不一定是平的,我们也可以用二次曲线来近似拟合地面。
2 地平面位置重构
2.1 3D车道线坐标误差分析
图2我们提到在理想条件下,如何使用2D车道线点计算出对应的3D车道线点坐标。由于地平面位置是动态变化的,真实地平面位置和理想地平面位置存在三个动态外参的误差,我们可以得到如下公式:

上式在理想地平面的基础上叠加了动态外参的影响,由于车道线在地平面上,所以z坐标为0。相机标定参数是确定的,我们可以得到结论,3D车道线点的坐标是动态外参、2d车道线点坐标的函数:

假设车道线检测网络的结果基本正确,即(u,v)坐标是正确的。则3D车道线点坐标的误差取来源于三个动态外参估计的误差。

2.2 车道线结构化特征误差
按照施工标准,车道线方程为螺旋曲线或直线,在一定范围内可用三次曲线拟合。设被观测到的车道线总数为n,在当前帧地面坐标系下,记第i条车道线方程如下:

假设一共n根车道线,每根车道线取m个点。根据三次方程,构建车道线拟合误差如下:

对n根车道线进行多帧观测,观测窗口长度为k。将n根车道线在当前帧地面坐标系下的三次方程参数以及每帧车辆坐标系与地面坐标系之间的欧拉角偏差记为待求解参数,如下式所示:

大多数情况下车道线之间是平行的,可以通过一些简单前处理获取车道线之间的平行特性。车道线是曲线,曲线平行的定义如下:

根据以上公式可以构建平行误差; parallel
2.1节中的3D车道线点误差、拟合误差和平行误差加权相加,定义为3D车道线的观测误差。通过求解使得观测误差最小的参数 ,最终可获得理想的3D车道线参数方程和动态外参。

通过求解以上方程,可以求取地平面位置。为了验证效果,我们做重投影实验如下图4。我们的真值车道线点只标注了BEV视图下的横纵坐标,没有高度信息。

2.3 帧间信息的使用
上一节中我们提到了使用单帧信息构建地平面位置,但是单帧信息往往是不足够的。比如上一节中的平行假设,在分叉线场景下是不成立的。因此单帧信息只能给与一个初步的观测,需要融合帧间信息。
2.3.1 多帧重投影误差
其中由于车道线是静态物体,世界坐标系下车道线参数一直保持不变。利用帧间位姿变换将历史帧车道线点转换到当前帧车体坐标系后,可以构建多帧重投影误差。假设观测窗口长度为k:

其中 K 为相机内参; 和 是车体坐标系与相机坐标系之间的旋转矩阵和平移向量; 是第i车体坐标系与地面坐标系之间的旋转矩阵,其由第i车辆坐标系与地面坐标系之间的欧拉角偏差计算得到; 是第i车道线神经网络检测得到的车道线点的像素坐标; X 是当前帧地面坐标系下 3D 车道线点坐标, 是利用定位信息计算到的 3D 车道线点在第i地面坐标系下的坐标。
2.3.2 构造里程计
多帧重投影信息需要用到帧间位姿变换,一般自动驾驶组合导航系统都会给出六自由度位姿帧间变换信息,这些信息来自于IMU、GPS、轮速计等。在乘用车中,IMU很多时候会安装在底盘,相机一般安装在车体。底盘与车体之间由弹簧连接,是非刚性连接。在这种情况下组合导航的帧间角度信息就不可靠了,需要一个视觉里程计来计算帧间角度变化。本文使用特征点匹配求取帧间位姿变化,构建了一个简单的视觉里程计,如图4 所示。(本周会写一个知乎博客将代码开源。)
引入视觉里程计后,2.3.1节中的多帧重投影误差变为如下形式:

求解帧间误差,可以获取平滑的帧间位姿变换。我们拿出帧间pitch角做对比,如下图所示:

2.2.3 多帧求解 将多帧误差和单帧误差组合起来,构造误差函数。以上误差函数可以使用图优化求解,使用ceres库可以获取较好的结果。求解多帧误差后可以成功稳定构建地平面位置,同时求出效果较好的车道线参数方程。
3 结果
结果如下,视频中画面下方为场景图片,上方为BEV视角下的车道线。BEV车道线中粉色点是直接使用相机标定参数lift2D车道线点生成的3D车道线,黄色点是mobileye车道线,绿色为本文方法生成的车道线。由于缺乏真值,我们以mobileye为baseline来评价本文方法性能。
从视频中我们可以看到,在遇到颠簸、上下坡或者刹车时,红色车道线位置精度差,位置波动也较大。绿色车道线位置与黄色接近,由于mobileye的位置偏差一般不会太大,因此可以大致认为本文方法生成的车道线的位置精度较高。从位置噪声上看,mobileye车道线波动较本文方法略大,本文方法有一定优势。此外,mobileye车道线输出范围较小(5-55m),本文方法车道线输出范围较mobileye要大(0-80m)。
4 地面重构效果
如下图所示,下面为图像,上面为BEV视角下地面重构结果。图中红线之间的间隔为10m

5.地面重构的意义
如下图所示,地面重构有以下用途
a.地面重构后可更好与lidar点云融合,可以作为基于bev fusion的道路结构认知方法的预处理结果
b.可以利用接地点算出目标的位置,如下图中的锥桶(bev视图下的绿色点)

国内首个自动驾驶学习社区
近1000人的交流社区,和20+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!
【自动驾驶之心】全栈技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向;
添加汽车人助理微信邀请入群
备注:学校/公司+方向+昵称