3. Apollo平台架构与行为规划模块
Apollo 是面向城市开放道路的自动驾驶全栈平台,其核心思想是“高精地图 + 定位 + 感知 + 预测 + 规划 + 控制”的分层解耦。行为规划(Behavior Planning)位于规划模块的上层,它不直接计算方向盘转角或油门刹车,而是回答一个更抽象的问题:当前场景下,自车应该采取哪种驾驶意图与决策。理解 Apollo 整体架构以及行为规划模块的组成、数据流与接口,是后续场景决策工程的基础。
一、Apollo 整体架构:从传感器到车辆控制
Apollo 采用分层架构,自下而上可分为硬件层、驱动层、感知层、地图与定位层、预测层、规划层、控制层,以及贯穿全局的监控与安全模块。各层通过 Cyber RT 中间件以“节点(Component)”形式通信,消息以 Protobuf 定义的 Channel 传递。
- 感知层:输出障碍物、车道线、交通灯、可行驶区域等,形成对环境的结构化描述。
- 预测层:对障碍物未来轨迹进行多模态预测,输出概率化轨迹与意图。
- 规划层:分为行为规划、路径规划、速度规划三级,逐层细化决策。
- 控制层:将规划轨迹转换为油门、刹车、转向指令,闭环控制车辆。
- 安全与监控:包括 Guardian、Monitor、HMI,负责异常降级与人工接管。
行为规划处于规划层最上游,它接收感知、预测、地图、定位与路由信息,输出“决策指令”,再交由下游的路径与速度规划执行。因此,行为规划是连接“环境理解”与“运动执行”的决策中枢。
二、行为规划模块的组成
Apollo 行为规划模块并非单一算法,而是一套“场景驱动”的决策框架。其核心组成包括场景管理器、决策器、阶段与任务、以及决策输出接口。
- 场景管理器(Scenario Manager):根据地图、定位、感知与路由信息,判断当前处于哪种驾驶场景,如车道跟随、变道、路口通行、停车让行、紧急制动等。
- 场景(Scenario):每个场景定义一组阶段(Stage),阶段按顺序或条件切换,描述该场景下的决策流程。
- 阶段(Stage):阶段内部由若干任务(Task)组成,任务是最小决策单元,如“判断是否可变道”“计算跟车距离”“生成停止点”。
- 决策器(Decider):负责具体判断逻辑,如变道决策、让行决策、交通灯决策、行人避让决策。
- 决策输出(Decision):以 Protobuf 消息形式输出主决策、目标车道、目标速度、停止点、让行对象等。
核心理解:场景是“宏观剧本”,阶段是“分镜”,任务是“动作”,决策器是“判断依据”。四者组合,使行为规划既能覆盖复杂场景,又能保持模块化与可扩展性。
三、数据流与接口
行为规划模块的输入输出均通过 Cyber RT 的 Channel 传递,主要接口如下表所示。
| 方向 | 接口/消息 | 内容说明 |
|---|---|---|
| 输入 | PerceptionObstacles | 障碍物位置、速度、类型、朝向 |
| 输入 | PredictionObstacles | 障碍物未来轨迹与概率 |
| 输入 | LocalizationEstimate | 自车位姿、速度、加速度 |
| 输入 | RoutingResponse | 全局路由与目标车道 |
| 输入 | HD Map | 车道、路口、停止线、交通灯 |
| 输出 | ADCTrajectory | 决策指令 + 路径 + 速度 |
| 输出 | Decision | 主决策、目标车道、停止点、让行对象 |
在代码层面,行为规划的核心入口通常位于 planning 组件中,通过 ScenarioManager 加载场景插件,并调用 Process 方法逐帧执行。以下为简化后的配置示例:
scenario:
name: "LANE_FOLLOW"
stages:
- name: "LANE_FOLLOW_DEFAULT"
tasks:
- "LANE_CHANGE_DECIDER"
- "PATH_BOUNDS_DECIDER"
- "SPEED_BOUNDS_PRIORI_DECIDER"
- "STOP_DECIDER"
- "DP_ST_SPEED_OPTIMIZER"
四、典型场景案例:路口右转遇行人
以城市路口右转为例,行为规划的数据流如下:
- 场景管理器识别当前为“路口通行场景”,进入右转阶段。
- 感知输出右侧人行横道上的行人,预测输出行人可能横穿。
- 让行决策器判断行人轨迹与自车路径存在冲突,生成停止点。
- 决策输出“让行”指令,路径规划生成停止线前的平滑路径。
- 速度规划在 ST 图上生成减速至停的速度曲线。
- 控制层执行刹车,车辆在停止线前平稳停车。
工程提示:行为规划的决策必须“可解释、可回退”。每个决策都应能追溯到具体场景、阶段与任务,便于仿真回放与问题定位。
五、常见误区与复盘
- 误区一:把行为规划当成路径规划。行为规划输出的是“意图”,不是具体轨迹;轨迹由下游路径与速度规划生成。
- 误区二:场景划分过粗。场景过粗会导致决策逻辑臃肿,难以覆盖边缘情况;应按“场景—阶段—任务”逐层细化。
- 误区三:忽略接口时序。感知、预测、定位消息存在延迟,行为规划需考虑时间戳对齐与超时降级。
- 复盘要点:每次决策异常,应检查输入消息是否完整、场景是否误判、任务优先级是否冲突、输出决策是否被下游正确执行。
注意:行为规划模块的稳定性直接影响整车安全。任何新增场景或决策器,都必须经过仿真回归、封闭场地测试与实车验证,方可上线。
综上,Apollo 行为规划模块以场景为骨架、以任务为血肉、以决策为输出,通过标准化的数据流与接口,将环境理解转化为可执行的驾驶意图。掌握其架构与接口,是后续进行场景决策工程开发与调试的前提。