共计 1834 个字符,预计需要花费 5 分钟才能阅读完成。
背景痛点分析
红绿灯右转场景是城市自动驾驶中最具挑战性的场景之一,主要原因在于其复杂的动态交互环境。根据我们在北京、上海等城市的实际路测数据统计,右转场景的事故风险是普通直行的 4.7 倍。具体难点体现在以下几个方面:

- 行人穿越风险 :中国式过马路现象导致行人可能在任何时间点突然出现,特别是在绿灯最后几秒
- 对向直行车辆冲突 :部分路口允许对向直行车辆与右转车辆同时通行
- 交通灯相位复杂性 :有些路口设有专用右转箭头灯,有些则完全依赖主信号灯
- 视野遮挡问题 :大型车辆如公交车经常造成视线遮挡
现有基于规则的决策方案主要存在两个不足:
- 过度保守策略导致通行效率低下(平均等待时间达 38 秒)
- 突发状况应对能力弱(遇到违规行人时急刹率达 27%)
技术方案设计
分层决策架构
我们采用行为决策层 + 运动规划层的双层架构:
- 行为决策层 (100ms 周期)
- 输入:感知数据 + 预测结果 +HDMap
- 输出:离散行为指令(停止 / 缓行 / 正常通过)
- 运动规划层 (50ms 周期)
- 输入:行为指令 + 车辆状态
- 输出:平滑的轨迹序列
LSTM 意图预测模块
针对行人和其他交通参与者的行为预测,我们设计了多模态 LSTM 网络:
class IntentPredictor(nn.Module):
def __init__(self):
super().__init__()
self.lstm = nn.LSTM(
input_size=12, # 位置 + 速度 + 加速度 + 航向
hidden_size=64,
num_layers=2
)
self.mlp = nn.Sequential(nn.Linear(64, 32),
nn.ReLU(),
nn.Linear(32, 5) # 停止 / 行走 / 奔跑 / 犹豫 / 异常
)
def forward(self, x):
# x: [seq_len, batch, features]
out, _ = self.lstm(x)
return self.mlp(out[-1]) # 只取最后时刻输出
PPO 策略训练
使用 PPO 算法训练右转策略,关键设计点包括:
- 状态空间 (37 维):
- 自车状态(速度、位置、航向角等)
- 最近 3 个行人 / 车辆的状态
- 交通灯状态和剩余时间
-
路口拓扑特征
-
奖励函数 :
def calc_reward(prev_state, action): safety = -10 if collision else 0 efficiency = 0.1 * progress comfort = -0.01 * abs(jerk) return safety + efficiency + comfort
代码实现关键点
状态编码器实现
def encode_state(ego, obstacles, traffic_light):
# 使用 Frenet 坐标系处理道路相对位置
ego_frenet = map.to_frenet(ego.pos)
# 构建障碍物特征向量
obs_feats = []
for obj in nearest_objects(obstacles, 3):
rel_pos = obj.pos - ego.pos
obs_feats.extend([rel_pos.norm(), # 相对距离
obj.velocity,
calc_ttc(ego, obj) # 碰撞时间估算
])
# 拼接所有特征
return np.concatenate([
ego_frenet,
ego.velocity,
*obs_feats,
[traffic_light.time_left]
])
仿真验证
在 CARLA 0.9.13 中构建了包含 100 个右转场景的测试集,主要指标对比如下:
| 指标 | 规则方案 | 强化学习方案 | 提升幅度 |
|---|---|---|---|
| 通过率 | 82% | 96% | +14% |
| 平均耗时 (s) | 28.7 | 19.2 | -33% |
| 急刹次数 / 百公里 | 15.3 | 4.1 | -73% |
测试场景覆盖了以下典型情况:
- 行人突然从视觉盲区冲出
- 对向直行车辆抢黄灯
- 右转箭头灯与主信号灯相位差
避坑指南
在实际部署中我们遇到了几个典型问题:
- 感知延迟补偿 :
- 问题:感知模块 200ms 延迟导致决策滞后
-
方案:在状态输入层增加运动学外推补偿
-
极端天气处理 :
- 问题:大雨导致传感器噪声增大
-
方案:在奖励函数中增加不确定性惩罚项
-
长尾场景应对 :
- 问题:遇到罕见交通指挥手势
- 方案:建立人工干预记录回放机制
开放性问题
在实际应用中,我们仍然面临一些值得探讨的问题:
- 如何量化平衡通行效率与安全保守策略?是否应该引入动态调整参数?
- 当遇到完全未知的新场景时,除了紧急制动,是否有更优雅的降级策略?
- 在 V2X 尚未普及的阶段,如何更好地利用视觉信号(如交警手势、其他车辆转向灯)?
期待与各位同行交流实践心得,共同推进自动驾驶决策系统的发展。
正文完
