第3章 传感器基础(IMU):加速度计、陀螺仪、磁力计与误差模型

做导航调参,绕不开IMU。说白了,IMU就是机器人的“内耳”——它告诉飞控或自驾仪:我现在是歪的还是正的?我在加速还是减速?我朝哪个方向在走?

我刚开始接触多旋翼时,总觉得IMU数据很“玄学”。明明飞机放在桌上不动,加速度计读数却在跳;明明没转它,陀螺仪却输出非零值。后来踩了不少坑才明白:不是传感器坏了,是我不懂它的脾气。

这一章,咱们就把IMU的三个核心传感器——加速度计、陀螺仪、磁力计——的原理、数据特性和误差模型讲透。你理解透了,后面调参才能有的放矢。

3.1 加速度计:感知“重力方向”

加速度计测量的是物体受到的比力(specific force),单位是 m/s² 或 g(1g ≈ 9.81 m/s²)。它内部有一个质量块,当物体加速或倾斜时,质量块会挤压或拉伸压电晶体或电容极板,产生电信号。

关键认知:加速度计在静止时,测到的是重力加速度矢量。也就是说,它告诉你“哪边是下”。

核心公式(简化):

a_measured = a_true + g + bias + noise

其中 g 是重力加速度矢量(约 9.81 m/s²,方向竖直向下)。

我在项目中遇到过一个问题:飞机悬停时高度漂移。排查到最后,发现是加速度计Z轴偏置没校准,导致积分出的垂直速度一直在累积。嗯,这里要注意:加速度计的偏置误差会通过二次积分变成位置误差,而且随时间发散。

调参小技巧:在静止状态下采集30秒加速度计数据,取均值作为偏置。我习惯在每次上电后做一次静态校准,尤其是温度变化大的环境。

3.2 陀螺仪:测量“角速度”

陀螺仪测量的是物体绕各轴的旋转角速度,单位是 °/s 或 rad/s。MEMS陀螺仪利用科里奥利效应——一个振动的质量块在旋转时会产生垂直于振动方向的位移,通过检测这个位移来推算角速度。

陀螺仪的数据特性与加速度计完全不同:

  • 动态响应快:能捕捉到瞬间的旋转,适合做姿态控制的内环。
  • 有零偏(bias):静止时输出不为零,需要校准。
  • 温度敏感:零偏随温度漂移,这是很多“冷启动漂移”问题的根源。

你想想看,如果陀螺仪零偏是 0.1°/s,积分1分钟就是 6° 的姿态误差。对于需要精确悬停的无人机来说,这已经不可接受了。

避坑指南:我曾经在冬季室外试飞,飞机起飞后姿态快速漂移,差点炸机。后来发现是陀螺仪温度补偿没开,零偏从室温到零下10度漂了 0.5°/s。所以,如果你的飞控支持温度校准,一定要开启。

3.3 磁力计:寻找“北”

磁力计测量的是地球磁场矢量,单位是 μT(微特斯拉)。它本质上是一个三轴磁阻传感器,通过检测磁场方向来推算航向(yaw)。

但磁力计有个大问题:它太容易被干扰了。

  • 硬铁干扰:永磁体、电机、扬声器等产生的固定偏移磁场。
  • 软铁干扰:铁磁性材料(如钢架、电池)对地磁场的扭曲。
  • 动态干扰:大电流变化(如电机急加速)产生的瞬态磁场。

我见过不少新手,磁力计没校准就直接飞,结果飞机在空中“画圈”——航向一直在漂。说白了,磁力计的数据如果不做椭球拟合校准,基本没法用。

校准方法:将飞机在空中做“∞”字旋转,采集各方向数据,然后拟合椭球参数。大部分开源飞控(如PX4、ArduPilot)都内置了这个流程。

3.4 IMU数据特性与误差模型

把三个传感器放在一起看,它们的误差特性可以归纳为以下几类:

误差类型 加速度计 陀螺仪 磁力计
零偏(Bias) 静态时输出偏移,可校准 静止时非零输出,温度敏感 硬铁干扰,需椭球拟合
比例因子(Scale Factor) 输出与实际值的比例偏差 同样存在,但通常较小 软铁干扰导致各轴灵敏度不同
噪声(Noise) 白噪声 + 低频漂移 白噪声为主,高频段明显 受电磁环境干扰大
交轴耦合 各轴间存在微小串扰 同样存在 安装误差导致

这些误差在导航解算中会如何传播?我画了一张图,帮你理清逻辑:

IMU误差传播与导航解算流程 加速度计 陀螺仪 磁力计 零偏 + 噪声 + 比例因子 零偏(温度敏感)+ 噪声 硬铁/软铁干扰 + 噪声 预处理:零偏校准 + 温度补偿 + 椭球拟合 + 低通滤波 姿态解算(互补滤波 / EKF / Mahony) 位置解算(加速度积分 + GPS/视觉融合) 误差传播路径:陀螺仪零偏 → 姿态误差 → 加速度投影错误 → 位置发散

从这张图你能看到:陀螺仪的零偏会直接导致姿态误差,而姿态误差又会让加速度计的重力分量投影错误,最终导致位置解算发散。这就是为什么IMU校准是导航调参的第一步,也是最重要的一步。

3.5 误差建模与补偿策略

在实际工程中,我们通常用以下模型来描述IMU的误差:

a_meas = S_a * (a_true + g) + b_a + n_a
ω_meas = S_g * ω_true + b_g + n_g
m_meas = S_m * (R * m_earth) + b_m + n_m

其中:

  • S 是比例因子矩阵(含交轴耦合)
  • b 是零偏向量
  • n 是噪声
  • R 是旋转矩阵(将地磁场从导航系转到机体系)

补偿策略我总结为三步:

  1. 出厂校准:在工厂用转台和六面体标定比例因子和交轴耦合,写入芯片。
  2. 上电校准:静止状态下采集数据,估计零偏。我习惯采集30秒数据取平均。
  3. 在线估计:在滤波器(如EKF)中把零偏作为状态变量实时估计,这是最鲁棒的做法。

重要提醒:不要以为做了出厂校准就万事大吉。温度变化、老化、冲击都会改变零偏。我见过一个案例:飞机摔过一次后,陀螺仪零偏漂了 0.3°/s,但用户没重新校准,结果第二次飞行直接翻机。

3.6 本章小结

IMU是导航系统的“感官”,但它并不完美。加速度计告诉你重力方向但怕振动,陀螺仪告诉你旋转速度但会漂移,磁力计告诉你北方但怕干扰。理解它们的误差特性,是调参的前提。

我个人习惯在每次调参前,先检查IMU的原始数据:静止时加速度计读数是否接近 (0, 0, 9.81)?陀螺仪零偏是否在 0.1°/s 以内?磁力计数据是否在椭球表面?这些检查能帮你省下大量排查时间。