传感器基础与特性:常见传感器类型与误差模型
做多源融合这些年,我最大的体会是:不了解传感器的脾气,融合就是瞎蒙。你想想看,每个传感器都有自己的“性格”——激光雷达怕雨雪,摄像头怕黑夜,IMU 会飘,GPS 会跳。把这些数据硬凑在一起,结果只会更糟。
这一章,咱们就聊聊常见传感器的底细。我会结合自己踩过的坑,帮你把每个传感器的特性、误差模型和标定方法理清楚。
常见传感器类型
先列个清单。多源融合里最常用的传感器,无非这五种:
- 激光雷达(LiDAR):测距准,但怕天气
- 摄像头(Camera):信息丰富,但缺深度
- 惯性测量单元(IMU):短时精度高,长时飘得厉害
- 全球定位系统(GPS):绝对位置准,但更新慢、易遮挡
- 毫米波雷达(Radar):全天候,但分辨率低
下面逐个拆开看。
激光雷达
激光雷达的原理很简单——发射激光,测反射时间,算出距离。我最早接触的是 16 线 Velodyne,那会儿觉得这东西真神奇,点云一出来,周围环境清清楚楚。
但实际用起来,问题不少:
- 雨雪雾天性能骤降:水滴会散射激光,点云变得稀疏。我在一次雨天测试中,原本能看清 100 米外的车,结果 30 米外就全是噪点。
- 反射面影响大:黑色车身、玻璃幕墙会吸收或折射激光,导致测距偏差甚至丢点。
- 角分辨率有限:线数越高越贵,16 线在 50 米外只能看到大概轮廓。
关键参数:测距精度(±2cm 算好的)、视场角(水平 360° 常见)、线数(16/32/64/128)、帧率(10Hz 或 20Hz)。
摄像头
摄像头是融合系统里的“眼睛”。它提供的信息最丰富——颜色、纹理、语义——但缺了深度信息。
我习惯把摄像头分为两类:
- 单目:便宜,但测距靠估计,误差大
- 双目:能算深度,但计算量大,基线长度限制测距范围
摄像头最大的问题是光照敏感。强光下过曝,暗光下噪点多,逆光时几乎全黑。我记得有一次做夜间测试,摄像头基本废了,全靠雷达和 IMU 撑着。
我的建议:摄像头一定要配宽动态范围(WDR)功能,否则白天黑夜切换时,图像质量会断崖式下降。
IMU
IMU 包含加速度计和陀螺仪。它的特点是:短时精度极高,长时漂移严重。
为什么?因为 IMU 测量的是加速度和角速度,要得到位置和姿态,得做两次积分。积分嘛,误差会累积。你想想看,哪怕加速度计有 0.01 m/s² 的零偏,积分 10 秒后位置误差就能到 0.5 米,60 秒后……不敢想。
IMU 的误差模型比较复杂,我后面会细讲。这里先记住几个关键点:
- 零偏(Bias):静止时输出不为零
- 噪声(Noise):白噪声 + 随机游走
- 尺度因子(Scale Factor):输出值与真实值的比例偏差
GPS
GPS 提供绝对位置,误差不随时间累积。但它的缺点也很明显:
- 更新频率低:通常 10Hz,动态场景下不够用
- 易受遮挡:高楼、隧道、树荫下信号会变差甚至丢失
- 多路径效应:信号反射导致测距偏差,城市峡谷里尤其严重
我做过一个测试:在市中心高楼区,GPS 定位误差能到 10-20 米。这时候如果不融合 IMU 和激光雷达,自动驾驶根本没法用。
注意:GPS 的误差不是高斯白噪声,而是有相关性的。很多新手直接把它当高斯噪声建模,结果融合效果很差。
毫米波雷达
毫米波雷达用电磁波测距和测速。它的优势是全天候——雨雪雾天照样工作。但分辨率低,点云稀疏,无法识别物体类别。
雷达的误差主要来自:
- 多目标模糊:多个目标在同一距离门内会混淆
- 杂波干扰:地面、护栏等静止物体会产生大量虚警
- 角度分辨率低:普通雷达角度分辨率只有几度,远不如激光雷达
我早期做融合时,总想把雷达点云和激光点云直接匹配,后来发现不行——雷达点太稀疏,特征太少。后来改用目标级融合,效果才好起来。
传感器误差模型与噪声特性
这部分是融合算法的基石。你想想看,如果不知道传感器的误差特性,怎么给它们分配权重?怎么设计滤波器?
误差来源分类
传感器的误差,大致分三类:
| 误差类型 | 来源 | 特性 |
|---|---|---|
| 系统误差 | 制造偏差、安装偏差 | 固定、可标定 |
| 随机误差 | 电子噪声、环境干扰 | 随机、可建模 |
| 粗大误差 | 传感器故障、通信丢包 | 偶发、需剔除 |
系统误差可以通过标定消除。随机误差需要建模,比如用高斯分布、随机游走等。粗大误差最麻烦,得靠异常检测来处理。
常见噪声模型
我常用的噪声模型有这几个:
- 高斯白噪声:均值 0,方差固定。摄像头像素噪声、GPS 测量噪声常用这个模型。
- 随机游走(Random Walk):噪声的积分,IMU 的零偏漂移就是典型的随机游走。
- 1/f 噪声(闪烁噪声):低频段功率谱密度大,某些 MEMS 传感器里有。
- 量化噪声:ADC 量化引起的,分辨率越低越明显。
经验之谈:实际传感器的噪声往往不是单一模型,而是多种噪声的叠加。比如 IMU 的输出 = 真实值 + 零偏 + 白噪声 + 随机游走。建模时得一层层剥开。
IMU 误差模型详解
IMU 的误差模型最复杂,我单独拿出来说。一个典型的 IMU 测量模型长这样:
a_meas = a_true + b_a + n_a + s_a * a_true + m_a * a_true
w_meas = w_true + b_g + n_g + s_g * w_true + m_g * w_true
其中:
b_a、b_g:加速度计和陀螺仪的零偏n_a、n_g:白噪声s_a、s_g:尺度因子误差m_a、m_g:交轴耦合误差
零偏 b 不是常数,它会随时间缓慢漂移。我一般用一阶马尔可夫过程或随机游走模型来描述:
b_dot = -1/tau * b + w_b
其中 tau 是相关时间,w_b 是驱动噪声。这个模型在卡尔曼滤波里很好用。
避坑指南:我曾经在 IMU 标定时只校准了零偏,忽略了尺度因子。结果在高速运动时,积分位置误差比预期大了 3 倍。后来老老实实把尺度因子也标了,误差才降下来。
传感器标定基础
标定,说白了就是找出传感器的系统误差,然后补偿掉。没有标定的传感器数据,直接拿去融合,结果就是垃圾进垃圾出。
标定的层次
我习惯把标定分为三个层次:
- 内参标定:校准传感器自身的参数。比如摄像头的内参(焦距、畸变系数)、IMU 的零偏和尺度因子。
- 外参标定:校准传感器之间的相对位姿。比如激光雷达和摄像头之间的旋转平移矩阵。
- 时间同步标定:校准不同传感器的时间戳偏差。这个经常被忽略,但影响很大。
常用标定方法
这里列几个我常用的方法:
| 传感器 | 标定方法 | 工具/参考 |
|---|---|---|
| 摄像头 | 棋盘格标定法 | OpenCV、Kalibr |
| 激光雷达 | 平面拟合标定 | LiDAR 标定板、ICP |
| IMU | 六位置法、Allan 方差 | imu_utils、Allan 工具包 |
| LiDAR-Camera | 联合标定(点云投影到图像) | Autoware、lidar_camera_calibration |
| Camera-IMU | 视觉惯性标定 | Kalibr、VINS 标定工具 |
注意:标定不是一次性的。温度变化、振动、时间久了,传感器的参数会漂移。我建议每隔一段时间重新标定一次,或者在系统里加在线标定模块。
标定流程示例
以摄像头-激光雷达联合标定为例,流程大致如下:
- 准备标定板(棋盘格或圆形靶标)
- 采集多组数据:不同距离、不同角度
- 提取图像中的角点,提取点云中的标定板平面
- 构建优化问题:最小化重投影误差
- 输出旋转矩阵 R 和平移向量 t
代码实现上,我习惯用 Ceres 或 g2o 做优化。下面是个简化的优化框架:
// 伪代码:LiDAR-Camera 联合标定优化
for each frame:
// 提取图像角点 u_i
// 提取点云平面点 P_i
// 构建残差:重投影误差
residual = u_i - project(R * P_i + t)
// 最小化所有残差的平方和
minimize sum(residual^2) over R, t
嗯,这里要注意:点云和图像的对应关系要手动标,或者用自动匹配算法。我早期用手动标,累得够呛。后来改用 Autoware 的自动标定工具,省了不少时间。
本章知识体系
下面这张图,把本章的核心内容串起来了。你可以看到传感器类型、误差模型、标定方法之间的关系。
这张图把本章的知识结构理清楚了。从上到下,先认识传感器类型,再理解误差模型,最后掌握标定方法。每一步都是下一步的基础。
核心要点:多源融合不是简单地把数据堆在一起。你得知道每个传感器的脾气——它什么时候准,什么时候不准,误差长什么样。标定就是给传感器“体检”,体检完了才能放心用。