限制信息:
- 路径的长度以及左右边界限制
- 路径上的速度限制
- 时间上的位置限制
环境信息:
- Routing信息
- 道路结构(汇入车道、路口)
- 交通信号和标识
- 障碍物状态信息(障碍物类型、大小)
- 障碍物预测信息(可能的运动轨迹)
决策的五大功能
-
参考路径
- 后续的交规决策、路径决策和速度决策都是基于参考路径或者参考路径下的Frenet Frame(一种道路坐标系)完成的。
- Routing : Apollo的一个模块,解决A点到B点的路由寻径问题,其路径规划的层次要更加深入到无人车所使用的高精地图的车道(Lane)级别,这里的Lane比实际车道更为精细。
- 参考路径也用于表达换道需求,一般会有两条参考路径,有不同优先级。
- 优先级高的路径->目标路径,优先级低的路径->当前路径。
交规决策
- 有了参考路径后,我们沿着参考路径找到交通标志和信号灯。
- 如果需要停止,会在停止线上生成一个虚拟墙。
- 根据交通规则决定是否在相应的地方放置虚拟墙。
路径决策
- 交通标识和信号、虚拟墙和障碍物共同来影响路径决
- 先判断是否需要换道(是否有优先级更高的参考路径)
- 明确要换道后,判断是否可以安全换道
- 如果安全,路径决策产生路径的边界,否则产生车道内的路径边界
- 如果不需换道,需要确定是否需要借道避让
- 判断条件有两个:
- 当前车道的可行驶宽度是否足够。
- 前方障碍物是否为静止状态且不是由于车流原因静止。
- 如果确定需要借道避让,路径决策会产生车道内路径边界。
路径决策
分三种情况:
- 无障碍物
路径边界一句车道边界或者道路边界来生成,并留有缓冲距离(绿色线)。- 前方障碍物
路径边界会被截至在第一个障碍物的后方。- 左右方障碍物
路径边界会依据车道线和障碍物的边界产生。
- 借道避让的路径边界产生,是在确认可以安全借道之后完成的。
- 是否可以安全借道的决策目前是根据一系列的规则来做出的,这个决策也可以依据ST图或者数据模型。
- 在做路径决策时,我们只考虑静止障碍物,动态障碍物是在速度规划时考虑。
速度决策
- 有了路径边界后,我们调用路径优化器,得到平滑路径,得到平滑的路径后,我们就可以在路径上进行速度决策。
- 首先对一整条路径或者部分路径产生一个或者多个速度边界,将多个速度集成。
- 得到速度限制后,利用ST图来得到时间上的位置限制边界。
- 最终把速度边界和位置边界传给速度优化器得到平滑的速度规划。
路径有三种不同的速度限制:
- 道路限速(黄色)
- 减速带(红色)
- 行人(绿色)
左图中:
- 白色方框代表自动驾驶主车
- 蓝线是主车的路径
- 黑色方框代表障碍车
- 红线是障碍车的预测行驶轨迹
障碍车的预测轨迹和主车的交会关系在ST中表示出来
- t1为障碍车预测轨迹和主车路径的交会时间。
- s1、s2为交汇时障碍车在主车路径上的位置。
- s1代表车尾位置,s2代表车头位置。
在ST图中,我们的目的是找一条不和障碍物碰撞的曲线,同时曲线还要满足速度限制,如上图。
如果我们找到红色的曲线为最优曲线,时间上的位置限制就为红虚线段。
反之绿色的曲线和绿色虚线就为主车的行进跟随。
有了速度限制和位置限制后,就可以把这两个决策传递给速度优化去得到平滑的速度规划,即每个点的时间。
生成速度规划后,就可以结合路径和速度生成最终的Planning的轨迹。
决策场景
*场景的概念首次在Apollo3.5中提出
- 场景的划分没有特别严格的规定,取决于应用场景
- 这是Apollo场景分类的一个例子,尽量保证场景之间相互独立。
我们来看看一个借道避让场景是如何实现的:
这个场景中,我们有6个stage(阶段),每个stage完成借道避让的一个步骤,类似于有限状态机的一个状态。
如果一个Stage发生了环境变化,或者出现错误,会出现Stage之间的跳转挥着退出该场景。
- 每一个Stage都包括交规决策,路径决策,路径优化,速度决策,速度优化。
- 我们把每个功能定义为一个或者几个基本的Task(任务),每个Stage或者直接调用(使用默认参数),或者修改参数,或者修改输入值,这样的实现可以极大的提高场景之间的代码复用。