在现阶段的自动驾驶中,定位一直是很重要的话题;最近特斯拉的开放道路自动驾驶一定程度上降低了定位的重要性,采用实时图像分析生成概率地图,这项技术还有待市场去打磨的更加成熟。在我看来作为一个自动驾驶工程师,成长的线路很清晰:Apollo系统作为基础,特斯拉的技术才是你追求的方向。每篇博客之前,喜欢加一些感悟,一者话题引入;二者抒自己所想,让技术不再冰冷。诚然时光荏苒,纸长情短,以后再看时难免觉得幼稚;哇!你又成长了。
说Apollo的定位之前,对场景我们先进行大概的梳理:首先默认车身自带民用级的GPS和高精地图;其次定位的作用是要确定车身精确的坐标和航向角。
Apollo系统中的定位分为三种:1. RTK定位;2. 基于Lidar的多传感器融合定位;3. 百度的核心贡献:基于视觉和百度高精地图的自定位。
1. RTK定位
RKT定位原理之前有文章有介绍:传送门;这里主要从实现流程来介绍Apollo的RTK定位。主要函数:
void RTKLocalization::ComposeLocalizationMsg()
- 定时器来不断执行OnTimer()回调函数,来检查gps和imu数椐是否刷新。
- 连接基站采用RTCM32格式返回数据;
- ComposeLocalizationMsg()融合两者的信息并把最终位置信息发布出去。
2. 基于Lidar的多传感器融合定位
基于激光点云的滤波相对受很多因素的限制,首先需要预先制作一个“全聚德”地图,比如点云图,概率地图等。然后拿实时点云与地图做匹配,匹配用实时点云里面的颜色值或者高度值的分布和这个地图去匹配,得到概率图,采用加权平均的方式得到车辆的位置。
多传感器融合指的是:在激光雷达定位的基础上,我们可以加入车身运动学信息,采用卡尔曼滤波进行上层处理,从而最终输出车辆的位置信息。
这里采用apollo公开课的ppt介绍基于Lidar的定位算法框架:
3. 基于视觉和百度高精地图的自定位
百度自己有高精地图,毫无疑问Apollo中一定要发挥自有地图的优势,高精地图如何在定位中发挥作用呢? 首先百度高精地图在制作时,已经加入了各种交通语义的位置信息,假如车辆的视觉计算平台,能够识别图像中具有语义信息,并在高精地图中匹配出对应的语义信息,那么就可以计算出车辆的位置和朝向。这套方案有以下特点:
- 摄像头技术成熟,结构化地图尺寸小,有利于降低系统生产成本。
- 车道线,路灯等道路元素稳定性高,不易变动,地图生命周期较长。
- 配置灵活,根据识别算法性能,可以使用不同的特征组合,易于拓展。
常用的交通语义有:车道线、路肩、护栏、交通标志、路灯、车道线分叉合并点 等......同样的视觉定位也可以结合多传感器的融合,它需要gps的初始位置,也需要imu做卡尔曼滤波融合。同样借用apollo的ppt介绍视觉定位的算法框架:
目前实战中,利用车道线可以很快的收敛横向误差,纵向误差则需要有精确点的交通语义信号,如:红绿灯、交通标志、分叉点等等。当每次出现这种有精确点的语义信号时,需要做一次位置误差的矫正。
高精地图和高精定位一直都是自动驾驶努力的方向,但是做了这么多,目的还是想知道交通语义和车辆的相对位置,当然能很大程度上扩展范围,但是人也是通过视觉来开车的,所以范围的扩展有没有必要也有待论证,说到底还是tesla的完全基于视觉的方案才是未来自动驾驶的方向。