3、惯性测量单元(IMU):加速度计、陀螺仪、磁力计的工作原理与特性,IMU误差模型

各位工程师朋友,今天我们来聊聊IMU。这东西在运动控制里太常见了,无人机、机器人、汽车导航,哪哪都有它。说白了,IMU就是三个传感器的组合:加速度计、陀螺仪、磁力计。它们各司其职,又互相配合。

我个人习惯把IMU比作人体的感官系统。加速度计像你的前庭系统,感知身体倾斜;陀螺仪像你的半规管,感知旋转;磁力计像你的方向感,告诉你哪边是北。三个一起工作,才能让机器知道自己「在哪、怎么动、朝哪走」。

核心要点:IMU不是单个传感器,而是一个传感器融合系统。每个传感器都有短板,但组合起来就能互补。

3.1 加速度计:感知重力与线加速度

加速度计测量的是比力(specific force),也就是物体受到的惯性力与重力的合力。你想想看,当它静止时,测到的就是重力加速度g。当它运动时,测到的就是运动加速度加上重力。

我在项目中遇到过一个问题:无人机悬停时,加速度计读数明明是[0, 0, -1]g,但飞机却在缓慢漂移。后来发现是加速度计安装有微小倾斜,导致重力分量泄漏到了水平轴。嗯,这里要注意,加速度计对安装角度极其敏感。

工作原理:常见的是MEMS电容式加速度计。内部有一个微小的质量块,通过弹簧悬挂在固定电极之间。当有加速度时,质量块位移,改变电容值。通过测量电容变化,就能反推出加速度。

参数 典型值 说明
量程 ±2g ~ ±16g 选型时留30%余量
噪声密度 100~300 μg/√Hz 越低越好,但成本高
零偏稳定性 ±10~±50 mg 温度变化会漂移

实战技巧:加速度计在静止时可以用来计算俯仰角和横滚角。公式很简单:θ = atan2(ax, sqrt(ay² + az²))。但注意,它无法测量偏航角,因为重力方向不提供水平信息。

3.2 陀螺仪:感知角速度

陀螺仪测量的是角速度,单位是°/s。它不直接给出角度,而是给出旋转的快慢。要得到角度,需要积分。但积分会累积误差,这就是为什么陀螺仪长时间工作会漂移。

我曾经调试一个四足机器人的平衡控制,发现陀螺仪积分出来的角度在10秒内就偏了5度。机器人直接摔了。后来我加了加速度计辅助修正,才稳住。说白了,陀螺仪适合短时间高动态,不适合长时间纯积分。

工作原理:MEMS陀螺仪基于科里奥利效应。一个质量块在驱动方向高速振动,当有角速度输入时,会产生科里奥利力,使质量块在检测方向位移。通过电容检测这个位移,就能得到角速度。

注意:陀螺仪对振动非常敏感。电机振动、机架共振都会引入噪声。我建议在安装时加橡胶减震垫,并在软件里做低通滤波。截止频率一般设在20~50Hz。

陀螺仪的关键指标是零偏稳定性(bias stability)和角度随机游走(angle random walk, ARW)。零偏稳定性决定了长时间积分后的角度误差,ARW决定了短时间内的噪声水平。

// 陀螺仪积分示例(简化版)
float angle = 0;
float gyro_rate = readGyro();  // 单位:°/s
float dt = 0.01;               // 采样周期:10ms

angle += gyro_rate * dt;       // 简单积分

// 实际项目中要加:
// 1. 零偏补偿
// 2. 温度补偿
// 3. 限幅防积分饱和

3.3 磁力计:感知方向

磁力计测量的是地球磁场。它告诉你哪个方向是北。但问题是,地球磁场很弱(约0.5高斯),很容易被电机、电源线、铁磁性材料干扰。

我记得有一次做AGV小车导航,磁力计读数在电机启动时直接跳了30度。查了半天,发现是电机电缆没有屏蔽,磁场干扰直接耦合到了磁力计。后来把磁力计移到远离电机的位置,并加了软磁屏蔽罩,问题才解决。

工作原理:常见的是各向异性磁阻(AMR)效应。某些铁磁材料的电阻会随外部磁场方向变化。通过测量电阻变化,就能得到磁场方向。

磁力计需要做硬铁校准和软铁校准。硬铁校准是消除传感器本身的零偏,软铁校准是消除周围铁磁材料造成的磁场扭曲。我建议每次上电都做一次快速校准。

校准方法:让设备在水平面旋转360度,记录X、Y轴的最大最小值。然后计算偏移量:offset_x = (max_x + min_x) / 2。同理Y轴。这样就能得到校准后的值。

3.4 IMU误差模型

IMU的误差模型,说白了就是描述「传感器实际输出」与「理想输出」之间的差异。我把它分为三类:确定性误差、随机误差、温度相关误差。

确定性误差:

  • 零偏(Bias):传感器静止时输出不为零。比如陀螺仪静止时输出0.1°/s,这就是零偏。
  • 比例因子(Scale Factor):输入与输出之间的比例关系不准确。比如输入1g,输出0.98g。
  • 轴间对准误差(Misalignment):三个轴不是完美的90度正交。这会导致一个轴的加速度泄漏到另一个轴。

随机误差:

  • 白噪声(White Noise):高频随机波动,可以通过低通滤波抑制。
  • 随机游走(Random Walk):低频漂移,积分后误差会随时间增长。
  • 闪烁噪声(Flicker Noise):1/f噪声,低频段明显。

温度相关误差:温度变化会导致零偏和比例因子漂移。我建议做温度补偿,至少记录不同温度下的零偏值,做线性插值补偿。

我的经验:在项目初期,先花一天时间做IMU的静态和动态标定。静态标定:记录静止时的零偏。动态标定:用转台给已知角速度,拟合比例因子。这一步做好了,后面融合算法会省很多事。

下面这张图展示了IMU误差模型的整体框架,以及各误差源对最终姿态估计的影响路径:

IMU误差模型与影响路径 加速度计 零偏、比例因子、噪声 陀螺仪 零偏、随机游走、温度漂移 磁力计 硬铁、软铁、干扰 IMU误差模型核心 确定性误差(零偏、比例因子、对准) 随机误差(白噪声、随机游走、闪烁噪声) 温度相关误差(零偏温漂、比例因子温漂) 传感器融合算法(互补滤波 / 卡尔曼滤波) 最终输出:姿态、位置、速度

从图中可以看出,三个传感器的误差会经过误差模型「放大」或「耦合」,最终影响融合算法的输出。所以,做好误差建模和补偿,是IMU应用的关键一步。

重要提醒:不要指望IMU本身有多准。误差模型只是第一步,真正的精度提升要靠传感器融合。我见过太多人花大价钱买高精度IMU,结果算法一塌糊涂,还不如用便宜的IMU配好算法。

最后说一句,IMU的误差模型不是一成不变的。它会随温度、时间、振动而变化。我建议在系统运行过程中做在线校准,比如在静止时更新零偏估计,在直线运动时更新比例因子。这样系统才能长期稳定工作。


公众号:蓝海资料掘金营,微信deep3321