4. 传感器基础与数据融合

IMU 是定位系统的「眼睛」和「耳朵」。但说实话,这颗传感器天生就有毛病——它输出的原始数据,直接拿去用的话,你的飞控大概率会飘到天上去。我最早做无人机那会儿,就吃过这个亏。

这一章,我们就把 IMU 数据处理的几个核心环节掰开揉碎。从标定到补偿,从预积分到噪声分析,每一步都关系到定位精度。

核心观点: 未经处理的 IMU 数据 ≈ 噪声。只有经过标定、补偿和预积分,它才能成为可靠的定位输入。
IMU 数据处理核心流程 原始 IMU 数据 标定与补偿 加速度计标定 | 陀螺仪零偏补偿 | 温度补偿 IMU 预积分 ΔR, Δv, Δp 增量计算 Allan 方差分析 量化噪声特性,指导滤波器设计 关键输出 • 零偏 (bias) • 比例因子 (scale) • 温度系数 • 预积分增量 • 随机游走系数 • 量化噪声 • 速率随机游走

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 的安装面水平。

小技巧: 标定完成后,检查一下模长误差。静止时,加速度计模长应该接近 9.8 m/s²。如果偏差超过 0.1 m/s²,建议重新标定。

4.2 陀螺仪零偏补偿

陀螺仪的零偏,是定位误差的「头号杀手」。你想想看,一个 0.1°/s 的零偏,积分 10 秒就是 1° 的姿态误差。再积分到位置,误差会指数级增长。

零偏补偿分两步:

  1. 静态零偏估计: 上电后静止几秒,取陀螺仪输出的均值作为初始零偏。
  2. 在线零偏估计: 飞行过程中,利用视觉或 GPS 观测,持续修正零偏。

静态估计的代码很简单:

// 采集 N 个样本
for (int i = 0; i < N; i++) {
    gyro_sum += read_gyro();
}
gyro_bias = gyro_sum / N;

但要注意——静态零偏会随温度变化。我见过一个案例,无人机在冬天起飞时零偏是 0.05°/s,飞到夏天环境就变成了 0.15°/s。如果不做温度补偿,姿态会慢慢漂移。

警告: 不要只做一次静态零偏就完事。飞行过程中,零偏会缓慢变化。建议在 EKF 中把零偏作为状态量,持续估计。

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:陀螺仪和加速度计的零偏

预积分的好处是:当零偏更新时,不需要重新积分所有数据,只需要用一阶近似修正即可。这大大提高了优化效率。

关键点: 预积分把 IMU 数据从「时间序列」变成了「约束因子」。这是图优化框架能够高效运行的基础。

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 方差分析。

注意: Allan 方差分析需要足够长的静态数据。至少采集 2-3 小时,才能看到完整的噪声特性。采集时间太短,分析结果不可靠。

分析结果可以直接用于滤波器设计。比如,角度随机游走系数决定了 EKF 中陀螺仪噪声协方差矩阵的取值。零偏不稳定性则决定了零偏随机游走模型的方差。

嗯,IMU 数据处理这块,内容确实不少。但每一步都绕不开。标定做不好,后面所有算法都是白搭。预积分搞不懂,VIO 和 LIO 就无从谈起。Allan 方差不会用,滤波器参数全靠猜。

我个人建议,把这五个环节串起来理解。标定和补偿是基础,预积分是桥梁,Allan 方差是检验工具。缺一不可。