一、前言:
在自动驾驶整个软件框架中,决策规划模块有着重要的作用。决策规划模块一般也叫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模块在设计时考虑的三个指标的平衡。
同人类驾驶员一样,Planner在接收到经过视觉神经网络处理过的3D Vector Space后,将会在该Space进行搜索判断,从而找到一条轨迹可以最大限度地提高汽车的安全性、舒适性和效率,将车辆规划至目的地。
作为最早布局自动驾驶的厂商,Tesla早期的Planner已经可以很好的在高速公路或者是城市快速路段进行规划,包括单车道的车道保持、导航变道、主动超车、自动上下闸道也都经受了量产的考验;随着自动驾驶的发展,Tesla Autopilot 的使用场景需要从高速扩展到城市道路。
二、Planning模块的组成
在Planning模块中,一般分为决策模块decision与运动规划motion planning两部分。decision模块又分为场景选择即scenario Manager、当前状态选择stage Process、以及行为决策behavior decider;motion planning一般又分为路径规划、速度规划以及轨迹生成。
轨迹规划的目标是生成一系列路径点所定义的轨迹。我们为每个路径点分配了一个时间戳和速度。由于移动的障碍物可能会暂时阻挡部分路段,轨迹中的每个路径点都有时间戳。我们可以将 时间戳与预测模块的输出相结合,以确保我们计划通过时,轨迹上的每个路径点均未被占用。这 些时间戳和空间上的两个维度(2D position)共同创建了一个三维轨迹(3DTrajectory)。我们还为每个路径点指定了一个速度,用于确保车辆按时到达每个路径点。
现实世界中的规划面临多种约束。首先轨迹应能免于碰撞,这意味着必须没有障碍物。其次,要让乘客感到舒适,所以路径点之间的过渡以及速度的任何变化都必须平滑。再者,路径点对车辆应实际可行,例如高速行驶的汽车不能立即做180度转弯。我们不能构建包含这种不满足控制算法的轨迹。最后,轨迹应合法。我们需要了解每个路径点的交通法律,并确保轨迹遵守这些法律法规。
在道路的任何两点,可能会有多个不会发生碰撞、行驶舒适、可行且合法的轨迹。我们如何选择最佳轨迹呢” />
轨迹成本将所有这些缺陷聚合为单个数值,这使我们能对不同的轨迹按数字大小进行排名。车辆 甚至可能在不同的环境中使用不同的成本函数。例如,高速路的成本函数可能与停车场的不同。
下面以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的具体分类以及当前研究现状,敬请期待。