自动驾驶规划模块(Planning)

决策模块分为三个层次:
其中,全局路径规划(Route Planning)生成一条全局的路径。
行为决策层(Behavioral Layer)在接收到全局路径后,结合从感知模块,作出具体的行为决策。(包括其他车辆与行人,障碍物,以及道路上的交通规则信息,例如选择变道超车还是跟随)。
最后,运动规划(Motion Planning)层根据具体的行为决策,规划生成一条满足特定约束条件的轨迹,该轨迹作为控制模块的输入决定车辆最终行驶路径。(例如车辆本身的动力学约束、避免碰撞、乘客舒适性等)
路径规划(Route Planning):
Dijkstra算法:
Dijkstra算法是由计算机科学家Edsger W. Dijkstra在1956年提出,用来寻找图形中节点之间的最短路径。在Dijkstra算法中,需要计算每一个节点距离起点的总移动代价。同时,还需要一个优先队列结构。对于所有待遍历的节点,放入优先队列中会按照代价进行排序。在算法运行的过程中,每次都从优先队列中选出代价最小的作为下一个遍历的节点。直到到达终点为止。
Dijkstra算法的优点是:给出的路径是最优的;缺点是计算时间复杂度比较高(O(N2)),因为是向周围进行探索,没有明确的方向。
A*算法:
为了解决Dijkstra算法的搜索效率问题,1968年,A*算法由Stanford研究院的Peter Hart, Nils Nilsson以及Bertram Raphael发表,其主要改进是借助一个启发函数来引导搜索的过程。具体来说,A算法通过下面这个函数来计算每个节点的优先级:

其中:
- f(n) 是节点n的综合优先级。当我们选择下一个要遍历的节点时,我们总会选取综合优先级最高(值最小)的节点。
- g(n)是节点n距离起点的代价。
- h(n) 是节点n距离终点的预计代价,这也就是A*算法的启发函数。
行为决策(Behavioral Layer):
在自动驾驶行为决策层,我们需要解决的是在多智能体决策的复杂环境中,存在感知不确定性情况的规划问题,可以说这一难题是真正实现L4、L5级别自动驾驶技术的核心瓶颈之一。
涉及很多决策模型。
运动规划(Motion Planning):
在确定具体的驾驶行为之后,我们需要做的是将“行为”转化成一条更加具体的行驶“轨迹”,从而能够最终生成对车辆的一系列具体控制信号,实现车辆按照规划目标的行驶。

由于真实世界中的道路都是弯曲的,为了简化求解优化问题的参数表达,在自动驾驶中通常采用Frenet坐标系。
在Frenet坐标系中,我们使用道路的中心线作为参考线,使用参考线的切线向量t和法线向量n建立一个坐标系,如右图所示,它以车辆自身为原点,坐标轴相互垂直,分为s方向(即沿着参考线的方向,通常被称为纵向,Longitudinal)和d方向(或L方向,即参考线当前的法向,被称为横向,Lateral),相比于笛卡尔坐标系(左图),Frenet坐标系明显地简化了问题。
因为在公路行驶中,我们总是能够简单的找到道路的参考线(即道路的中心线),那么基于参考线的位置的表示就可以简单的使用纵向距离S(即沿着道路方向的距离)和横向距离L(即偏离参考线的距离)来描述。
参考文献:
