1. Apollo 10.0 Planner状态机架构解析
在自动驾驶系统中,决策规划模块相当于人类驾驶员的大脑皮层,负责将感知信息转化为具体的驾驶行为。Apollo 10.0采用的分层状态机设计,通过场景分类和行为级状态管理,实现了复杂道路环境下的智能决策。这种架构的核心优势在于:
- 场景解耦:不同驾驶场景(如常规跟车、变道、路口处理)拥有独立的状态机实例,避免逻辑交叉污染
- 行为原子化:每个场景内部细分为可组合的基础行为单元(如跟车、超车),提高代码复用率
- 安全隔离:紧急场景(如EMERGENCY_PULL_OVER)具有最高优先级,可中断任何常规状态
实际工程中,这种设计使得新增场景(如施工区通行)只需扩展场景枚举和对应状态机,无需修改核心框架。我在参与某园区无人车项目时,就曾基于该架构在两周内接入了专属的"园区低速模式"场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 场景分类与状态转换机制
2.1 主场景(Scenario)工作流
Apollo的顶层状态机采用有限状态机(FSM)模式,其状态转移图可抽象为:
code复制[LANE_FOLLOW] -- 障碍物阻塞 --> [SIDEPASS]
[LANE_FOLLOW] -- 前车低速 --> [CHANGE_LANE]
[CHANGE_LANE] -- 变道完成 --> [LANE_FOLLOW]
[LANE_FOLLOW] -- 红绿灯检测 --> [TRAFFIC_LIGHT]
每个场景的激活都遵循严格的准入校验。以CHANGE_LANE为例,其进入条件检查链包含:
- 导航需求验证(是否规划变道)
- 车道线拓扑检查(目标车道是否存在且连通)
- 障碍物预测分析(最小风险间隙计算)
- 车辆动力学约束(最大转向角限制)
实际调试中发现,变道决策对相邻车道后车速度的预测精度极为敏感。我们曾遇到因感知延迟导致变道过程中遭遇后车加速的险情,最终通过引入0.5秒的预测补偿时间解决了该问题。
2.2 行为级(Behavior)状态管理
在LANE_FOLLOW场景下,行为级状态机的典型工作流程如下:
cpp复制// 伪代码示例:跟车状态处理逻辑
void FollowState::Process(const PerceptionObstac
