本文是根据Apollo开发者社区在3月26日举办的“Apollo决策技术分享”在线图文直播课程的授课内容整理而得。
一,决策的目的
决策模块相当于无人驾驶系统的大脑,保障无人车的行车安全,同时也要理解和遵守交通规则。 为了实现这样的功能,决策模块为无人车提供了各种的限制信息包括:
1.路径的长度以及左右边界限制;
2.路径上的速度限制;
3.时间上的位置限制。
此外,决策模块几乎利用了所有和无人驾驶相关的环境信息,包括:
1.Routing 信息;
2.道路结构,比如当前车道,相邻车道,汇入车道,路口等信息;
3.交通信号和标示,比如红绿灯,人行横道,Stop Sign,Keep Clear 等;
4.障碍物状态信息,比如障碍物类型,大小,和速度;
5.障碍物预测信息,比如障碍物未来可能的运动轨迹。
正是因为决策模块处理了所有上层业务逻辑信息,并输出了抽象的限制信息,我们保证了下游路径和速度优化的抽象性,并完全和上层的地图,感知,预测的解耦。
二,决策的功能模块
1,参考路径(Reference Line):对道路中心线进行平滑
参考路径(Reference Line)在 Apollo 决策中起着非常重要和关键的作用。
1.首先,参考路径是在没有障碍物路况下的默认行车路径;
2.其次,后续的交规决策,路径决策,和速度决策都是基于参考路径或者参考路径下的 Frenet Frame 完成的;
3.最后,参考路径也用于表达换道的需求,一般换道时会有两条参考路径,分别有不同的优先级。
其中,优先级高的路径表示目标路径,优先级低的路径为当前路径(如右图所示)。
参考路径的获取可以有多种方式。
在 Apollo 里,参考路径的计算是根据 routing 的线路,找到相应的高精地图中的道路中心线,然后进行平滑。
有了参考路径之后,我们会沿着该路径找到所有在该路径上的交通标示和交通信号灯,并根据一系列的交通规则来决定是否在需要停止在交通标示或者交通信号灯的停止线前。
2,交规决策:虚拟墙
虚拟墙
如果需要停止,决策模块会在停止线上生成一个虚拟的墙。虚拟墙会影响后续的路径及速度决策。
如果是红灯,决策模块会在交通灯的停止线上生成一道虚拟的墙。
如果是绿灯,不生成任何虚拟墙。这样我们就完成了绿灯行红灯停的交通规则。
其他的交通规则也采取类似的方法,根据规则决定是否在相应的地方放置虚拟墙。
3,路径决策(路径决策只考虑静止障碍物,动态障碍物是在速度决策时考虑):路径边界
有了根据交通标示和交通信号灯产生的虚拟墙,再加上从感知模块得到的障碍物信息,我们就可以开始进行路径决策。
路径决策的过程类似于上图中的决策树。
首先我们判断是否需要进行换道(Lane Change)。
如果我们有多条参考路径并且当前车辆不在优先级最高的参考路径上,则表明需要进行换道,否则为不需要换道。在明确换道的情况下,我们需要判断当前路况是否可以进行安全换道。
如果安全,路径决策会产生换道的路径边界,否则产生车道内的路径边界。
如果我们确定当前没有换道需求,路径决策会继续确定是否需要借道避让(Side Pass)。
判断条件主要有两个:
1.当前车道的可行驶宽度不够;
2.前方障碍物为静止状态且不是由于车流原因静止。比如,路边卸货车辆。 如果确定需要借道避让,路径决策会判断是否可以安全借道。如果安全,路径决策会产生街道避让的路径边界,否则产生车道内的路径边界
根据路径决策结果,生成路径边界:
(1)车道内(In-lane)路径边界
图中的蓝色线是车辆的参考路径(Reference Line),路径边界的生成是在参考路径的 Frenet Frame 下完成的。
如果我们确定没有借道避让的需求,路径决策会产生车道内的路径边界。
车道内路径边界的决策有图中所示的三种情况:
1,车道内无障碍物,
2,车道前方有障碍物,
3,车道左右方有障碍物。
实际路况中会是其中的一种情况或者多种情况的组合:
1.在无障碍物的情况下(左图),路径边界依据车道边界或者道路边界来生成,并留有一定距离的缓冲(绿色虚线);
2.在前方有障碍物的情况下(中图),路径边界会被截止在第一个障碍物的后方;
3.如果车道左右方有障碍物(右图),路径边界的产生会依据车道线和障碍物的边界。
(2)借道避让(Side-Pass)路径边界
借道避让的路径边界产生,是在确认可以安全借道之后完成的。
而是否可以安全借道的决策,目前是根据一系列的规则来做出的,这个决策也可以依据 ST图或者数据模型来生成。
如上图所示,路径的边界是依据本车道和需要借用车道的边界来生成,同时也需要考虑周围的障碍物。
(3)换道(Lane-Change)路径边界
换道路径边界的产生和借道避让相似(如上图所示),主要的区别是 Reference Line(参考线)在换道时是在目标车道上,而借道避让时是在本车道上。
有了路径边界后,我们调用路径优化器(Path Optimizer)得到在边界限制内的平滑路径。 得到平滑的路径后,我们就可以在路径上进行速度决策。
4,速度决策:1,速度限制边界;2,位置限制边界
决策流程:
1.速度限制边界。
我们首先对一整条路径或者部分路径产生一个或者多个速度限制边界(Path Bounds);
2.集成速度限制边界。
然后对多个速度边界进行集成,得到最终的路径上的速度限制边界(Speed Bound Over s);
3.获取位置限制边界。
得到速度限制之后,我们在利用 ST 图来得到时间上的位置限制边界(Position Bound Over t);
4.根据速度和位置限制边界,获取平滑的速度规划。
最后我们把速度边界和位置边界传给速度优化器(Speed Optimizer)得到平滑的速度规划。
(1)速度限制边界及其集成
我们在很多情况下,出于行车安全或者遵守交规的原因,需要对车辆的速度进行限制。比如,当路径旁边有行人时,我们要减速慢行;当我们要借道避让时,也要减速慢行。
这样的速度限制可能是对整条路径,比如道路限速,也有可能是对路径中的一小段,比如减速带。
如图右上所示,沿路径(s)有三种不同的速度限制:
1,道路限速(黄色)
2,减速带(红色)
3,行人(绿色)
为了得到整条路径的综合限速,我们把这几种限速集成到一起。
(2)位置限制边界
得到了路径上的速度边界后,我们就可以利用 ST 图来求解时间上的位置边界。
上图是一个简单的 ST 图的例子,我们用这个例子来简单解释我们为什么需要 ST 图以及如何从 ST 图上得到时间上的位置边界。
图左是一个简单的驾驶场景,右侧灰色方框代表自动驾驶主车,蓝线是主车的路径;左侧黑色方框代表障碍车,红线是障碍车的预测行驶轨迹。
把障碍车的预测轨迹和主车的路径的交汇关系在 ST 图中表示出来,就如图右所示。
t1 为障碍车预测轨迹和主车路径的交汇时间;
s1,s2 为交汇时障碍车在主车路径上的位置;
s1 代表车尾位置,s2 代表车头位置。
在 ST 图中,我们的目标是找到一条不和障碍物碰撞的曲线。同时,曲线还需要满足我们之前计算的路径上的速度限制,即曲线的斜率不能超过 v 的限制边界(图右上)。找到最优的一条曲线后,我们根据曲线计算时间上的位置限制边界。
例如,如果我们找到红色的曲线为最优曲线,时间上的位置限制就为红虚线段。在 x,y 平面中,就表现为主车在障碍车换道前进行超车。反之,绿色的曲线和绿色虚线段表示主车在障碍车换道后,进行跟随。
(3)速度优化
有了路径上的速度限制,及时间上的位置限制之后,我们就可以把这两个决策传递给速度优化器得到平滑的速度规划,即在路径上的每个点的时间。
生成速度规划后,我们就可以结合路径和速度生成最终的 Planning 的轨迹。