3. Apollo平台架构与行为规划模块

Apollo 是面向城市开放道路的自动驾驶全栈平台,其核心思想是“高精地图 + 定位 + 感知 + 预测 + 规划 + 控制”的分层解耦。行为规划(Behavior Planning)位于规划模块的上层,它不直接计算方向盘转角或油门刹车,而是回答一个更抽象的问题:当前场景下,自车应该采取哪种驾驶意图与决策。理解 Apollo 整体架构以及行为规划模块的组成、数据流与接口,是后续场景决策工程的基础。

一、Apollo 整体架构:从传感器到车辆控制

Apollo 采用分层架构,自下而上可分为硬件层、驱动层、感知层、地图与定位层、预测层、规划层、控制层,以及贯穿全局的监控与安全模块。各层通过 Cyber RT 中间件以“节点(Component)”形式通信,消息以 Protobuf 定义的 Channel 传递。

  • 感知层:输出障碍物、车道线、交通灯、可行驶区域等,形成对环境的结构化描述。
  • 预测层:对障碍物未来轨迹进行多模态预测,输出概率化轨迹与意图。
  • 规划层:分为行为规划、路径规划、速度规划三级,逐层细化决策。
  • 控制层:将规划轨迹转换为油门、刹车、转向指令,闭环控制车辆。
  • 安全与监控:包括 Guardian、Monitor、HMI,负责异常降级与人工接管。

行为规划处于规划层最上游,它接收感知、预测、地图、定位与路由信息,输出“决策指令”,再交由下游的路径与速度规划执行。因此,行为规划是连接“环境理解”与“运动执行”的决策中枢。

Apollo 分层架构与行为规划位置 感知层 障碍物 / 车道线 / 交通灯 预测层 多模态轨迹 / 意图 地图与定位 HD Map / 位姿 / 路由 行为规划 Behavior Planning 场景识别 → 决策推理 → 意图输出 Decision / Scenario / Stage / Task 路径规划 Path / 几何轨迹 速度规划 Speed / ST 图 控制层 油门 / 刹车 / 转向 安全与监控 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"

四、典型场景案例:路口右转遇行人

以城市路口右转为例,行为规划的数据流如下:

  1. 场景管理器识别当前为“路口通行场景”,进入右转阶段。
  2. 感知输出右侧人行横道上的行人,预测输出行人可能横穿。
  3. 让行决策器判断行人轨迹与自车路径存在冲突,生成停止点。
  4. 决策输出“让行”指令,路径规划生成停止线前的平滑路径。
  5. 速度规划在 ST 图上生成减速至停的速度曲线。
  6. 控制层执行刹车,车辆在停止线前平稳停车。

工程提示:行为规划的决策必须“可解释、可回退”。每个决策都应能追溯到具体场景、阶段与任务,便于仿真回放与问题定位。

五、常见误区与复盘

  • 误区一:把行为规划当成路径规划。行为规划输出的是“意图”,不是具体轨迹;轨迹由下游路径与速度规划生成。
  • 误区二:场景划分过粗。场景过粗会导致决策逻辑臃肿,难以覆盖边缘情况;应按“场景—阶段—任务”逐层细化。
  • 误区三:忽略接口时序。感知、预测、定位消息存在延迟,行为规划需考虑时间戳对齐与超时降级。
  • 复盘要点:每次决策异常,应检查输入消息是否完整、场景是否误判、任务优先级是否冲突、输出决策是否被下游正确执行。

注意:行为规划模块的稳定性直接影响整车安全。任何新增场景或决策器,都必须经过仿真回归、封闭场地测试与实车验证,方可上线。

综上,Apollo 行为规划模块以场景为骨架、以任务为血肉、以决策为输出,通过标准化的数据流与接口,将环境理解转化为可执行的驾驶意图。掌握其架构与接口,是后续进行场景决策工程开发与调试的前提。