一、前言:
在自动驾驶整个软件框架中,决策规划模块有着重要的作用。决策规划模块一般也叫Planning模块,在整个自动驾驶系统中,Planning模块相当于人类驾驶员的大脑,它的上游是地图、导航、感知、预测这些模块,下游是control以及底盘控车模块。Planning模块的作用相当于理解传感器以及高精地图模块等上游的“感知系统”获得的感知信息,并且在当前周期内进行思考并做出判断,然后把计算好的轨迹信息传递给下游模块进行控制指令的分解以及控制信号的计算。
系统学习自动驾驶算法的小伙伴,可以关注订阅以下专栏:
决策规划算法系统解析:https://blog.csdn.net/nn243823163/category_11685852.html
Apollo仿真与调试:https://blog.csdn.net/nn243823163/category_11807746.html
智能驾驶算法解析与仿真:https://blog.csdn.net/nn243823163/category_11935534.html
在设计Planning模块时,一般会从以下这些角度进行考量:
- 良好的系统实时性;
- 安全性作为最重要指标与最高优先级(安全冗余系统的设计、安全辅助性功能、安全相关法规功能、故障诊断);
- 行车效率;
- 满足用户需求以及舒适性要求的决策能力;
- 对交规以及道路通行要求的考虑;
在进行系统设计时,往往会综合以上几个角度进行综合考量,平衡各个维度的指标。
以上为特斯拉的Planning模块在设计时考虑的三个指标的平衡。
同人类驾驶员一样,Planner在接收到经过视觉神经网络处理过的3D Vector Space后,将会在该Space进行搜索判断,从而找到一条轨迹可以最大限度地提高汽车的安全性、舒适性和效率,将车辆规划至目的地。
作为最早布局自动驾驶的厂商,Tesla早期的Planner已经可以很好的在高速公路或者是城市快速路段进行规划,包括单车道的车道保持、导航变道、主动超车、自动上下闸道也都经受了量产的考验;随着自动驾驶的发展,Tesla Autopilot 的使用场景需要从高速扩展到城市道路。
二、Planning模块的组成
在Planning模块中,一般分为决策模块decision与运动规划motion planning两部分。decision模块又分为场景选择即scenario Manager、当前状态选择stage Process、以及行为决策behavior decider;motion planning一般又分为路径规划、速度规划以及轨迹生成。
上图为开源的Apollo系统中Planning模块的运行过程,可以看到apollo的Planning模块就是首先确定当前自车所处在的场景scenario,然后判断在当前场景下处在什么状态stage下,最后调用一系列task进行behavior的判断从而完成决策过程。
在decision结束之后,便开始motion planning的过程。
motion planning会结合导航给的全局路径进行局部路径规划;导航给的地图路线只是规划过程中的一部分,我们仍需要构建沿这条路线前进的局部轨迹。这意味着要处理一些不属于地图的物体:如其他车辆、自行车或行人。例如,我们可能需要与试图在我们前面掉头的汽车互动,或者我们可能希望超过一辆在公路上行驶的慢车。这些场景需要更低 级别、更高精确度的规划。我们将这一级别的规划称为轨迹规划。
轨迹规划的目标是生成一系列路径点所定义的轨迹。我们为每个路径点分配了一个时间戳和速度。由于移动的障碍物可能会暂时阻挡部分路段,轨迹中的每个路径点都有时间戳。我们可以将 时间戳与预测模块的输出相结合,以确保我们计划通过时,轨迹上的每个路径点均未被占用。这 些时间戳和空间上的两个维度(2D position)共同创建了一个三维轨迹(3DTrajectory)。我们还为每个路径点指定了一个速度,用于确保车辆按时到达每个路径点。
现实世界中的规划面临多种约束。首先轨迹应能免于碰撞,这意味着必须没有障碍物。其次,要让乘客感到舒适,所以路径点之间的过渡以及速度的任何变化都必须平滑。再者,路径点对车辆应实际可行,例如高速行驶的汽车不能立即做180度转弯。我们不能构建包含这种不满足控制算法的轨迹。最后,轨迹应合法。我们需要了解每个路径点的交通法律,并确保轨迹遵守这些法律法规。
在道路的任何两点,可能会有多个不会发生碰撞、行驶舒适、可行且合法的轨迹。我们如何选择最佳轨迹呢?答案是使用“cost function”。cost function每个轨迹分配了一个“成本”,我们选择成 本最低的轨迹。轨迹“成本”由各种犯规处罚组成,例如:偏离道路中心,有可能产生碰撞,速度限制,轨迹的曲率和加速度让乘客感到不舒服等。
轨迹成本将所有这些缺陷聚合为单个数值,这使我们能对不同的轨迹按数字大小进行排名。车辆 甚至可能在不同的环境中使用不同的成本函数。例如,高速路的成本函数可能与停车场的不同。
下面以apollo的路径规划为例,介绍motion planning的运行机制:
路径规划流程如下,其中Path Optimizer即对应路径优化的task PiecewiseJerkPathOptimizer:
输入信息:const SpeedData& speed_data, const ReferenceLine& reference_line, const common::TrajectoryPoint& init_point, const bool path_reusable, PathData* const final_path_data ;
其中包括参考线,起始点、速度信息、路径是否重规划等
输出信息:OptimizePath函数得到最优的路径,信息包括横向偏差opt_l, 横向速度opt_dl, 横向加速度opt_ddl。
三、总结
上文从决策规划模块即Planning的整体框架、设计指标以及工程应用等几个角度对自动驾驶的决策规划模块进行了介绍,后续文章会继续介绍Planning的具体分类以及当前研究现状,敬请期待。