从零拆解Apollo无保护左转:三层模型下的自动驾驶决策推演
想象你正坐在一辆自动驾驶汽车里,前方是一个繁忙的十字路口。绿灯亮起,但对面直行的车辆川流不息——这就是典型的无保护左转场景。人类司机需要观察、判断、等待时机,而Apollo系统则通过"场景-阶段-任务"三层模型,将这一复杂决策过程分解为可计算的步骤。本文将带你化身Planning模块,亲历一次完整的决策推演。
1. 场景触发:十字路口的"数字交警"
当车辆接近路口约50米时,ScenarioManager开始扫描环境特征:
def check_scenario(frame): if frame.traffic_light.color == 'GREEN' and \ not frame.traffic_light.has_protected_arrow and \ frame.map_data.intersection_type == 'UNPROTECTED': return TrafficLightUnprotectedLeftTurnScenario()这个场景的独特之处在于:
- 动态博弈性:需要对向直行车辆的实时轨迹预测
- 风险梯度:随着车辆接近路口,安全阈值逐步收紧
- 时间窗口:必须在绿灯周期内完成决策
典型误判情况包括将闪烁黄灯误认为绿灯,或未检测到远处快速接近的对向车辆。系统通过多传感器融合和预测模块的补偿机制来避免这些错误。
2. 阶段分解:左转动作的"慢动作回放"
2.1 Creep阶段:谨慎的"探步"
车辆以0.3m/s²减速度缓行至停止线前3米处,此时:
- 感知聚焦:激光雷达FOV集中在对向车道±30度范围
- 预测沙盘:生成对向车辆的未来5秒轨迹概率云
- 安全校验:持续计算Time-To-Collision(TTC)值
注意:Creep速度需平衡观察需求与通行效率,过快会压缩决策时间,过慢可能导致错过绿灯周期
2.2 决策阶段:博弈论下的最佳时机
系统构建 payoff matrix 评估不同选择:
| 动作选项 | 成功率 | 舒适度 | 通行效率 |
|---|---|---|---|
| 立即通过 | 65% | 2.8/5 | 92% |
| 继续等待 | 98% | 4.2/5 | 45% |
| 放弃本轮 | 100% | 4.5/5 | 0% |
决策引擎综合以下因素动态调整权重:
- 剩余绿灯时间
- 后方车辆跟车距离
- 对向车辆加速度变化率
2.3 执行阶段:精准的轨迹控制
确定通过后,路径规划器生成两条候选轨迹:
trajectory_a = { 'curvature': [0.01, 0.12, 0.09], # 更平缓的转弯 'speed_profile': [3.2, 4.1, 5.0] # 加速通过 } trajectory_b = { 'curvature': [0.02, 0.15, 0.10], # 更急的转弯 'speed_profile': [4.0, 3.8, 4.5] # 保持匀速 }最终选择trajectory_a,因其在以下评估中胜出:
- 横向加速度低于0.3g
- 方向盘转角变化率<15°/s
- 预留1.2米安全边际
3. 任务层:微观操作的"齿轮组"
3.1 速度规划任务
采用三次样条插值生成速度曲线,关键约束条件:
- 最大减速度不超过2.5m/s²
- jerk值限制在1.8m/s³内
- 停止线前速度必须降为0
异常处理:当检测到对向车辆突然加速时,触发紧急修订:
- 立即中断当前速度曲线
- 在0.3秒内生成新的制动曲线
- 保证减速度平滑过渡
3.2 路径优化任务
使用Frenet坐标系下的QP优化:
// 目标函数:平滑性+偏移最小化 minimize ∫(d''(s))²ds + w₁∫(d(s)-d_ref(s))²ds subject to: d(s) ∈ [d_min(s), d_max(s)] // 道路边界约束 |d'(s)| < tan(30°) // 曲率约束实际运行时会进行约15次迭代优化,耗时控制在80ms内。
3.3 风险监控任务
实时计算以下安全指标:
| 指标名称 | 计算公式 | 阈值 |
|---|---|---|
| 碰撞时间(TTC) | Δd / Δv | >3.0s |
| 制动安全距离(SSD) | v²/(2μg) + vτ | <5m |
| 轨迹偏离度 | max | d_actual - d_desired |
当任意指标接近阈值时,系统会提前0.5秒启动降级方案。
4. 场景退出:左转完成的"状态清算"
成功通过路口后,系统执行:
- 场景审计:记录关键决策点的实际表现vs预测
- 资源释放:清除为本次左转分配的临时内存
- 状态迁移:切换回LaneFollowScenario的初始化阶段
性能数据:典型无保护左转场景处理耗时约120-200ms,其中:
- 环境感知占比35%
- 决策计算占比45%
- 轨迹生成占比20%
在极端复杂路口(如6向交叉口),系统会主动降级为更保守的决策模式,必要时通过V2X获取补充信息。这种分层处理机制既保证了常规场景的高效性,又为边缘情况预留了安全余量。