2、传感器基础:惯性测量单元(IMU)原理、加速度计与陀螺仪、磁力计
好,咱们正式开始啃传感器。这一章我打算把 IMU 里那三个核心器件——加速度计、陀螺仪、磁力计——掰开揉碎了讲清楚。你可能会觉得这些原理书上都写过,但实际项目里怎么用、怎么踩坑,才是我想跟你聊的重点。
先看一张总图,帮你建立整体印象。
2.1 加速度计:你感受到的「力」不全是重力
加速度计测量的是 比力,不是单纯的加速度。什么意思?它测的是传感器自身感受到的惯性力与重力的合力。你把它静止放在桌上,它输出的是 1g 向上;你让它自由落体,它输出接近 0。这个特性,决定了它在姿态解算里的角色。
我习惯把加速度计当作「重力参考」。只要载体没有剧烈线加速度,加速度计就能给出比较靠谱的俯仰角和横滚角。但注意——它给不了航向角,因为重力方向跟航向是垂直的,你转个身,重力矢量在水平面投影不变。
加速度计的输出模型可以写成:
a_meas = a_true - g + b_a + n_a
其中 b_a 是零偏,n_a 是噪声。零偏这东西,每个芯片都不一样,甚至同一颗芯片每次上电都不一样。所以标定是必须的。
2.2 陀螺仪:短时王者,长时废物
陀螺仪测的是角速度,单位一般是 °/s 或 rad/s。它最大的优点是短时精度极高——你快速转个 90°,它能在几十毫秒内给你一个非常准的角度增量。但缺点也很致命:积分漂移。
你想想看,陀螺仪输出的是角速度,要得到角度就得积分。积分一次,零偏就变成角度误差,而且这个误差随时间线性增长。我见过一个项目,用了颗消费级陀螺仪,开机 10 分钟,航向漂了 30 多度。这就是为什么你不能单独用陀螺仪做长时间姿态估计。
陀螺仪的误差模型:
ω_meas = ω_true + b_g + n_g + S · ω_true
b_g 是零偏,n_g 是噪声,S 是比例因子误差。零偏是最大的敌人,比例因子误差在高速旋转时才会明显。
2.3 磁力计:给你一个「北」
磁力计测量的是地球磁场矢量。它的核心价值是提供航向参考。有了它,你就能知道自己的机头朝哪个方向,而不是靠陀螺仪积分猜。
但磁力计有个大问题——太容易被干扰。电机电流、扬声器磁铁、甚至你兜里的钥匙,都会让磁场读数歪掉。我做过一个手持设备,磁力计放在 PCB 角落,旁边就是电源走线,结果航向误差能到 20°。后来我把磁力计挪到远离大电流区域的位置,又做了硬铁和软铁校准,才把误差压到 3° 以内。
磁力计的校准,说白了就是找出环境中的固定磁场干扰(硬铁)和感应磁场干扰(软铁)。硬铁校准就是求三个轴的偏置,软铁校准要解一个 3x3 的矩阵。别怕,后面标定章节我会手把手带你做。
- 加速度计:提供俯仰和横滚的长期参考,但怕线加速度干扰。
- 陀螺仪:提供短时高动态姿态跟踪,但怕积分漂移。
- 磁力计:提供航向,但怕磁场干扰。
2.4 传感器对比:一张表看懂
| 特性 | 加速度计 | 陀螺仪 | 磁力计 |
|---|---|---|---|
| 测量物理量 | 比力 (m/s²) | 角速度 (rad/s) | 磁场强度 (μT) |
| 可观测姿态 | 俯仰、横滚 | 三轴角速度 | 航向 |
| 长期稳定性 | 好(重力参考) | 差(积分漂移) | 好(参考) |
| 动态响应 | 差(易受线加速度干扰) | 好(高带宽) | 中等(更新率较低) |
| 主要误差源 | 零偏、振动噪声 | 零偏、温度漂移 | 硬铁/软铁干扰 |
| 典型应用 | 静态姿态、倾角测量 | 动态跟踪、旋转检测 | 航向参考、罗盘 |
2.5 一个简单的姿态解算思路
讲完原理,咱们来点实际的。怎么把这三个传感器的数据融合成一个稳定的姿态?
最经典的方法是互补滤波。思路很简单:
- 用陀螺仪积分得到高频姿态(短时准,长时漂)。
- 用加速度计和磁力计计算低频姿态(长时准,短时抖)。
- 用高通滤波处理陀螺仪姿态,低通滤波处理加速度计/磁力计姿态,然后加起来。
代码实现大概长这样:
// 互补滤波伪代码
float dt = 0.01f; // 100 Hz 更新率
float alpha = 0.98f; // 陀螺仪权重
// 陀螺仪积分
angle_gyro = angle_gyro + gyro_rate * dt;
// 加速度计计算角度
angle_acc = atan2(acc_y, acc_z);
// 互补融合
angle = alpha * angle_gyro + (1 - alpha) * angle_acc;
这个 alpha 值怎么选?我一般从 0.98 开始试,如果动态响应太慢就减小,如果噪声太大就增大。没有标准答案,取决于你的传感器质量和应用场景。
2.6 选型时我关注什么
最后聊点选型经验。市面上 IMU 芯片从几块钱到几千块都有,怎么选?
- 零偏稳定性:消费级(0.1-1 °/s),工业级(0.01-0.1 °/s),战术级(<0.01 °/s)。做无人机用工业级就够了,做导弹才需要战术级。
- 噪声密度:单位是 μg/√Hz 或 °/s/√Hz。噪声越低,融合出来的姿态越平滑。
- 量程:加速度计一般 ±2g 到 ±16g,陀螺仪 ±250 °/s 到 ±2000 °/s。别选太大,量程越大分辨率越低。
- 温度稳定性:这个容易被忽略。有些芯片 25°C 时表现很好,到 60°C 零偏翻倍。我吃过这个亏,后来都选带温度补偿的型号。