第2章:传感器基础与特性
各位同学,今天我们来聊聊传感器的“脾气”。
做传感器融合,说白了就是跟一堆“有缺陷”的数据打交道。你想想看,如果每个传感器都完美无缺,那还要我们这些工程师干嘛?直接取平均值不就完了。但现实是,每个传感器都有自己的“小性子”。
这一章,我就带大家摸清这些传感器的底细。了解它们的强项和弱点,是做好融合的第一步。
2.1 常见传感器类型概览
在自动驾驶和机器人领域,我们常用的传感器就那么几种。我按自己的习惯,把它们分成“内部感知”和“外部感知”两类。
2.1.1 IMU(惯性测量单元)
IMU 是“闷头干活”的典型。它不依赖外部信号,全靠内部的加速度计和陀螺仪来推算自身运动。
- 加速度计:测量三轴加速度。注意,它测的是“比力”,包含重力分量。所以静止时,你也能读出 1g 的数值。
- 陀螺仪:测量三轴角速度。也就是你转得多快。
我在项目中遇到过一个问题:IMU 的零偏会随时间漂移。刚上电时数据还挺准,跑个几分钟就开始“跑偏”了。嗯,这里要注意,IMU 的误差是随时间累积的,不能单独用来做长时间定位。
2.1.2 GPS(全球定位系统)
GPS 是“外援型”选手。它靠天上的卫星给你报位置。优点是没有累积误差,缺点嘛……信号容易被遮挡。
- 精度:普通民用 GPS 精度在 2-5 米左右。RTK(实时动态差分)可以做到厘米级。
- 更新率:一般是 10Hz,也就是每秒报 10 次位置。
我建议,在城市峡谷或隧道里,千万别指望 GPS。它一旦丢星,位置会瞬间跳变几十米。我曾经在立交桥下吃过这个亏,从那以后,我设计融合算法时都会给 GPS 加一个“置信度”权重。
2.1.3 摄像头
摄像头是“最像人眼”的传感器。它提供的信息最丰富——车道线、行人、交通标志,全都能看到。
- 优点:分辨率高,能识别语义信息(比如“这是红灯”)。
- 缺点:受光照影响大。晚上、逆光、雨雾天,性能会断崖式下降。
说白了,摄像头是个“娇气”的传感器。你想想看,大雾天连人都看不清,摄像头又能好到哪去?所以做融合时,我习惯把摄像头的数据当作“高价值但不可靠”的信息来处理。
2.1.4 激光雷达(LiDAR)
激光雷达是“硬核理工男”。它直接给你一个三维点云,告诉你“前方 10 米处有个障碍物”。
- 优点:精度高(厘米级),不受光照影响。晚上和白天一样好使。
- 缺点:怕雨雪雾。激光会被水滴反射,导致点云变稀疏。
我记得有一次在雨夜测试,激光雷达的点云几乎“糊”了。嗯,这里要注意,激光雷达在恶劣天气下,性能会大打折扣。不能因为它精度高就盲目信任。
2.1.5 毫米波雷达
毫米波雷达是“老江湖”。它用无线电波测距和测速,穿透力极强。
- 优点:不怕雨雪雾,能直接测速度(多普勒效应)。
- 缺点:角度分辨率低,无法区分“行人”和“自行车”。
我个人的经验是:毫米波雷达是“全天候”的保障。当摄像头和激光雷达都“罢工”时,它还能给你提供基本的目标信息。但它的数据很“粗糙”,需要配合其他传感器一起用。
2.2 传感器误差来源与特性分析
了解了传感器类型,我们再来看看它们为什么会出错。我把误差来源归纳为三类:
2.2.1 确定性误差
这类误差是“有规律”的,可以通过校准来消除。
| 误差类型 | 说明 | 常见于 |
|---|---|---|
| 零偏(Bias) | 传感器静止时,输出不为零 | IMU 陀螺仪、加速度计 |
| 尺度因子(Scale Factor) | 输出值与真实值成比例偏差 | 加速度计、磁力计 |
| 轴间非正交 | 三个测量轴不严格垂直 | IMU、磁力计 |
举个例子,IMU 的零偏校准。我习惯在传感器静止时采集一段数据,然后取平均值作为零偏值。代码很简单:
// 采集 1000 个静止样本
float bias_sum = 0;
for (int i = 0; i < 1000; i++) {
bias_sum += read_gyro();
}
float gyro_bias = bias_sum / 1000.0;
// 后续使用时减去零偏
float corrected_gyro = raw_gyro - gyro_bias;
注意,这个零偏会随温度变化。所以更严谨的做法是做一个“温度-零偏”查找表。
2.2.2 随机误差
这类误差是“无规律”的,只能用统计方法处理。
- 白噪声:高频随机波动。比如 IMU 的角速度随机游走。
- 闪烁噪声:低频漂移。比如 GPS 的位置缓慢漂移。
为什么会这样?因为传感器内部的电子元件,本身就有热噪声。你想想看,电子在导体里乱撞,输出信号能不抖吗?
处理随机误差,我常用的方法是“滤波”。比如用卡尔曼滤波器来估计真实值。这里不展开,后面章节会详细讲。
2.2.3 环境相关误差
这类误差跟“外部环境”有关,是传感器融合中最头疼的。
| 环境因素 | 影响 | 典型场景 |
|---|---|---|
| 多路径效应 | GPS 信号被建筑物反射,导致位置跳变 | 城市峡谷、高架桥下 |
| 雨雪雾 | 激光雷达点云变稀疏,摄像头图像模糊 | 恶劣天气 |
| 光照变化 | 摄像头过曝或欠曝,特征点丢失 | 隧道出入口、逆光 |
| 电磁干扰 | 毫米波雷达出现虚假目标 | 高压线附近、大型电机旁 |
我曾经在一条两边都是高楼的道路上测试 GPS。结果位置数据像“喝醉了酒”一样,左右乱晃。后来一查,是多路径效应导致的。从那以后,我设计融合算法时,都会加入“一致性检查”——如果 GPS 位置突然跳变,就暂时不用它。
2.3 误差特性分析:一个简单的例子
我们拿 IMU 的加速度计来练练手。假设你采集了 1 秒钟的静止数据(100 个样本),想分析它的误差特性。
// 假设 raw_data 是采集到的 100 个加速度值
float mean = 0;
for (int i = 0; i < 100; i++) {
mean += raw_data[i];
}
mean /= 100.0; // 均值,代表零偏
float variance = 0;
for (int i = 0; i < 100; i++) {
variance += (raw_data[i] - mean) * (raw_data[i] - mean);
}
variance /= 100.0; // 方差,代表噪声大小
float std_dev = sqrt(variance); // 标准差
这个标准差,就是你后续滤波时要用到的“测量噪声协方差矩阵”的参考值。说白了,它告诉你这个传感器“抖”得有多厉害。
核心要点:
- IMU 误差随时间累积,适合短时间高精度推算。
- GPS 误差不累积,但受环境遮挡影响大。
- 摄像头信息丰富,但怕光照变化。
- 激光雷达精度高,但怕雨雪雾。
- 毫米波雷达全天候,但角度分辨率低。
个人小技巧:
我习惯在传感器融合前,先做一个“传感器健康度评估”。比如,检查 GPS 的卫星颗数、激光雷达的点云密度、摄像头的平均亮度。如果某个传感器的“健康度”低于阈值,就降低它的权重。这招在工程实践中非常管用。
避坑指南:
我曾经犯过一个错误:把 IMU 的零偏校准做在程序初始化时,但忽略了温度变化。结果车子在太阳下晒了半小时后,IMU 数据开始漂移。从那以后,我都在 IMU 驱动里加了一个“在线零偏估计”模块,实时更新零偏值。
好了,这一章的内容就到这里。传感器是融合的基础,摸清它们的“脾气”,后面做算法才能得心应手。下一章,我们聊聊坐标系变换——这可是把不同传感器数据“对齐”的关键一步。