障碍物检测多传感器数据融合

在城市街道的早高峰,一辆自动驾驶小巴缓缓驶入车流。雨雾蒙蒙中,前车突然急刹——摄像头因逆光几乎“失明”,但系统却稳稳地完成了减速避让。是什么让它“看”得如此可靠?答案就藏在背后的 多传感器融合大脑 里 🤖💡。

这类场景每天都在验证一个事实:单打独斗的时代已经过去,真正的环境感知,靠的是“众感之和”。无论是机器人穿梭仓库、AGV自动避障,还是无人配送车穿行小区,单一传感器总有“掉链子”的时候。而把摄像头、激光雷达、毫米波雷达甚至超声波捏合在一起,才能实现全天候、全场景的稳定输出。

那问题来了:这些传感器到底各自擅长啥?怎么把它们的信息“揉”在一起?别急,咱们一步步拆开来看。


先说 摄像头 ,它就像系统的“眼睛”👀。分辨率高、成本低,还能识别红绿灯、交通标志、行人穿什么颜色衣服……靠的就是图像里的纹理和语义信息。YOLO、Faster R-CNN 这类模型一上,2D框立马出来,分类准得不行。

import cv2
from ultralytics import YOLO

model = YOLO('yolov8n.pt')
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    if not ret: break
    results = model(frame)
    annotated = results[0].plot()
    cv2.imshow('Live Detection', annotated)
    if cv2.waitKey(1) == ord('q'): break

cap.release(); cv2.destroyAllWindows()

但这双“眼睛”也有软肋:晚上没光?一片漆黑;太阳直射?过曝失效;大雾天?啥也看不见。更麻烦的是——它不知道深度,除非用双目立体匹配,否则只能猜距离。

于是我们请出第二位选手: 激光雷达(LiDAR) ,它的绝活是“量尺寸”📏。通过发射成百上千束激光,精确测距,生成三维点云。哪怕伸手不见五指,也能清晰勾勒出车辆、电线杆、台阶的轮廓。

比如下面这段代码,用 DBSCAN 对点云做聚类,轻松找出障碍物群:

import numpy as np
from sklearn.cluster import DBSCAN
import open3d as o3d

def lidar_obstacle_detection(points):
    clustering = DBSCAN(eps=0.5, min_samples=5).fit(points[:, :2])
    labels = clustering.labels_
    obstacles = []
    for label in set(labels):
        if label == -1: continue
        cluster = points[labels == label]
        center = np.mean(cluster, axis=0)
        size = np.max(cluster, axis=0) - np.min(cluster, axis=0)
        obstacles.append({'center': center, 'size': size})
    return obstacles

pcd = o3d.io.read_point_cloud("scan.pcd")
points = np.asarray(pcd.points)
obstacles = lidar_obstacle_detection(points)
print(f"发现 {len(obstacles)} 个障碍物!")

不过 LiDAR 也不是万能的。下雨下雪时,水滴会散射激光,远距离目标点变少、噪声增多;而且设备贵啊,动辄几万元起步,还怕脏污遮挡。

这时候就得轮到 毫米波雷达 登场了,它是那个“风雨无阻”的硬汉汉子 🧔‍♂️🌧️。工作在77GHz频段,穿透力强,不受光照、雾霾影响,最关键的是——它能直接测速!

利用 FMCW(调频连续波)技术和多普勒效应,雷达不仅能告诉你“有多远”,还能告诉你“来得多快”。这对高速场景太重要了。比如前方车辆是否正在减速,仅凭位置变化可能滞后,但速度信号几乎是实时的。

典型参数像 TI 的 AWR1843BOOST 就很能打:
- 探测距离 >250 米
- 距离分辨率 <4cm
- 速度分辨率 <0.2 m/s
- 角度分辨率 <1°(配合 MIMO 天线阵列)

但它也有短板:角分辨率低,两个并行车道的目标容易“粘”成一个;地面反射还会带来虚警;输出通常是处理后的“目标列表”,不像点云那样保留原始信息。

最后这位是“贴身保镖”—— 超声波传感器 ,专管近身安全 👐。成本才几十块,功耗极低,广泛用于倒车雷达和 AGV 碰撞预警。探测范围一般在 0.2~5 米之间,适合慢速贴近操作。

缺点也很明显:方向性差,左右都会“听到”回声;对柔软物体(如布料沙发)基本无效;温度变化还会影响声速计算精度。所以它通常不单独决策,而是作为辅助验证。


现在四个“感官”都齐了,接下来的关键问题是: 怎么融合?

你可能会想:“不如把所有原始数据一股脑堆一起?”听起来信息最全,但现实很骨感——不同模态的数据格式、频率、坐标系完全不同,强行拼接等于制造混乱 😵。

学术界早就提出了经典的 三层融合架构

层级 名称 特点
Level 0 数据级融合 原始数据直接融合,信息完整但计算爆炸 💥
Level 1 特征级融合 提取特征后融合,效率与性能平衡 ⚖️
Level 2 决策级融合 各自判断再投票,鲁棒性强但易丢细节

实际工程中,大家更喜欢“混合打法”:前端做特征提取,后端做决策融合。比如先把图像特征映射到鸟瞰图(BEV),再和雷达的目标列表对齐,最后统一跟踪。

说到算法,有几个名字必须提:

🔹 卡尔曼滤波家族(KF / EKF / UKF)

这是状态估计界的“老炮儿”。假设目标在匀速运动,结合预测模型和观测值,递归更新位置和速度。遇到非线性?上 EKF(扩展卡尔曼) UKF(无迹卡尔曼) ,后者精度更高,适合剧烈机动。

还有更高级的 IMM(交互多模型) ,同时跑多个运动模型(匀速、转弯、加减速),根据 likelihood 自动切换,应对突发行为游刃有余。

🔹 概率网格地图(Occupancy Grid Mapping)

把世界切成一个个小格子,每个格子记录“被占据”的概率。每次传感器观测进来,就用贝叶斯规则更新:

$$
P(\text{occ}|z) = \frac{P(z|\text{occ}) P(\text{occ})}{P(z)}
$$

这种表示方式特别适合异构传感器融合,视觉说“好像有人”,雷达说“确实有移动目标”,两者叠加,置信度飙升 ✅。常用于低速泊车、室内导航等场景。

🔹 深度学习端到端融合(TransFuser, BEVFusion, FIERY)

这才是未来的趋势🔥。不再手动设计融合逻辑,而是让神经网络自己学!

比如 BEVFusion ,将相机图像通过 LSS(Lift-Splat-Shoot)方法投影到鸟瞰图空间,再与雷达或 LiDAR 的 BEV 特征拼接,最后统一解码障碍物位置和类别。整个过程可微分、可训练,真正实现了“从像素到决策”。

这类模型依赖强大算力(GPU 必备),但在高端自动驾驶平台正快速落地。


来看一个典型的系统流程是怎么走的:

[Camera]     → [2D检测: 行人/车/标志]
[LiDAR]      → [点云聚类: 几何形状提取]
[Radar]      → [目标列表: 距离+速度]
[Ultrasonic] → [近距离报警]

                    ↓
         [时空同步] ← PTP/GPS时间戳 + 外参标定
                    ↓
      [坐标统一] → 全部转换至车体坐标系
                    ↓
   [跨传感器关联] ← IoU / Mahalanobis 匹配
                    ↓
     [融合估计] → KF 更新轨迹 + 类型融合
                    ↓
       [输出障碍物列表] (ID, pos, vel, type)
                    ↓
               [路径规划与控制]

每一步都有讲究。比如 时间同步 ,要是摄像头和雷达差了 100ms,高速下车辆都跑了好几米,匹配全乱套。建议控制在 ≤10ms,最好用硬件触发或 PTP 精确授时。

再比如 外参标定 ,即各传感器之间的相对位姿(旋转和平移矩阵)。一开始可以用 Kalibr 或 Autoware 工具箱标定一次,但长期运行中机械振动可能导致漂移,聪明的做法是加入在线自校准模块,利用公共特征(如车道线、角点)动态修正。

还有就是 故障容错机制 。万一 LiDAR 被泥巴糊住?系统应自动降级为“视觉+雷达”模式,虽然精度下降,但至少还能安全行驶。这叫“优雅退化”,是成熟系统的标配。


面对各种复杂场景,融合策略也能见招拆招:

场景痛点 融合对策
摄像头夜间失效 雷达+LiDAR 接管,维持基础避障
雷达角分辨率低 引入 LiDAR 点云约束方位
LiDAR 雨雾衰减 雷达提供速度冗余,保持跟踪连贯
超声波误触发 查看视觉是否有对应物体,联合判真
动态目标抖动 卡尔曼滤波平滑轨迹,去噪稳如老狗 🐶

当然,也不能忽视现实约束:

  • 计算资源 :BEVFusion 这种大模型跑不动?那就简化结构,或者只在关键区域精细处理;
  • 通信带宽 :LiDAR 点云可达 1Gbps,CAN 总线扛不住,得上千兆以太网或 PCIe;
  • 功耗与散热 :边缘设备尤其要注意,别让 Fusion 变成“发热 Fusion”🔥;

回头想想开头那个雨天急刹的场景,其实背后是一场精密协作:
👉 摄像头虽受逆光干扰,但仍捕捉到模糊轮廓;
👉 LiDAR 在雨中略有衰减,但近处点云依然可用;
👉 雷达则牢牢锁定前车的速度变化;
👉 融合算法综合判断:“这不是误报,是真的在减速!”
于是控制器果断介入,避免了一场追尾。

这才是智能感知该有的样子:不依赖任何一个“英雄传感器”,而是依靠整体系统的 冗余性、互补性和鲁棒性

未来会怎样?随着域控制器算力暴涨,像 FIERY 这样的纯学习式融合架构会越来越普及——不需要人为定义特征、不用手工调参,只要足够多的数据,模型就能学会最优融合策略。

也许有一天,我们的机器人不再“听命于规则”,而是“理解了世界”。

而现在,正是这场变革的起点。🚀

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐