1. 环岛通行场景的决策挑战
环岛作为城市道路中的特殊节点,其无信号灯、多入口、连续车流的特点给自动驾驶决策系统带来了独特挑战。在传统人工驾驶中,司机主要依靠视觉观察和"默会知识"来判断通行权,而自动驾驶车辆需要将这种模糊的社交规则转化为精确的数学逻辑。Apollo决策算法在这个场景中需要同时处理:
- 空间拓扑复杂性:环岛内同时存在切线行驶、变道、汇入/分离等多种运动轨迹
- 时间窗口动态性:相邻车辆的速度差可能导致通行权计算的瞬时变化
- 行为不确定性:人类驾驶员可能不严格遵守让行规则,需要防御性驾驶策略
我们团队在仿真测试中发现,单纯基于交通规则的硬编码方案(如"入口让行内侧车辆")在实际运行中会导致高达37%的决策冲突,这促使我们开发了融合规则与博弈的混合决策框架。
2. 通行权分配的核心算法架构
2.1 分层决策模型
Apollo采用三层决策架构处理环岛场景:
- 规则层:内置交通法规的确定性逻辑(如让行标志解析)
- 博弈层:基于非完全信息博弈论的动态协商
- 安全层:最坏情况下的应急避碰策略
# 伪代码示例:决策优先级判断 def right_of_way_decision(ego_vehicle, opponents): if check_traffic_rules(ego_vehicle): # 规则层判断 return RULE_BASED elif game_theory_negotiation(ego_vehicle, opponents): # 博弈层 return GAME_BASED else: return SAFETY_MODE # 安全层接管2.2 关键状态机设计
环岛通行过程被分解为6个状态:
- 入口检测(Entry Detection)
- 间隙评估(Gap Evaluation)
- 汇入决策(Merge Decision)
- 巡航控制(Circulating Control)
- 出口准备(Exit Preparation)
- 分离执行(Divergence Execution)
每个状态都对应特定的通行权计算方式。例如在间隙评估阶段,算法会计算TTC(Time to Collision)和TTR(Time to Reach)两个关键指标:
TTC = 相对距离 / 相对速度
TTR = |当前角度-目标角度| / 角速度
当同时满足TTC>3s且TTR<1.5s时,系统判定可获得安全通行权。
3. 仿真环境搭建要点
3.1 场景建模规范
使用Apollo的Dreamview+Cyber RT框架搭建仿真环境时,需要特别注意:
- 环岛半径与车道宽度比例应严格符合GB 5768-2009标准
- 每个入口需设置虚拟检测线(Detection Line)
- 动态障碍物应至少包含3种行为模式:
- 保守型(Conservative):严格让行
- 激进型(Aggressive):强行驶入
- 随机型(Stochastic):不定向变道
# 启动仿真环境的典型命令 ./scripts/bootstrap.sh && \ ./dreamview/frontend/dist/bin/dreamview --flagfile=modules/dreamview/conf/dreamview.conf3.2 关键参数配置
在modules/planning/conf/planning_config.pb.txt中需要调整:
scenario_type: "ROUNDABOUT" roundabout_config { min_entry_speed: 2.0 # 最低入口速度(m/s) max_wait_time: 10.0 # 最大等待时间(s) yield_distance: 5.0 # 让行触发距离(m) game_theory { max_iterations: 5 # 博弈迭代次数 convergence_thresh: 0.2 # 收益收敛阈值 } }4. 典型问题排查指南
4.1 决策振荡问题
症状:车辆在入口处反复切换go/stop决策
排查步骤:
- 检查detection_line的触发逻辑是否防抖
- 验证TTC计算中的速度滤波参数
- 调整game_theory.max_iterations避免过度优化
4.2 汇入失败案例
当出现连续5次汇入失败时:
- 采集opponent_vehicle的轨迹预测数据
- 检查reference_line的平滑度(曲率变化率应<0.1)
- 验证SL坐标系转换的实时性(延迟应<50ms)
4.3 仿真与实车差异
常见差异源及解决方案:
| 差异类型 | 仿真表现 | 实车表现 | 修正方法 |
|---|---|---|---|
| 定位误差 | 理想坐标 | 存在漂移 | 增加定位噪声模型 |
| 响应延迟 | 即时执行 | 100-200ms延迟 | 注入执行器延迟 |
| 感知误差 | 完美检测 | 存在漏检 | 配置感知模型降级 |
5. 本地调试技巧
5.1 MQTT消息监控
使用mosquitto_sub实时观察决策过程:
mosquitto_sub -t "/apollo/planning" -v | \ jq '.decision.object_decision.predictions[] | {id: .id, intent: .intent}'5.2 关键日志定位
在planning.INFO日志中重点关注以下tag:
ROUNDABOUT_GAP_EVAL:间隙评估详情GAME_PAYOFF_MATRIX:博弈收益矩阵SAFETY_OVERRIDE:安全层触发记录
5.3 可视化调试工具
推荐使用rqt_plot实时监控决策变量:
rosrun rqt_plot rqt_plot \ /apollo/planning/debug/ttc \ /apollo/planning/debug/ttr \ /apollo/planning/debug/yield_probability在实际工程中我们发现,当环岛内车辆密度超过0.2辆/秒时,传统决策算法的冲突率会急剧上升。通过引入基于部分可观察马尔可夫决策过程(POMDP)的改进算法,我们在测试中将高峰时段的通行效率提升了22%,同时将决策冲突率控制在3%以下。这需要特别注意belief state更新频率与计算负载的平衡,通常建议将更新间隔设置在100-300ms之间。