本文介绍下AD自动驾驶技术的“神器”- 高精地图,也称开了挂的“地图传感器”。
一、有HD-Map之前的ADAS是如何实现车辆控制的?
在高精地图加持之前的ADAS系统,功能一般是由感知+数据处理+系统状态机+PID控制器(或LQR控制器)组成的。拿智能前视摄像头模块实现LKA功能为例,按照dataflow来梳理:
- 通过镜头和COMS图像传感器来获取单帧图片;
- 按照感兴趣区域(ROI,region-of-interest)裁剪图片;
- 图片经过灰度化、二值化,获得车道线的Lane_marklet(车道线标记小段,如图1);
- 通过霍夫变换,将marklet拟合成Lane_segments(车道线段,如图2);
- 将Lane_segments的位置从图片坐标系转换为世界坐标系;
- 对Lane_segments进行合并,合并不了的删除掉;
- 从整车CAN上抓取vehicle speed、yawrate等信号,用于计算三阶车道线模型,获得车道线的Lane_geometry。所谓的三阶车道线模型,即Lateral Offset = a0 + a1*x + a2*x2+ a3*x3 ; 其中,x - longitudinal range x X向参考距离;该距离x=V(车速) * Tpreview(sec) , T 代表0.5-1秒之间的一个标定值。a0 - 当前Y向位置; a1 - Y向速度; a2 - 曲率;a3 - 曲率变化率。
- 通过卡尔曼滤波器,跟踪并更新车道线的Lane_geometry(车道几何线,用于抽象车道线,如图3)的几何形状;
- 通过霍夫变换的信心值和车道线跟踪器的信心值,获得车道线的信心值;
- 将车道线信息和来自车辆CAN上的其他信息(车速、YawRate、steer angle等)传给LKA功能;
- LKA对各种输入信号进行数据处理,例如滤波、判断等;
- 计算可以直接被LKA状态机使用的判断信号,如TTLC(time to lane crossing)、Lane position、车轮外缘到车道线的距离、Lane change、Road status(路面曲率等)、方向盘转角的inhibit信号、油门踏板的inhibit信号、刹车踏板的inhibit信号等等;
- LKA主状态机进行LKA状态控制,状态包括:fault、off、standby、enabled、intervention left、intervention right、warning left、warning right等状态,如图6;
- 利用前馈PID控制器,通过引入主状态机的状态信号,以及横向速度、距离车道线横向距离、heading angle、横向加速度、路面曲率等参数,建立基于车辆运动状态和路面状态的前馈PID控制模型,计算转向扭矩。
图1 Lane Marklet 车道线标记小段,黄色
图2 Lane Segments 车道线段,红色
图3 Lane Geometry 车道几何线,绿色
图4 车道线检测算法框图
图5 LKA功能架构
图6 LKA主状态机
通过上述描述,可以悉知,在ADAS功能中,根本没有planning模块,车辆控制完全没先验轨迹(如图7的绿色轨迹段)的存在,控制全靠计算车辆与两个车道线之间的动态关系,利用PID控制器直接生成控制扭矩,来控制车辆的状态。而AD领域的车辆控制,是有先验轨迹的存在的,所有的精华都在先验轨迹的生成,只要计算出先验轨迹,车辆的真正控制非常简单,例如按照先验轨迹分解出车辆的速度-转角控制量,然后速度再分解成加速度、减速度。加速度对应油门,减速度对应刹车,转角对应方向盘转角,车辆就可以按照先验轨迹作为pilot,最大程度的拟合先验轨迹行驶。这也就是所谓的ROS机器人技术路线(ROS,Robot Operating System 机器人操作系统)。这条“先验轨迹”,其实就是像工厂里的物料小车一样,只不过工厂的物料小车是按照路面上事先贴好的磁性轨迹行驶的(如图7),而智能驾驶车的先验轨迹是存在于planing算法模块中的。