4. 传感器基础与数据融合
IMU 是定位系统的「眼睛」和「耳朵」。但说实话,这颗传感器天生就有毛病——它输出的原始数据,直接拿去用的话,你的飞控大概率会飘到天上去。我最早做无人机那会儿,就吃过这个亏。
这一章,我们就把 IMU 数据处理的几个核心环节掰开揉碎。从标定到补偿,从预积分到噪声分析,每一步都关系到定位精度。
4.1 加速度计标定
加速度计标定,说白了就是找到它的「真实值」和「测量值」之间的映射关系。理想情况下,三轴加速度计应该输出 1g 的模长,但实际器件总有偏差。
我习惯用六位置法做标定。把 IMU 分别朝六个方向静止放置,采集数据。每个方向对应一个已知的重力矢量。
| 位置 | 理论加速度 (g) | 实际测量 |
|---|---|---|
| X 轴向上 | (1, 0, 0) | (ax1, ay1, az1) |
| X 轴向下 | (-1, 0, 0) | (ax2, ay2, az2) |
| Y 轴向上 | (0, 1, 0) | (ax3, ay3, az3) |
| Y 轴向下 | (0, -1, 0) | (ax4, ay4, az4) |
| Z 轴向上 | (0, 0, 1) | (ax5, ay5, az5) |
| Z 轴向下 | (0, 0, -1) | (ax6, ay6, az6) |
然后解算比例因子和零偏。模型很简单:
a_measured = scale * a_true + bias + noise
用最小二乘法拟合,就能得到 3 个轴的 scale 和 bias。我在项目中遇到过一个问题——如果 IMU 安装面不平,六位置法的精度会大打折扣。所以标定前,一定要确保 IMU 的安装面水平。
4.2 陀螺仪零偏补偿
陀螺仪的零偏,是定位误差的「头号杀手」。你想想看,一个 0.1°/s 的零偏,积分 10 秒就是 1° 的姿态误差。再积分到位置,误差会指数级增长。
零偏补偿分两步:
- 静态零偏估计: 上电后静止几秒,取陀螺仪输出的均值作为初始零偏。
- 在线零偏估计: 飞行过程中,利用视觉或 GPS 观测,持续修正零偏。
静态估计的代码很简单:
// 采集 N 个样本
for (int i = 0; i < N; i++) {
gyro_sum += read_gyro();
}
gyro_bias = gyro_sum / N;
但要注意——静态零偏会随温度变化。我见过一个案例,无人机在冬天起飞时零偏是 0.05°/s,飞到夏天环境就变成了 0.15°/s。如果不做温度补偿,姿态会慢慢漂移。
4.3 温度补偿
温度对 IMU 的影响,比你想象的大得多。加速度计的零偏随温度变化,陀螺仪的零偏也随温度变化。我做过一个实验:把 IMU 从 -10°C 加热到 60°C,陀螺仪零偏漂移了 0.3°/s。
温度补偿的常用方法是多项式拟合:
bias(T) = c0 + c1 * T + c2 * T²
其中 T 是 IMU 内部温度传感器的读数。c0、c1、c2 是拟合系数,需要在温箱中标定得到。
在 PX4 中,温度补偿是自动完成的。它会读取 IMU 的温度传感器,然后查表或计算补偿值。但如果你自己写飞控,这块一定要加上。
4.4 IMU 预积分
IMU 预积分,是 VIO(视觉惯性里程计)和 LIO(激光惯性里程计)的核心技术。它的作用,是把两帧图像之间的 IMU 数据「压缩」成一个增量约束。
为什么需要预积分?因为 IMU 的频率(100-1000 Hz)远高于视觉(10-30 Hz)。如果每次优化都重新积分所有 IMU 数据,计算量会爆炸。
预积分的核心公式:
ΔR_ij = ∏ exp((ω_k - b_g) * Δt)
Δv_ij = ∑ ΔR_ik * (a_k - b_a) * Δt
Δp_ij = ∑ (Δv_ik * Δt + 0.5 * ΔR_ik * (a_k - b_a) * Δt²)
其中:
- ΔR_ij:旋转增量
- Δv_ij:速度增量
- Δp_ij:位置增量
- b_g、b_a:陀螺仪和加速度计的零偏
预积分的好处是:当零偏更新时,不需要重新积分所有数据,只需要用一阶近似修正即可。这大大提高了优化效率。
4.5 Allan 方差分析
Allan 方差,是分析 IMU 噪声特性的「金标准」。它能告诉我们:
- 量化噪声(Quantization Noise)
- 角度随机游走(Angle Random Walk)
- 速率随机游走(Rate Random Walk)
- 零偏不稳定性(Bias Instability)
- 速率斜坡(Rate Ramp)
分析方法很简单:采集长时间(几小时)的静态 IMU 数据,然后计算不同时间尺度下的方差。画成 log-log 图,就能看到不同噪声成分的「斜率特征」。
| 噪声类型 | Allan 方差斜率 | 物理含义 |
|---|---|---|
| 量化噪声 | -1 | ADC 量化误差 |
| 角度随机游走 | -1/2 | 白噪声积分 |
| 零偏不稳定性 | 0 | 零偏的长期波动 |
| 速率随机游走 | +1/2 | 零偏的随机漂移 |
| 速率斜坡 | +1 | 温度等确定性漂移 |
我曾经用 Allan 方差分析过一款国产 IMU。结果发现它的零偏不稳定性比 datasheet 标称值大了 3 倍。后来跟厂家沟通,才知道是批次问题。从那以后,我每批 IMU 到货都会先做一次 Allan 方差分析。
分析结果可以直接用于滤波器设计。比如,角度随机游走系数决定了 EKF 中陀螺仪噪声协方差矩阵的取值。零偏不稳定性则决定了零偏随机游走模型的方差。
嗯,IMU 数据处理这块,内容确实不少。但每一步都绕不开。标定做不好,后面所有算法都是白搭。预积分搞不懂,VIO 和 LIO 就无从谈起。Allan 方差不会用,滤波器参数全靠猜。
我个人建议,把这五个环节串起来理解。标定和补偿是基础,预积分是桥梁,Allan 方差是检验工具。缺一不可。