2. 惯性测量单元(IMU)深度解析:加速度计与陀螺仪的工作原理及误差模型
各位同学,欢迎来到多传感器融合课程的第二讲。今天咱们来啃一块硬骨头——IMU。说实话,IMU这东西,看着简单,用起来全是坑。我最早接触飞控时,觉得不就是读个加速度和角速度嘛,能有多难?结果第一个四轴飞起来就原地打转,查了三天才发现是陀螺仪零偏没处理好。嗯,从那以后,我再也不敢小看这个小小的MEMS芯片了。
核心观点:IMU是所有飞控的感知基础。没有它,你的无人机就是个瞎子。但IMU的数据天生带噪声、带漂移,不搞清楚它的脾气,融合算法做得再花哨也是白搭。
2.1 加速度计:你到底在测什么?
很多人以为加速度计测的是「运动加速度」,比如飞机往前飞时的那个加速度。其实这是个误解。加速度计测的是「比力」(Specific Force),说白了就是物体受到的合力减去重力后的结果。
咱们看公式:
a_measured = a_true - g
其中g是重力加速度向量。所以当IMU静止放在桌面上时,加速度计读到的不是0,而是1个g(约9.8 m/s²),方向竖直向上。为什么?因为桌面给了它一个向上的支撑力,抵消了重力。
我在项目中遇到过一件事:有个同事死活想不通,为什么飞机平飞时加速度计Z轴读数不是0。我让他把公式写出来,他这才恍然大悟——原来加速度计永远「感觉」不到重力本身。
2.1.1 MEMS加速度计的工作原理
现在的飞控用的基本都是MEMS加速度计。它的核心结构,你可以想象成一个微小的弹簧-质量块系统:
- 质量块:一个微米级的硅结构,悬空挂着
- 梳齿电容:质量块移动时,电容值会变化
- 检测电路:把电容变化转换成电压信号
当有加速度时,质量块会偏移,电容变化,电路输出对应的电压。就这么简单。但简单背后有门道——温度一变,弹簧刚度就变,读数就飘。我习惯在每次上电后做一次静态校准,就是为了消除这个初始偏差。
2.1.2 加速度计的误差模型
实际工程中,我们不会直接用原始读数。你得先建模,再补偿。常用的误差模型长这样:
a_true = S * (a_raw - b_a - n_a)
其中:
- S:尺度因子矩阵(包含交叉耦合)
- b_a:零偏(bias),单位m/s²
- n_a:随机噪声,通常建模为高斯白噪声
你想想看,如果零偏是0.1 m/s²,积分10秒就产生1 m/s的速度误差,再积分就是几十米的位置漂移。所以为什么说IMU不能单独用太久?原因就在这里。
| 误差项 | 典型值(消费级) | 典型值(工业级) |
|---|---|---|
| 零偏稳定性 | ±10 mg | ±0.1 mg |
| 随机游走 | 0.1 m/s/√h | 0.01 m/s/√h |
| 尺度因子误差 | 1% | 0.1% |
个人经验:选型时别只看零偏,随机游走才是长期精度的关键。我曾经为了省成本用了某款低端IMU,结果卡尔曼滤波的协方差矩阵半天就发散,最后乖乖换回了工业级。
2.2 陀螺仪:角速度的测量艺术
陀螺仪测的是角速度,单位是rad/s或°/s。MEMS陀螺仪的原理跟加速度计完全不同,它用的是科里奥利效应。
简单说:让一个质量块高速振动,当它绕某个轴旋转时,科里奥利力会让质量块在垂直方向产生位移。测这个位移,就能算出角速度。
嗯,这里要注意:MEMS陀螺仪天生对振动敏感。你想想看,无人机电机一转,整个机身都在抖,陀螺仪的输出里全是振动噪声。所以为什么飞控代码里一定要有低通滤波?就是为了干掉这些高频干扰。
2.2.1 陀螺仪的误差模型
陀螺仪的误差模型跟加速度计类似,但多了一个关键项——g灵敏度:
ω_true = S_g * (ω_raw - b_g - G * a - n_g)
这个G矩阵就是g灵敏度。什么意思?就是陀螺仪对加速度也有响应。当飞机做大机动时,加速度很大,陀螺仪的输出里会混入虚假的角速度。我调试一个六旋翼时遇到过,悬停没问题,一推油门飞机就往右偏,查了半天才发现是g灵敏度没补偿。
避坑指南:我曾经在某个项目中忽略了g灵敏度补偿,结果飞机在做急转弯时姿态估计直接发散。后来花了整整一周才定位到这个问题。所以,如果你用的IMU数据手册里没有g灵敏度参数,建议换一颗。
2.3 加速度计 vs 陀螺仪:互补还是对抗?
这两个传感器,一个测比力,一个测角速度。单独看都有硬伤:
- 加速度计:低频准,高频噪声大。你快速晃动它,输出全是乱的
- 陀螺仪:高频准,低频会漂。你让它静止10分钟,角度能漂出几十度
所以,飞控里经典的姿态解算方法——互补滤波,就是把两者的优势结合起来。加速度计提供长期稳定的参考(重力方向),陀螺仪提供短期精确的角速度积分。说白了,就是让加速度计管低频,陀螺仪管高频。
我个人习惯在互补滤波里加一个自适应权重:当检测到机体有较大线加速度时(比如急转弯),降低加速度计的权重,因为这时候它测的不再是纯重力了。
2.4 本章知识体系
下面这张图是我自己画的IMU知识框架,帮你理清思路:
2.5 实战中的校准方法
理论说完了,咱们聊聊实际怎么做。我一般把IMU校准分成三步:
- 零偏校准:静止采集1000个样本,取均值作为零偏。注意要等IMU温度稳定后再采,我习惯上电后等30秒
- 尺度因子校准:把IMU分别朝六个方向(±X, ±Y, ±Z)静止放置,利用重力作为参考,解算出尺度因子矩阵
- 交叉耦合校准:这个比较复杂,需要转台。如果没有转台,可以先用默认值,后续在飞行中在线估计
小技巧:零偏校准不要只做一次。温度变化10度,零偏可能漂移好几个mg。我习惯在飞控代码里加一个温度补偿表,每5度一个插值点,效果立竿见影。
好了,这一讲的内容就到这里。IMU是飞控的「眼睛」,但它的眼睛天生有点散光。你得先给它配副眼镜(校准),再学会怎么看东西(滤波融合)。下一讲我们会深入讨论如何用卡尔曼滤波把这些数据真正用起来。
公众号:蓝海资料掘金营,微信deep3321