技术文档丨Apollo规划模块技术指导

规划是无人车为了某一目标而作出一些有目的性的决策过程,对于无人驾驶车辆而言,这个目标通常是指从出发地到达目的地,同时避免障碍物,并且不断优化驾驶轨迹和行为以保证乘客的安全舒适。规划层通常又被细分为任务规划(Mission Planning)、行为规划(Behavioral Planning)和动作规划(Motion Planning)三层。

 

Apollo系统中的Planning模块实际上是整合了决策和规划两个功能,该模块是自动驾驶系统中最核心的模块之一。

 

  以下,ENJOY  

 

简介

 

在包括Apollo 3.0在内的前序版本中,都使用相同的配置和参数对不同的驾驶场景进行规划。这种方法虽然是线性的且易于实现, 但并不灵活或者没有面向特定的场景优化。随着Apollo系统的成熟,在不同的路况和驾驶用例中使用,开发更加模块化、场景指定和全局的方法更有必要。在该方法中,每个驾驶用例都被视为不同驾驶场景。这种设计方法是很有用的,因为在当前这种方式下,修复一个特定场景下的问题不会像以前版本中出现的影响那样,来影响其他场景的情况。在以前版本中,所有的驾驶用例都被认为是一个驾驶场景,导致一个问题的修复会影响其他的驾驶用例。

 

驾驶场景

 

在Apollo 3.5中,我们将聚焦以下三种主要驾驶场景:

 

 

如下图所示,车道跟随场景是默认驾驶场景,包括但不限于在单一车道驾驶(例如巡航)或者变道,遵循基本的交通规则或简单的转弯。

 

▲车道跟随场景—默认驾驶场景

 

 

在这种场景中,如果在当前车辆行驶车道上有静止车辆或者障碍物,而且在不发生碰撞的情况下,车辆无法安全地通过当前车道,规划模块将执行以下步骤:

 

  •  检查邻近车道是否有靠近的车辆。

  •  如果安全,做一个侧转动作,从当前车道转到旁边车道。

  • 一旦安全通过障碍物,迅速回到原来车道。

 

▲侧方行驶

 

停车标志

 

对于停车标志,有两种不同的驾驶场景:

 

不受保护的:在这种情况下, 汽车希望通过一个具有两路停车标志的十字路口,如下图所示。因此,自动驾驶系统必须驾驶车辆缓慢地通过十字路口,并且在继续行驶之前测量十字路口的车流量。

 

▲无保护驾驶场景

 

受保护的:在这种情况下,汽车希望通过一个具有四路停车标志的十字路口,如下所示。因此, 在继续行驶之前,我们的自动驾驶系统必须衡量本车到停车标志之间的车流量,并且理解车辆在队列中的位置。

 

▲受保护驾驶场景

 

为了安全通过停车标志区域,受保护和无保护两种场景都将执行以下步骤:

 

  • 即将到达停车标志点:感知当前正在等待其他停车标志的所有车辆或者障碍物。

  • 完全停车:监测并查看先前停留在其他停车标志车道的车辆是否已经开始移动。保证之前到达的车辆都已经离开是十分重要的。

  • 缓慢向前移动(爬行):检查看是否有其他车辆正在移动或者处于非保护场景下的停车状态,检查当前车道的旁边车道是否有迎面驶来的车辆。

  • 安全通过十字路口。

 

注意:研发团队正努力工作,以在规划模块中增加其他驾驶场景的规划方案,其中一个案例就是处理交通灯。

 

 

Apollo 3.5中规划模块的体系结构已经有所改变,该架构能够反映针对不同驾驶场景的模块化设计方法。如下图所示, 在规划器中, 每一个独立的驾驶场景都和对应的场景处理器一一对应。每个驾驶场景都有其一组特定于该场景的驾驶参数,使其更安全、高效、更易于自定义和调试以及更灵活。因为每个阶段都被划分为多个任务,使得每个阶段也是可配置的,并且可以通过编辑该场景的配置文件config来删除或创建每个任务。

 

▲ Apollo 3.5 中规划模块的体系结构图

 

一些关键特性:

 

  • Apollo FSM(Apollo有限状态机):它是一个根据车辆的当前位置、路由方案和高精地图,来决定车辆状态的有限状态机。

  • 规划分发器:根据车辆的当前状态和一些其他相关信息调用合适的规划器 。

  • 规划器: 获取所需的上下文数据和其他信息, 确定车辆的意图,执行该意图所需的规划任务,并生成规划轨迹。它还将更新上下文以服务于未来的任务。

  • 决策者和优化器:一组实现决策任务和各种优化的无状态库。优化器专门优化车辆的轨迹和速度。决策者是基于规则的决定制造者, 给出何时更换车道、何时停止、缓慢行驶或蠕变何时完成的建议。

  • 黄色框:这些框主要是为未来的驾驶场景和开发者基于现实世界的驾驶用例贡献自己的驾驶场景预留的。

 

注意:如果您想加入自己的驾驶场景,请参考已有的场景。