第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 驱动里加了一个“在线零偏估计”模块,实时更新零偏值。

好了,这一章的内容就到这里。传感器是融合的基础,摸清它们的“脾气”,后面做算法才能得心应手。下一章,我们聊聊坐标系变换——这可是把不同传感器数据“对齐”的关键一步。