无人驾驶系统概述
上图为一无人驾驶车辆的简易系统框图。无人车辆首先通过摄像头,雷达之类的传感器来感知外部的信息,借助GPS/IMU等设备来确定自车在地理上的绝对位置以及姿态。紧接着,软件算法层面会将这些收集到的原始数据进行分步地处理。比如通过传统的机器视觉或者深层神经网络等算法来对车道线、障碍物、交通标识等信息进行分类识别以及追踪;当然也有相应的定位算法如卡尔曼滤波来提升从定位设备获取的车辆位姿的可靠性与准确性。目前感知融合比较火热的原因也是在于各个单一信息源给予的数据存在各自的不足,而将这些数据做融合处理,不仅符合我们对系统的冗余要求,更是可以提升其鲁棒性。感知以及定位算法将上述这些来自传感器的数据进行一定处理的过程,本质上就是针对现实时空做了到数学时空的提取及映射。这些经过提炼后的更精细的数据,更方便我们进一步地进行功能开发。虽然目前感知和定位算法方面还存在许多比如精度不高、无法在全场景下适用等的技术瓶颈,但是我觉得无人驾驶的算法核心还是决策规划层面。这部分算法的功能就如字面所述,相当于无人车的大脑,起到居中调度的作用。
路径规划模块会根据高精度地图以及车辆当前位姿规划出一条能抵达目标终点且时空最优的全局道路序列。而在车辆实际行驶过程中,主要发挥作用的就是行为决策以及轨迹规划了。
其中,行为决策需要综合考量来自感知、定位、高精度地图以及全局规划的信息,结合当地的交通法规和当时的实际状况,有针对性地下达无人车在下一周期内应该做出的动作指令。比如当我们的无人车来到十字路口时,检测到信号灯为红灯,那么它应该下达一个停车指令;若是本车察觉到本车道的前车速度较缓而隔壁车道空置时,可以下发一个换道超车的指令;当它发现由于发生突发事故,导致按原先规划出的全局路径无法通行时,可以向路径规划模块请求进行重新规划。而上面提到的具体的变道、超车、停车等动作的实现就要依靠轨迹规划了。这个模块和路径规划最大的区别在于,轨迹实际上是包含了时间信息且满足车辆运动特性的路径。即车辆不仅需要规划出完成对应决策指令所需要的空间上的一系列离散点,更是隐含着自车应在何时刻,抵达哪一个位置的要求。也只有这样才能在预测模块的帮助下,满足无人车辆躲避动态障碍物(行人、其余车辆等)的需求。而在有了实时规划出来的轨迹之后,下游的控制模块便可以将其转化为车辆的控制信号(转向、加减速)下发给底层的执行模块。
路径规划
路径规划的任务是找到一系列最优的动作(actions)使得智能体(agent)能从它的起始状态(state)一步步过渡到它被期望的目标状态。在无人驾驶中,上面提到的智能体就是我们的无人车辆,而它的状态主要指车辆所处的地理位置,航向等信息。车辆在两个相邻状态之间过渡(transitions)采取的动作会伴随着一个由人为设计好的损耗值(cost)。那么我们就可以将规划出来的路径的好坏用数学语言来定量地描述评估,一条好的路径的总损耗值一定是比较低的。如果一个规划算法总能找到一条可行路径(如果存在的话),那么我们称此算法是概率完备的;如果找出来的路径总是最优的,那么我们可以认为这个算法是最优的。
一般来说,规划算法可概括为两大类:确定性(deterministic)的基于启发式(heuristic)算法如A*和随机化(randomized)的基于概率的算法如RRT。当我们需要处理的规划问题维度不高时,确定性的规划算法由于能在有限范围内保证解的质量,因此深受广大人民群众的欢迎。
规划全局导航路径可转换为在一给定地图上进行搜索的问题。多数的图搜索算法具备基于有向权重图,计算最小代价的能力。