当前位置:首页>自动驾驶>自动驾驶之传感器融合篇

自动驾驶之传感器融合篇

  • 2026-11-06 13:50:49
自动驾驶之传感器融合篇
前言:本篇从数据流转的角度看感知。每个传感器吃什么数据进来、中间经历了哪些处理、最后吐什么数据出去,搞清楚这条链路,才能理解传感器融合到底在融合什么。
传感器融合(Sensor Fusion) 本质上是把多条数据管道的输出拼到一起,形成一个完整的环境认知。多管道的数据怎么对齐、怎么互补?欢迎大家一起探讨~

一、感知数据流的全貌

先看一张全景图,理解整个数据链路:
关键在于:不同传感器的输出格式完全不同——有的输出原始像素,有的输出处理好的目标列表。这就像有人交来"生肉",有人交来"预制菜",融合模块需要把它们统一处理。

二、摄像头:从光到图像

2.1 输入数据

摄像头接收的是可见光信号(波长约 380-780nm)。镜头将光线聚焦到图像传感器(CMOS/CCD)上,传感器把光子转化为电信号。

2.2 中间处理

处理阶段

做什么

通俗理解

ISP(图像信号处理)

去噪、白平衡、曝光控制、HDR合成、畸变校正

把"素颜"图像修成"美颜"图,让后续算法更好用

图像分割

对每个像素分类,区分路面/车道线/行人/车辆等

给画面里每个像素贴标签

目标检测

用 BBox(边界框)标出物体的位置和类别

在画面里画框,写上"这是车""这是人"

车道线检测

提取车道线像素,拟合出车道线方程

把弯曲的白线变成数学公式

其中,图像分割是感知的核心能力之一,按精度分为三个层次:

分割类型

做什么

举例

普通分割

把不同物体的像素区域分开

前景和背景分开

语义分割

给每个区域打上类别标签

知道这块是"路面"、那块是"车道线"

实例分割

区分同类的不同个体

知道前面有三辆车,且能区分"车A"和"车B"

深度学习时代的分割算法主要分两路线:
语义分割(FCN、U-Net、DeepLab 等)遵循一个通用框架——前端用全卷积网络提取特征(先压缩再放大),后端用 CRF 优化边界,核心就是先压缩成特征,再放大回原尺寸,每个像素做个分类判断;
实例分割(Mask R-CNN 等)则采用"检测+分割"的思路,先用检测网络框出物体,再在框内做像素级分割。
这里不展开算法细节,关键区分是:语义分割回答"这块像素是什么类别",实例分割回答"这块像素属于哪个具体物体"。

2.3 输出数据

摄像头最终输出的不是图像本身,而是从图像中提取的结构化信息:

输出内容

数据形式

用途

物体检测结果

BBox坐标 + 类别标签 + 置信度

知道"前方50m有一辆车"

车道线信息

车道线方程/像素掩码

知道"车道边界在哪"

交通标识

标识类型 + 位置

知道"限速80"

可行驶区域

像素级掩码

知道"哪些路面能走"

需要注意:单目摄像头没有直接深度信息,距离需要通过算法估算(如基于目标在画面中的高度估算距离),精度有限。双目摄像头可以通过左右视图视差计算深度,但计算量大、基线长度限制有效距离。

三、激光雷达:从光到点云

3.1 输入数据

激光雷达主动发射激光脉冲(通常 905nm 或 1550nm),接收目标反射的回波信号。输入的本质是光的飞行时间。

3.2 中间处理

处理阶段

做什么

通俗理解

TOF测距

根据光速×飞行时间/2,计算每个激光点的距离

拿秒表量光跑一个来回的时间

扫描成像

通过旋转/固态扫描,覆盖整个视场,生成点云

一个点一个点地"扫"出三维世界

点云预处理

去噪(去掉异常点)、下采样(减少数据量)、地面分离

先把"脏数据"洗掉,再把地面和非地面分开

聚类与分类

将相邻的点聚类成物体,再用算法判断物体类型

把散点"拼"成物体,再认出是车还是人

点云预处理中有一个关键步骤——地面分离。因为地面也会产生大量点云,如果不先去掉,后续聚类会被地面"淹没"。常用的方法是利用高度差和法向量特征,把地面点过滤掉。

3.3 输出数据

输出内容

数据形式

用途

原始点云

每个点含 (x, y, z, intensity)

三维场景重建

障碍物聚类

聚类后的3D BBox

知道"前方有障碍物,体积约2m×1.5m×1.5m"

物体分类

类别标签 + 置信度

知道"这个障碍物是车辆"

反射强度

每个点的 intensity 值

辅助判断材质(如车道线反光强)

激光雷达最大的优势是直接获得精确的三维距离信息,不需要像摄像头那样靠算法估算。但它没有颜色信息——点云是"黑白"的,认不出红色绿灯还是绿色绿灯。

四、毫米波雷达:从波到目标

4.1 输入数据

毫米波雷达发射毫米波(77GHz 频段,波长约 4mm),接收目标反射的回波信号。输入的本质是回波的频率差和相位差。

4.2 中间处理

毫米波雷达跟前面两个传感器最大的不同是——它自带处理芯片,内部就完成了大部分计算,直接输出目标列表,不需要外部算法再处理。

处理阶段

做什么

通俗理解

FMCW调制

发射频率线性变化的信号,通过混频得到中频信号

让回波和发射波"相减",差值里藏着距离信息

FFT处理

对中频信号做快速傅里叶变换,分离不同距离的目标

把混在一起的信号"拆"开

多普勒处理

利用多普勒频移计算目标速度

回波频率变高了→目标在靠近;变低了→在远离

角度估计

通过多天线阵列(MIMO),利用相位差计算目标方位

像人两只耳朵判断声源方向一样

聚类与跟踪

将检测到的点聚类为目标,并持续跟踪

把零散的检测点"拼"成一辆连续追踪的车

4.3 输出数据

毫米波雷达输出的已经是处理后的目标列表,不需要再跑算法:

输出内容

数据形式

用途

目标距离

径向距离(m)

知道"前方120m有目标"

目标速度

径向速度(m/s)

知道"目标正以20m/s的速度靠近"

目标角度

方位角(°)

知道"目标在左前方30°方向"

目标ID

跟踪编号

知道"这是之前那辆车,不是新出现的"

这就是前文说的"预制菜"——毫米波雷达直接输出可直接使用的目标信息,融合模块拿来就能用。但它的短板也很明显:分辨率低、无法识别物体类型,它只知道"前方有个东西在动",但不知道是人还是车还是护栏。

五、超声波雷达:简单直接

5.1 输入与处理

超声波雷达的处理链路最简单:
  • 输入:发射超声波(40kHz 左右),接收回波
  • 处理:测量飞行时间 → 计算距离(声速×时间/2)
  • 输出:一个距离值(m)
没有复杂的中间处理,就是"喊一声,听回声,算距离"。探测距离通常<5m,适合泊车和低速场景。

六、四类传感器数据对比

把四条数据管道放在一起对比,差异一目了然:

维度

摄像头

激光雷达

毫米波雷达

超声波雷达

输入信号

可见光

激光脉冲

毫米波

超声波

输出格式

像素矩阵 → 结构化信息

3D点云 → 障碍物聚类

目标列表(距离/速度/角度)

距离值

数据处理位置

外部算法(GPU/NPU)

外部算法(CPU/GPU)

传感器内部芯片

传感器内部芯片

是否需算法后处理

需要(大量)

需要(中等)

基本不需要

不需要

数据抽象程度

低(原始像素)

中(结构化点云)

高(直接目标级)

高(直接距离值)

核心输出价值

颜色/纹理/类别

精确3D距离

距离+速度

近距离测距

这就引出了一个核心问题:四条管道输出的数据格式完全不同,怎么放到一起去?

七、传感器融合:让不同格式的数据"对齐"

融合要解决的核心问题是对齐——时间对齐、空间对齐、数据对齐。

7.1 时间同步

不同传感器的采样频率不同:

传感器

典型频率

每帧数据量

摄像头

30-60 Hz

几 MB/帧

激光雷达

10-20 Hz

几 MB/帧

毫米波雷达

20-50 Hz

几 KB/帧

超声波

10 Hz

几十字节/帧

摄像头一秒拍 60 张,激光雷达一秒转 20 圈,数据时间戳不完全一致。融合时需要做时间插值——以某个传感器的时间为基准,把其他传感器的数据插值到同一时刻。用互联网黑话说,先"对齐"时间。

7.2 空间标定

不同传感器安装在车辆不同位置,各自有各自的坐标系。需要通过标定(Calibration)把它们统一到一个坐标系下:
  • 内参标定:镜头畸变、焦距等传感器自身参数
  • 外参标定:传感器之间的相对位置和旋转关系(如摄像头到激光雷达的变换矩阵)
标定不准,摄像头看到的"前方有车"和激光雷达测到的"前方有障碍物"可能根本不是同一个物体。

7.3 融合三个层次

时间和空间都对齐之后,按照融合发生的阶段,可以分为三个层次:

融合层次

别名

融合什么

优势

劣势

数据级

前融合

原始数据(像素+点云)直接拼接

信息保留最完整

数据量巨大、计算压力极大

特征级

中融合

各传感器提取的特征做融合

计算量适中、平衡效率

特征提取可能丢信息

决策级

后融合

各传感器独立出结果后"投票"

实现简单、容错性好

信息损失最大

打个比方:
  • 数据级:像把所有食材丢进一口大锅一起炖——味道最融合,但火候难掌握
  • 特征级:像先切好食材再按菜谱组合——灵活可控
  • 决策级:像各做一道菜最后摆一桌——简单但口味可能不搭
实际量产系统通常是多层级混合:关键感知任务用数据级或特征级,辅助任务用决策级。

7.4 为什么要融合:三个场景

场景一:大雨天高速行驶
摄像头被雨水模糊,但毫米波雷达穿透雨雾,直接输出前车距离和速度。这时候"预制菜"(毫米波数据)就比"生肉"(摄像头图像)靠谱。
场景二:前方黑色静止车辆
激光雷达对黑色低反射率物体检测距离缩短,但摄像头图像中黑色车和背景对比度高,一眼就能识别。两条管道交叉验证,谁也不漏。
场景三:夜间无路灯路口
摄像头几乎"失明",但激光雷达不依赖光源,点云照画不误;毫米波雷达同时探测到远处来车的速度。融合后,即使摄像头"罢工",系统依然能感知环境。

八、车道线检测:一条数据管道的演进

车道线检测是静态环境感知中最典型的任务,它的演进恰好体现了"数据处理"思路的变化。
传统方法的数据处理链路:
  • Canny 边缘检测:找图像中亮度急剧变化的位置
  • 手动分割路面区域:指定感兴趣区域,去掉无关边缘
  • 霍夫变换:把图像空间的点转换到参数空间,找出直线
  • 拟合车道线:综合检测到的线,求平均,画出车道线
这套方法逻辑清晰,但遇到弯道、遮挡、磨损车道线就容易歇菜。
深度学习方法(如 LaneNet)改为"先分割再聚类":
  1. 先用语义分割找出所有车道线像素(是/不是车道线)
  2. 再生成每个像素的嵌入向量(Embedding),让同一车道的像素"抱团"
  3. 最后聚类,区分不同车道
从手动设区域到自动学特征,从单步骤到分阶段处理,核心变化是——让算法自己从数据中学习处理规则,而不是人工写死规则。

九、总结

用一张图把整篇文章的数据流串起来:
回看整条链路,传感器融合的本质就是:
  • 每种传感器的输入信号不同(光/激光/毫米波/超声波)
  • 每种传感器的处理方式不同(ISP/TOF/FFT/简单计时)
  • 每种传感器的输出格式不同(像素/点云/目标列表/距离值)
融合模块做的事情,就是把这些异构数据统一对齐、交叉验证,最终拼出一个完整的环境认知。

谢谢观看,码字不易。如果觉得文章对您有帮助,感谢您点个在看,转发分享!

最新文章

随机文章