- Apollo FSM:一个有限状态机,与高清地图确定车辆状态给定其位置和路线。
- Planning Dispatcher:根据车辆的状态和其他相关信息,调用合适的Planner。
- Planner:获取所需的上下文数据和其他信息,确定相应的车辆意图,执行该意图所需的规划任务并生成规划轨迹。它还将更新未来作业的上下文。
- Deciders和Optimizers:一组实现决策任务和各种优化的无状态库。优化器特别优化车辆的轨迹和速度。决策者是基于规则的分类决策者,他们建议何时换车道、何时停车、何时爬行(慢速行进)或爬行何时完成。
- 黄色框:这些框被包含在未来的场景和/或开发人员中,以便基于现实世界的驱动用例贡献他们自己的场景。
这里有如下一些结构值得我们注意:
名称 |
说明 |
EgoInfo 类 |
包含了自车信息,例如:当前位置点,车辆状态,外围Box等。 |
Frame 类 |
包含了一次Planning计算循环中的所有信息。 |
FrameManager 类 |
Frame的管理器,每个Frame会有一个整数型id。 |
LocalView 类 |
Planning计算需要的输入,下文将看到其定义。 |
Obstacle 类 |
描述一个特定的障碍物。障碍物会有一个唯一的id来区分。 |
PlanningContext 类 |
Planning全局相关的信息,例如:是否正在变道。这是一个 单例 。 |
ReferenceLineInfo 类 |
车辆行驶的参考线,下文会专门讲解。 |
path 文件夹 |
描述车辆路线信息。包含:PathData,DiscretizedPath,FrenetFramePath三个类。 |
speed 文件夹 |
描述车辆速度信息。包含SpeedData,STPoint,StBoundary三个类。 |
trajectory 文件夹 |
描述车辆轨迹信息。包含DiscretizedTrajectory,PublishableTrajectory,TrajectoryStitcher三个类。 |
planning_gflags.h |
定义了模块需要的许多常量,例如各个配置文件的路径。 |
每个Planner都会有一个字符串描述的唯一类型,在配置文件中(见下文)通过这个类型来选择相应的Planner。
这5个Planner的说明如下表所示:
名称 |
加入版本 |
类型 |
说明 |
RTKReplayPlanner |
1.0 |
RTK |
根据录制的轨迹来规划行车路线。 |
PublicRoadPlanner |
1.5 |
PUBLIC_ROAD |
实现了 EM算法 的规划器,这是目前的默认Planner。 |
LatticePlanner |
2.5 |
LATTICE |
基于网格算法的轨迹规划器。 |
NaviPlanner |
3.0 |
NAVI |
基于实时相对地图的规划器。 |
OpenSpacePlanner |
3.5 |
OPEN_SPA |