共计 2255 个字符,预计需要花费 6 分钟才能阅读完成。
背景痛点
在城市道路场景中,停车标志识别任务面临诸多挑战。这些挑战直接影响自动驾驶系统的安全性和可靠性,需要开发者特别注意。

- 遮挡问题 :路边的车辆、行人或其他障碍物可能部分或完全遮挡停车标志,给检测带来困难。
- 光照变化 :不同时间段(如正午强光或黄昏逆光)会导致标志反光特性变化,影响视觉检测效果。
- 运动模糊 :车辆行驶过程中,尤其是转弯时摄像头捕捉的图像容易出现模糊,降低检测精度。
- 视角变化 :标志的可见角度随车辆位置动态变化,需要算法具有多角度识别能力。
这些因素综合作用,导致传统计算机视觉方法在实际应用中表现不稳定,需要更鲁棒的解决方案。
技术方案
1. Apollo 感知模块的传感器融合策略
Apollo 平台采用 LiDAR 和相机的多传感器融合方案,充分发挥各自优势:
- 时间同步 :通过硬件同步确保传感器数据时间对齐,误差控制在毫秒级
- 标定优化 :采用棋盘格标定法获取相机 -LiDAR 外参,重点优化俯仰角参数
- 数据关联 :基于标定结果将 LiDAR 点云投影到图像空间,建立特征对应关系
典型融合流程:
[相机检测] --> [ROI 提取] --> [点云聚类]
↓
[LiDAR 检测] <-- [数据关联]
2. 改进的 YOLOv5 检测模型
针对停车标志特点对 YOLOv5 进行定制化改进:
- 数据增强 :
- 添加模拟遮挡的随机矩形 mask
- 采用 Gamma 变换增强低光照场景鲁棒性
-
加入运动模糊 kernel 模拟行车状态
-
迁移学习 :
- 使用 BDD100K 通用交通标志数据集预训练
- 在自定义标注的停车标志数据集上微调
- 冻结 backbone 只训练检测头防止过拟合
3. 决策状态机设计
停车决策采用五状态有限状态机:
class StopSignFSM:
def __init__(self):
self.state = "APPROACHING" # 初始状态
def update(self, distance, speed):
if self.state == "APPROACHING" and distance < 30:
self.state = "PREPARE_STOP"
elif self.state == "PREPARE_STOP" and speed < 0.5:
self.state = "FULL_STOP"
# 其他状态转换逻辑...
关键参数说明:
– 触发距离阈值:30 米(根据刹车性能调整)
– 完全停止判定速度:0.5m/s
– 最小停车时长:3 秒(符合交规要求)
代码实现
1. Cyber RT 通信示例
以下代码展示如何通过 Apollo 的 Cyber RT 框架接收感知结果:
# 导入 Cyber RT 库
from cyber.python.cyber_py3 import cyber
from modules.perception.proto import perception_obstacle_pb2
def perception_callback(msg):
"""处理感知结果回调"""
for obj in msg.perception_obstacle:
if obj.type == perception_obstacle_pb2.PerceptionObstacle.STOP_SIGN:
print(f"检测到停车标志,距离:{obj.position.x:.1f}m")
if __name__ == "__main__":
cyber.init()
node = cyber.Node("stop_sign_processor")
node.create_reader("/perception/obstacles",
perception_obstacle_pb2.PerceptionObstacles,
perception_callback)
cyber.spin()
2. Dreamview 可视化调试
通过 Apollo Dreamview 可以直观验证算法效果:
- 启动 Dreamview 前端
- 选择对应的车辆配置
- 在 Module Controller 中启用 perception 模块
- 查看 3D 可视化界面中的检测结果
性能优化
1. 模型量化对比
测试不同精度模型的推理速度(Tesla T4 GPU):
| 模型版本 | 输入尺寸 | 精度 | 推理时延 (ms) |
|---|---|---|---|
| YOLOv5x | 640×640 | FP32 | 45.2 |
| YOLOv5s | 640×640 | FP16 | 12.7 |
| 量化版 | 640×640 | INT8 | 8.3 |
2. 标定误差影响
标定误差对停车位置的影响(10 米距离时):
- 1° 角度误差 → 约 17cm 位置偏差
- 5cm 位移误差 → 直接映射为定位误差
建议至少每季度进行一次标定校验。
避坑指南
常见标定问题
症状 :检测框与点云不重合
解决方案 :
1. 检查标定板摆放是否水平
2. 增加标定图像的多样性(不同距离 / 角度)
3. 使用 Apollo 校准工具验证重投影误差
防振荡设计
决策逻辑中需要添加:
# 添加状态切换延迟
if current_state != new_state:
if time.time() - last_change_time > 1.0: # 1 秒延迟
change_state()
延伸思考
本方案可扩展到其他交通标志识别场景:
- 让行标志 :修改检测模型标签,调整决策距离阈值
- 限速标志 :增加数字 OCR 识别模块
- 施工标志 :建立临时障碍物映射机制
建议尝试在 Apollo 的 SimControl 中构建虚拟场景进行验证。
总结
通过 Apollo 平台实现停车标志处理需要端到端的系统思维,本文详细剖析了从感知到决策的全流程关键技术点。实际部署时建议:
- 使用高精度标定设备确保传感器对齐
- 在典型场景下收集足够多的边缘 case 数据
- 通过 Dreamview 反复验证决策逻辑
自动驾驶系统的可靠性建立在每个模块的精心打磨之上,希望本文的经验能帮助开发者少走弯路。
