共计 2565 个字符,预计需要花费 7 分钟才能阅读完成。
背景与行业痛点
自动紧急制动系统(AEB)是自动驾驶安全链条中的关键环节,但在实际测试中常面临三大挑战:

- 传感器误检率居高不下 :毫米波雷达对金属护栏等静态物体易产生虚警(False Positive),而摄像头在逆光或低光照条件下漏检率(False Negative)飙升
- 复杂场景覆盖不足 :现有测试标准(如 Euro NCAP)主要针对结构化道路,难以覆盖中国特有的混合交通场景(如电动自行车横穿)
- 系统响应延迟超标 :从感知到执行的端到端延迟要求小于 100ms,但传统基于 CAN 总线的架构常达到 120-150ms
技术方案对比
单传感器方案局限性
- 纯视觉方案 :在 KITTI 数据集测试中,典型 ROC 曲线 AUC 值约 0.82,强光下性能下降 40%
- 纯毫米波方案 :对行人检测的召回率仅 65%,且无法识别停止的车辆(低多普勒效应)
多传感器融合优势
我们采用前向摄像头(200 万像素 @30fps)+ 77GHz 毫米波雷达(4D 成像雷达)的方案,通过传感器融合实现:
\text{Fusion Score} = \alpha \cdot P_{vision} + (1-\alpha) \cdot P_{radar}
其中 α 为动态权重因子(光照条件良好时取 0.7,夜间取 0.3)。实测 ROC 曲线 AUC 提升至 0.93,关键指标对比如下:
| 指标 | 纯视觉 | 纯雷达 | 融合方案 |
|---|---|---|---|
| 误触发率 (/h) | 2.1 | 3.8 | 0.9 |
| 检出延迟 (ms) | 80 | 60 | 70 |
| 极端场景覆盖率 | 62% | 58% | 89% |
核心实现细节
时空对齐算法
采用改进的 Kalman 滤波实现多源数据同步,关键参数设置:
# Kalman 滤波器初始化参数
Q = np.diag([0.1, 0.1, 0.01, 0.01]) # 过程噪声协方差(考虑车辆机动性)R = np.diag([0.5, 0.5]) # 观测噪声协方差(雷达精度更高)
时间同步采用 PTP 协议,硬件同步误差 <1ms。空间对齐通过标定板实现外参标定,重投影误差控制在 0.3 像素以内。
Carla 仿真测试
构建了 6 类极端测试场景:
- 隧道出入口强光切换
- 低矮障碍物(高度 <30cm)
- 横穿行人 + 遮挡
- 雨雾天气(能见度 <50m)
- 前车突然切出
- 金属护栏误检场景
仿真平台与实车测试结果相关系数达 0.87,有效减少了 80% 的实车测试里程需求。
代码实现示例
ROS2 节点核心逻辑
class AEBNode(Node):
def __init__(self):
super().__init__('aeb_controller')
# 创建消息同步器
self.sync = MessageFilter([Subscriber(Image, "/camera/front"),
Subscriber(PointCloud2, "/radar/points")],
queue_size=10)
self.sync.registerCallback(self.fusion_callback)
# TTC 计算参数
self.min_valid_ttc = 0.5 # 忽略超过 2 秒的预测
self.history_len = 5 # 历史帧数用于滤波
def fusion_callback(self, img_msg, radar_msg):
# 时空对齐处理
aligned_data = kalman_fusion(
img_msg, radar_msg,
self.tf_buffer.lookup_transform("base_link", "camera"))
# 计算碰撞时间(带异常值过滤)ttc = self.calculate_ttc(aligned_data)
if ttc > self.min_valid_ttc:
self.get_logger().warning(f"Invalid TTC: {ttc:.2f}s")
return
# 触发制动决策(ASIL- D 要求双路校验)if self.check_consensus(ttc):
self.publish_brake_command(ttc)
TTC 计算优化
采用改进的移动平均滤波:
def calculate_ttc(self, data):
# 动态权重计算(基于传感器置信度)confidence = data.camera_conf * 0.6 + data.radar_conf * 0.4
# 历史数据滤波
self.ttc_history.append(data.raw_ttc)
if len(self.ttc_history) > self.history_len:
self.ttc_history.pop(0)
# 剔除离群点(3σ 原则)mean = np.mean(self.ttc_history)
std = np.std(self.ttc_history)
valid_ttc = [x for x in self.ttc_history
if abs(x - mean) < 3*std]
return np.median(valid_ttc) * confidence
实测性能验证
在苏州智能网联测试区完成 2000km 道路测试,关键指标提升:
- 误触发率从 2.4 次 / 百公里降至 0.3 次 / 百公里(下降 87.5%)
- 对两轮车识别的 F1-score 从 0.72 提升至 0.91
- 系统响应延迟从 135ms 优化至 92ms(满足 ASIL- D 要求)
工程避坑指南
- 雨天雷达补偿 :降雨量 >20mm/ h 时,需动态增加雷达发射功率(建议补偿系数 1.2-1.5 倍)
- 摄像头标定 :每 5000km 或经历剧烈颠簸后必须重新标定,防止镜头移位导致误检
- NPU 加速策略 :将视觉检测模型量化到 INT8 时,要保留至少 10% 的 FP16 层防止精度崩塌
- 非视距补偿 :遇到大货车遮挡时,启用 V2X 获取前方车辆数据(需设置 300ms 超时机制)
- 极端温度测试 :-30℃环境下要给毫米波雷达加热模块预运行 5 分钟,防止晶振频偏
开放性问题讨论
- 如何平衡 AEB 灵敏度与驾乘舒适性?过度制动会导致用户投诉,但保守策略又增加安全风险
- 在 L4 级自动驾驶中,AEB 应该作为主系统的备份,还是直接集成到规划控制模块?
- 面对中国特有的「鬼探头」场景,是否需要引入路侧感知数据作为补充?
结语
通过多传感器融合与严格的测试验证,我们构建了满足 ASIL- D 要求的 AEB 系统。但自动驾驶安全没有终点,特别是在中国复杂的道路环境下,仍需持续优化传感器配置和算法策略。建议工程团队重点关注极端场景的覆盖率和系统失效的 graceful degradation 机制。
正文完
