4. 传感器基础(三):毫米波雷达与超声波雷达工作原理、多传感器融合的必要性与基本策略

4.1 毫米波雷达:我看得远,但看不清细节

毫米波雷达,说白了就是靠发射毫米波段的电磁波来探测目标。它的工作频率通常在 24GHz、77GHz 甚至 94GHz。频率越高,波长越短,分辨率理论上就越好。

我个人习惯把毫米波雷达比作「蝙蝠的耳朵」,但它用的是电磁波,不是声波。它通过发射调频连续波(FMCW),然后接收回波,计算时间差和频率差,就能得出目标的距离和速度。

这里有个关键点:多普勒效应。目标靠近时,回波频率变高;远离时,频率变低。毫米波雷达能直接测出相对速度,这一点摄像头做不到。

核心参数速记:

  • 测距范围: 0.2m ~ 250m(77GHz 长距雷达)
  • 测距精度: ±0.1m 左右
  • 速度精度: ±0.1m/s
  • 角度分辨率: 1° ~ 5°(取决于天线数量)

我在项目中遇到过一个问题:77GHz 雷达在雨雾天气下表现依然稳定,但遇到金属护栏或者隧道墙壁时,会产生大量多径反射。嗯,这时候雷达会「看到」一个虚假的目标,其实只是反射波绕了一圈回来的。

避坑指南: 我曾经调试一个 AEB 系统,雷达在隧道里频繁误触发。后来发现是隧道壁的金属支架产生了强反射。解决办法是加了一个「静止目标过滤」逻辑,但要注意不能把真正的静止障碍物也滤掉了。这个平衡点很难找。

4.2 超声波雷达:近距离的「触角」

超声波雷达,你想想看,其实就是倒车雷达用的那玩意儿。它发射 40kHz 左右的声波,靠接收回波的时间差来算距离。

它的原理很简单:距离 = 声速 × 时间 / 2。声速在空气中大约是 340m/s,所以时间测量精度决定了距离精度。

但超声波有个天生的短板:波束角太宽。一般超声波传感器的波束角在 60° ~ 120° 之间。这意味着它只能告诉你「前方有东西」,但说不清具体在左边还是右边。

传感器类型 有效测距 角度分辨率 典型应用
超声波雷达 0.2m ~ 5m 极低(波束角宽) 泊车辅助、盲区检测
毫米波雷达 0.5m ~ 250m 中等(1°~5°) ACC、AEB、FCW

为什么超声波只能用在近距离?因为声波衰减快。40kHz 的声波在空气中传播 10 米后,能量已经衰减得差不多了。所以它天生就是干「最后一米」的活。

注意: 超声波雷达对软性物体(比如行人衣物、泡沫)的反射很弱。我见过一个案例,车辆低速行驶时,超声波雷达没检测到前方的泡沫箱,结果直接撞上去了。所以超声波不能作为唯一的近距离传感器。

4.3 多传感器融合:为什么必须「抱团」?

你想想看,如果只用摄像头,晚上或者逆光时基本就瞎了。如果只用毫米波雷达,它分不清前方是行人还是金属垃圾桶。如果只用超声波,它连 5 米外的东西都看不到。

所以,多传感器融合不是「锦上添花」,而是「雪中送炭」。说白了,每个传感器都有自己的「盲区」和「弱点」,融合就是让它们互相补位。

我总结了一下,融合的必要性主要体现在三个方面:

  1. 冗余性: 一个传感器失效,另一个还能顶上。比如摄像头被泥巴糊住了,毫米波雷达还能正常工作。
  2. 互补性: 摄像头能识别颜色和纹理,毫米波雷达能测速和测距,超声波能搞定近场盲区。三者结合,信息才完整。
  3. 鲁棒性: 单一传感器在恶劣天气下性能会下降,但融合后整体系统还能保持一定水平的感知能力。

我的经验: 在 L2+ 级别的系统中,我建议至少采用「摄像头 + 毫米波雷达」的组合。超声波可以作为泊车场景的补充。如果预算允许,再加一个激光雷达,那感知能力就非常扎实了。

4.4 融合的基本策略:时间对齐与空间对齐

融合的第一步,也是最容易出问题的一步,就是时间对齐。不同传感器的数据帧率不一样:摄像头通常是 30fps,毫米波雷达是 20fps,超声波可能只有 10fps。如果不做时间同步,你拿到的数据就是「错位的」。

我常用的做法是:以摄像头的时间戳为基准,把雷达和超声波的数据通过插值或外推的方式,对齐到最近的摄像头帧时间点。

第二步是空间对齐。每个传感器都有自己的坐标系:摄像头是像素坐标系,毫米波雷达是极坐标系,超声波是球坐标系。必须把它们统一转换到车辆坐标系下。

这里有个代码示例,展示如何把毫米波雷达的极坐标数据转换到车辆坐标系:

// 毫米波雷达极坐标转车辆坐标系
// 输入:距离 r,角度 theta(相对于雷达安装方向)
// 输出:车辆坐标系下的 x, y

void radar_to_vehicle(float r, float theta, 
                      float radar_x, float radar_y, float radar_yaw,
                      float* vehicle_x, float* vehicle_y) {
    // 1. 先转成雷达坐标系下的笛卡尔坐标
    float local_x = r * cos(theta);
    float local_y = r * sin(theta);
    
    // 2. 再通过旋转和平移转到车辆坐标系
    float cos_yaw = cos(radar_yaw);
    float sin_yaw = sin(radar_yaw);
    
    *vehicle_x = radar_x + local_x * cos_yaw - local_y * sin_yaw;
    *vehicle_y = radar_y + local_x * sin_yaw + local_y * cos_yaw;
}

嗯,这里要注意:雷达的安装位置和朝向必须精确标定。我曾经因为雷达安装支架有 0.5 度的偏差,导致融合后的目标位置偏移了 30 厘米。在高速场景下,这个误差会直接导致 AEB 误触发。

4.5 融合的层次:数据级、特征级、决策级

融合不是简单地把数据堆在一起。根据融合的深度,可以分为三个层次:

  • 数据级融合: 直接把原始数据拼在一起。比如把摄像头图像和雷达点云叠加。优点是信息损失少,缺点是计算量大,而且对时间同步要求极高。
  • 特征级融合: 先分别提取特征,再融合。比如摄像头提取出「行人」的 bounding box,雷达提取出「目标距离和速度」,然后做关联匹配。这是目前最常用的方式。
  • 决策级融合: 每个传感器独立做出决策,最后投票。比如摄像头说「有障碍物」,雷达说「有障碍物」,那就触发刹车。这种方式简单,但容易漏掉一些细节信息。

我个人推荐: 在量产项目中,特征级融合是最稳妥的。它兼顾了性能和鲁棒性。数据级融合更适合学术研究,决策级融合则适合一些简单的辅助功能。

4.6 一个典型的融合流程

我简单描述一下我在项目中用过的融合流程:

  1. 数据预处理: 时间对齐、空间对齐、去噪。
  2. 目标检测: 摄像头输出障碍物列表,雷达输出目标点云。
  3. 关联匹配: 用匈牙利算法或最近邻算法,把摄像头和雷达的目标一一对应起来。
  4. 状态估计: 用卡尔曼滤波或扩展卡尔曼滤波,融合两者的测量值,得到更精确的目标位置和速度。
  5. 目标管理: 维护一个全局的目标列表,处理目标的出现、消失、跟踪丢失等情况。

这里有个关键点:关联匹配 是最容易出错的环节。如果摄像头检测到一个行人,但雷达在相同位置没有检测到目标,怎么办?是相信摄像头还是忽略它?

我的做法是:设置一个置信度阈值。如果摄像头检测到的目标置信度很高(比如 > 0.9),即使雷达没有匹配到,也保留这个目标。反之,如果雷达检测到目标但摄像头没看到,也要根据雷达的 SNR(信噪比)来判断是否保留。

避坑指南: 我曾经遇到一个场景:车辆前方有一个静止的金属井盖,摄像头把它识别为「路面标记」所以没输出,但雷达检测到了。结果融合系统因为没有摄像头确认,就把这个目标过滤掉了。车辆直接压了过去。后来我加了一条规则:任何雷达检测到的静止目标,只要在车辆行驶路径上,都必须保留。

4.7 小结

毫米波雷达和超声波雷达,一个管远、一个管近,一个能测速、一个能测距。但它们各自都有短板。多传感器融合不是简单的「1+1=2」,而是通过时间对齐、空间对齐、关联匹配和状态估计,让系统感知能力达到「1+1>2」的效果。

嗯,最后说一句:融合系统的调试非常痛苦。你永远不知道是传感器本身的问题,还是融合算法的问题。我的建议是:先单独验证每个传感器的性能,确保它们都工作正常,然后再做融合。否则,你会陷入「改算法还是改硬件」的无限循环中。