想象一位名叫阿衡的跑酷运动员,他从小训练蒙眼奔跑,能在屋顶、墙缝和窄桥上自如穿梭。他之所以敢闭眼,靠的不是眼睛,而是内耳里的两套精密“传感器”:半规管负责感知旋转,耳石负责感知直线加速度和重力方向。这套内耳前庭系统,就是他身体的 IMU——惯性测量单元。机器人要像阿衡一样在未知环境中稳住身姿、估计自己“正着还是倒着”,靠的也是安装在体内的 IMU。本文用这个“闭眼跑酷者”的比喻,带你理解 IMU 的基本原理、误差来源、姿态解算、滤波融合、工程实践与选型趋势,让你从零建立起对惯性测量和机器人位姿估计的直觉。

岗位关联

掌握 IMU 原理与滤波融合,是从事机器人 SLAM、自动驾驶、无人机控制、VR/AR 追踪等方向 AI 工程师的基本功;它能帮你构建稳定、可维护、可落地的定位与感知系统。

目录
  1. 可视化演示
  2. 基础感知原理
  3. 误差与标定
  4. 姿态表示与解算
  5. 滤波数据融合
  6. 工程实践要点
  7. 器件选型与趋势
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

IMU\u4e09\u8f74\u4f20\u611f\u5668: \u52a0\u901f\u5ea6\u8ba1+\u7535\u9664\u4eea+\u78c1\u529b\u8ba1 \u878d\u5408\u7b97\u6cd5 (Fusion Algorithm)\u4f20\u611f\u5668\u4e92\u8865\u7279\u6027\u7406\u60f3\u878d\u5408\u7b97\u6cd5 (Fusion Algorithm)\u4f2... \u...

基础感知原理

阿衡之所以能在黑暗中判断自己是在上升电梯里还是被推了一把,靠的是耳石。耳石感受的是“比力”——一种把真实运动加速度和重力混在一起的物理量。机器人里的加速度计就是一颗电子耳石;而半规管则像速度陀螺,负责告诉你脑袋正在以每秒多少度转动。两者合在一起,就是 IMU 的三大件中的两件:加速度计和陀螺仪,有的 IMU 还会集成磁力计,相当于给闭眼跑酷者加上一根“地磁罗盘针”。

IMU 输出的是机体坐标系下的测量值。想象阿衡的身体是一个三维坐标系:上下是 Z 轴,前后是 X 轴,左右是 Y 轴。陀螺仪测的是绕这三个轴的旋转角速度,加速度计测的是这三个轴方向上的比力。要得到世界坐标系下的位置和姿态,必须先把这些测量值经过坐标变换积分。这个“先测后转再积”的流程,就是惯性导航的基本盘。

实际测量中,加速度计读数并不干净。为了理解后续误差处理,我们先把理想的测量模型写出来。加速度计的输出可近似为:

阿衡的耳石也会被电梯加速欺骗,机器人同样分不清“加速向上”和“静止但倾斜”。理解这个模型,是后续所有标定和滤波的前提。

a~=a+g+ba+na\tilde{\boldsymbol{a}} = \boldsymbol{a} + \boldsymbol{g} + \boldsymbol{b}_{a} + \boldsymbol{n}_{a}
这个公式说明:加速度计读到的值 = 真实运动加速度 + 重力加速度 + 零偏 + 随机噪声。静止时,真实运动加速度为零,所以读到的正是重力方向。
  1. 传感器读数等式左边 $\tilde{\boldsymbol{a}}$ 表示加速度计实际输出的比力向量,单位是 m/s²,它带有一顶“测量值”的小帽子。
    a~\tilde{\boldsymbol{a}}
  2. 真实运动加速度$\boldsymbol{a}$ 是物体相对世界系的真实线加速度,只有机器人真的被推、跑、跳时才会出现。
    a\boldsymbol{a}
  3. 重力叠加$\boldsymbol{g}$ 是重力加速度向量。因为 IMU 没有“参考系”,它分不清重力与惯性力,所以重力永远混在读数里。
    g\boldsymbol{g}
  4. 零偏与噪声$\boldsymbol{b}_{a}$ 是零偏,像称重前没把秤归零;$\boldsymbol{n}_{a}$ 是随机噪声,像心跳引起的手抖。
    ba+na\boldsymbol{b}_{a} + \boldsymbol{n}_{a}

误差与标定

阿衡闭眼转十圈后停下,会觉得自己还在转,这是前庭的“零偏”。如果他的半规管老化,转同样的圈数报告的转角却偏大,这就是“尺度因子”问题。IMU 的误差就好比一个会自己慢慢走歪的指南针:零偏让角速度积分出持续增长的姿态误差,随机噪声则让短时间读数抖成一团。

把角速度误差积分成角度误差,数学上很像“噪声被不断累加”。随机游走造成的角度不确定度可以用一个简洁公式描述:

标定的目标就是把这些“坏习惯”提前摸清楚。常见的六面标定法,是把 IMU 依次放置在六个规则面上,让每个轴分别对准重力方向,利用已知的重力矢量反推出零偏和尺度因子。对阿衡来说,这就像每天早上站直、目视远方,让大脑重新校准前庭的“零位”。温度变化会让零偏缓慢漂移,所以高端系统还会做温补标定,相当于在不同天气里反复练习同一套动作。

σθ(Δt)=σωΔt\sigma_{\theta}(\Delta t) = \sigma_{\omega} \sqrt{\Delta t}
意思是:陀螺仪随机噪声造成的位置/角度漂移,不会随时间线性增长,而是按时间的平方根增长。积分时间越长,误差越大,但增长慢于线性漂移。
  1. 累积角度误差$\sigma_{\theta}(\Delta t)$ 表示经过 $\Delta t$ 的积分后,姿态角的不确定度标准差。
    σθ(Δt)\sigma_{\theta}(\Delta t)
  2. 角速率噪声$\sigma_{\omega}$ 是陀螺仪白噪声的标准差,单位常用 °/s/√Hz。
    σω\sigma_{\omega}
  3. 积分时间开方$\sqrt{\Delta t}$ 说明噪声经过积分后按时间平方根扩散,时间越长累积误差越大。
    Δt\sqrt{\Delta t}

姿态表示与解算

阿衡闭眼从高处翻落时,大脑必须实时回答:“我是头朝下,还是身体倾斜 30 度?”这个问题的答案就是“姿态”。描述姿态有几种数学语言:欧拉角最直观,但会遇到万向节锁死;旋转矩阵无奇异性但参数冗余;四元数紧凑、无奇异性,成为 IMU 姿态解算的主流语言。

姿态更新的核心,是把陀螺仪测到的角速度转成四元数随时间的变化率。四元数微分方程是最常用的“姿态递推公式”:

在代码里,我们会用离散形式的四元数更新:把 $\dot{\boldsymbol{q}}$ 乘以采样周期 $\Delta t$ 再加到当前四元数上,然后归一化。这就像阿衡每秒读取一次前庭信号,快速更新大脑里的“身体姿势图”。

q˙=12q⊗ω\dot{\boldsymbol{q}} = \frac{1}{2} \boldsymbol{q} \otimes \boldsymbol{\omega}
这个公式像是把“当前朝向”和“当前转动速度”做了一次四元数乘法,得到的新四元数变化率,就用来更新朝向。
  1. 四元数变化率$\dot{\boldsymbol{q}}$ 是姿态四元数对时间的导数,它决定了机器人下一步“朝哪里转”。
    q˙\dot{\boldsymbol{q}}
  2. 当前姿态四元数$\boldsymbol{q}$ 表示当前机体相对导航系的旋转,包含实部和虚部四个分量。
    q\boldsymbol{q}
  3. 角速度的纯四元数形式$\boldsymbol{\omega}$ 是陀螺仪输出的角速度,写成纯四元数形式,才能参与四元数运算。
    ω\boldsymbol{\omega}
  4. 四元数乘法$\otimes$ 是四元数乘法,用于把旋转叠加到现有姿态上,前面的系数 $\frac{1}{2}$ 来自四元数运动学的固定推导。
    12q⊗ω\frac{1}{2} \boldsymbol{q} \otimes \boldsymbol{\omega}

滤波数据融合

阿衡蒙眼奔跑时,前庭会漂移:转几圈后他以为自己在直跑,实际上已经偏离。这时他会用耳朵听风声、用脚掌感受地面摩擦,把不可靠的前庭信号和可信的外部线索综合起来。这个修正动作,就是传感器融合。机器人同样不能只信 IMU,因为陀螺仪积分会漂移,加速度计易受震动噪声污染。最简单的融合算法是互补滤波。

互补滤波的智慧在于:陀螺仪短期很准但长期漂移,加速度计短期噪声大但长期稳定。所以让高频段信任陀螺仪,低频段信任加速度计。其离散形式如下:

更工程化的选择是卡尔曼滤波。它把姿态、零偏作为状态变量,把陀螺仪读数为预测输入、加速度计/视觉观测为测量更新,用噪声协方差自动计算“该信谁多少”。扩展卡尔曼滤波则进一步处理 IMU 模型的非线性。你可以把卡尔曼滤波看成一位经验丰富的“大脑调度员”:它不像互补滤波用固定权重,而是根据系统实时的不确定度动态调整权重,像阿衡在强风中更依赖脚感、在光滑冰面上更依赖耳朵。

θk=α(θk−1+ωk Δt)+(1−α) θaccel,k\theta_k = \alpha \left( \theta_{k-1} + \omega_k \, \Delta t \right) + (1-\alpha) \, \theta_{\text{accel},k}
新角度 = 权重 α × 陀螺仪积分角度 + 权重 (1-α) × 加速度计估计角度。α 通常取 0.95~0.99,表示更信任短期转动。
  1. 陀螺仪积分项$\theta_{k-1} + \omega_k \, \Delta t$ 是上一时刻角度加上本帧角速度乘以采样时间,也就是用陀螺仪预测的新角度。
    θk−1+ωk Δt\theta_{k-1} + \omega_k \, \Delta t
  2. 加速度计估计项$\theta_{\text{accel},k}$ 是根据重力方向解析出的角度,长期稳定但短时震动敏感。
    θaccel,k\theta_{\text{accel},k}
  3. 融合权重$\alpha$ 是陀螺仪占比,$(1-\alpha)$ 是加速度计占比,两者和为 1,保证新角度在量纲上不偏不倚。
    α(θk−1+ωk Δt)+(1−α) θaccel,k\alpha \left( \theta_{k-1} + \omega_k \, \Delta t \right) + (1-\alpha) \, \theta_{\text{accel},k}

工程实践要点

阿衡每天醒来第一件事,是站直身体、目视前方,让前庭系统重新归零。IMU 的工程应用同样需要“静止初始化”:上电后让机器人静止 1~2 秒,把加速度计和陀螺仪的零偏估计出来并扣掉。第二个关键点是时间同步。想象阿衡闭眼听到远处发令枪声,如果耳朵和肌肉反应时间不同步,起跑就会抢跑。多传感器融合时,IMU 通常以 200~1000Hz 高频输出,而相机只有 30Hz,若时间戳不对齐,细微延迟会放大为明显漂移。

第三个要点是处理退化场景。在特征稀疏的长走廊、光线忽明忽暗的环境里,视觉会退化,这时 IMU 高频短时预测能力就成了“救命稻草”。反过来,长时间无外部参考时,IMU 自身积分漂移也会逐渐失控,所以工程上必须设计失效检测与降级策略,比如当加速度计方差异常增大时,降低它对姿态修正的权重。

在系统架构上,融合方式分为松耦合和紧耦合。松耦合是让视觉先算出位姿,再与 IMU 输出做加权融合,像阿衡先听清风声再决定落脚点;紧耦合是把 IMU 原始测量与图像特征一起放进同一个优化问题,像阿衡同时结合风声和脚感做瞬时判断。紧耦合精度更高,但计算量更大;目前主流 VIO(视觉惯性里程计)系统普遍采用紧耦合加 IMU 预积分方案,这也是机器人定位领域最核心的工程落地模式。

器件选型与趋势

阿衡的前庭也有体质差异:有的人天生不容易晕车,有的人转个圈就东倒西歪。机器人的 IMU 同样分三六九等。消费级 MEMS 陀螺仪零偏稳定性约 10~100°/h,成本几美元,适合手机、玩具机器人;工业级 MEMS 可达 1°/h 以内,常用于无人机和 AGV;更高端的光纤陀螺或激光陀螺零偏稳定性可到 0.01°/h 以下,但体积大、价格可达数万甚至数十万元,服务于航空惯导和远洋船舶。

选型时不能只看“分辨率”,核心指标有四个:零偏稳定性、角随机游走、量程、带宽。零偏稳定性决定长时间漂移速度,角随机游走决定短时间噪声大小,量程决定能否承受剧烈旋转,带宽决定能否跟上快速动态。比如云台需要大带宽和低噪声,而仓储机器人更看重低功耗和低成本。趋势上,MEMS 芯片越做越小,IMU 与相机、LiDAR 的联合标定走向自动化,基于深度学习的惯性去噪与姿态预测也开始从实验室走向产品。

AI 应用场景

扫地机器人回充与建图

阶段:状态估计与传感器融合

解决的问题:扫地机器人只靠激光雷达在走廊等几何重复区域容易“迷路”,传统纯雷达定位在退化和快速旋转时会丢失位姿。IMU 以高频提供角速度和线加速度短时预测,配合激光里程计做卡尔曼滤波,让机器人在急拐弯或绕过桌腿时不丢位姿。

具体案例:一台家用扫地机在床底光线很暗、雷达特征稀疏时,依靠 IMU 预估自身转角和位移,回到客厅后立即用雷达扫描修正累积漂移,成功回到充电座,完成“先盲走、后校准”的导航闭环。

无人机抗风悬停

阶段:控制与状态估计

解决的问题:无人机在阵风扰动下需要快速感知姿态变化;GPS 更新频率低、延迟高,无法支撑高频姿态控制。IMU 提供姿态角速度给飞控,EKF 融合 IMU、气压计和 GPS,保证悬停时水平漂移小于 0.5 米。

具体案例:某巡检无人机在峡谷阵风环境中,飞控以 500Hz 读取 IMU,并以 50Hz 融合 GPS,实时修正姿态和速度估计,成功完成沿桥墩的自主巡检,没有因风切变导致翻滚。

VR 头显 6DOF 追踪

阶段:感知与融合定位

解决的问题:VR 头显需要极低延时的头部位姿追踪,纯视觉动捕有延迟,且遮挡时容易丢失。IMU 以 1000Hz 频率捕捉快速转头动作,与头显摄像头紧耦合,实现“视觉低频修正、IMU 高频外推”,让玩家转头时画面同步无晕眩。

具体案例:某 VR 游戏中,玩家快速甩头 180°,系统通过 IMU 预积分和外推,在下一帧渲染前完成姿态更新,延迟降低到 12ms 以内,大幅减少晕动症反馈。

Python 演示

python38 行
import mathimport random def simulate_imu(duration=10.0, dt=0.01):    times = []    true_tilt = []    acc_meas = []    gyro_meas = []    t = 0.0    while t < duration:        theta = math.sin(2 * math.pi * 0.2 * t) * 0.5        omega = 2 * math.pi * 0.2 * math.cos(2 * math.pi * 0.2 * t) * 0.5        times.append(t)        true_tilt.append(theta)        acc_meas.append(theta + random.gauss(0, 0.05))        gyro_meas.append(omega + 0.02 + random.gauss(0, 0.01))        t += dt    return times, true_tilt, acc_meas, gyro_meas def complementary_filter(acc_meas, gyro_meas, dt, alpha=0.98):    theta = 0.0    estimates = []    for i in range(len(acc_meas)):        omega_dt = theta + gyro_meas[i] * dt        theta = alpha * omega_dt + (1 - alpha) * acc_meas[i]        estimates.append(theta)    return estimates def main():    times, true_tilt, acc_meas, gyro_meas = simulate_imu()    estimates = complementary_filter(acc_meas, gyro_meas, 0.01)    print("时间  真实倾角  加速度计角度  陀螺仪角速度  互补滤波倾角")    for i in range(0, len(times), 200):        print(f"{times[i]:5.2f}  {true_tilt[i]:+.3f}   "              f"{acc_meas[i]:+.3f}   {gyro_meas[i]:+.3f}   {estimates[i]:+.3f}") if __name__ == "__main__":    main()
目的:模拟一台带零偏与噪声的 IMU,输入加速度计估计的角度和陀螺仪角速度,用互补滤波还原真实倾角,直观对比融合前后的结果。
  1. theta = math.sin(...) * 0.5生成一条平滑摆动的真实倾角曲线,模拟机器人前后摇晃。
  2. gyro_meas.append(omega + 0.02 + random.gauss(0, 0.01))在真实角速度上叠加 0.02 rad/s 的零偏和白噪声,模拟真实陀螺仪的“坏习惯”。
  3. omega_dt = theta + gyro_meas[i] * dt用当前角度加上角速度乘以时间,即陀螺仪积分预测的新角度。
  4. theta = alpha * omega_dt + (1 - alpha) * acc_meas[i]将陀螺仪积分和加速度计估计按权重融合,alpha 越大越信任陀螺仪。
  5. if __name__ == "__main__":保证模块被导入时不会直接执行,只在运行脚本时启动模拟。

常见误区

误区我以为加速度计在静止时没有任何运动,所以输出应该接近 0 m/s²。

正解加速度计测的是比力,静止时它会感受到重力,输出约等于重力加速度矢量。这就像阿衡闭眼站着,耳石依然告诉他“身体正受到向下的拉力”。因此静止加速度计读数不是零,而是 1g 左右。

为何常见:容易把“加速度”和“运动速度”混为一谈,忽略了重力也属于惯性力的一种,于是错误地期待静止输出为零。

误区陀螺仪输出的角速度很准,积一次分就是角度,所以只需积分就能长时间获得姿态。

正解陀螺仪存在零偏和噪声,零偏会让积分后的角度误差随时间线性增长。就像阿衡闭眼原地转圈,前庭的“零偏”会让他在停止后仍以为自己还在转。必须结合加速度计或视觉,用滤波器持续校正。

为何常见:演示环境下短时间积分误差很小,造成“只要积分就够用”的错觉,忽略了长时间和真实噪声的影响。

误区用了卡尔曼滤波,IMU 就不需要标定了,漂移会彻底消失,位姿永远准确。

正解卡尔曼滤波只能通过外部观测压低漂移,无法消除 IMU 本身的零偏。比如阿衡闭眼跑 100 米,即使大脑不断用脚感修正,但如果脚感本身不可靠,误差依然存在。滤波本质是“减小不确定度”,而不是“凭空去掉误差”。

误区导航精度不够,是 IMU 太便宜;选个高精度导航级陀螺仪,机器人就能通用。

正解高精度 IMU 往往体积大、功耗高、价格贵,且不一定适合低成本消费机器人。就像阿衡虽然适合跑酷,但让他穿潜水重装备去跑屋顶反而笨重。选型要看量程、带宽、功耗、成本和算法复杂度,匹配应用场景才是关键。

为何常见:用“价格决定性能”的简单逻辑替代多维度工程权衡,忽视应用场景对体积和功耗的硬约束。

面试题

Q1. IMU 的全称是什么?

单选题 · easy

  • A.惯性组合模块
  • B.惯性测量单元← 正确答案
  • C.集成磁力计组
  • D.微电振荡器

答案:B。IMU 是 Inertial Measurement Unit 的缩写,中文叫惯性测量单元。它由加速度计和陀螺仪组成,像阿衡的内耳前庭一样完成惯性感知。A 是惯性导航系统惯称,C 是磁力计组件,D 是另一种微结构器件。

Q2. 陀螺仪直接测量的是哪种物理量?

单选题 · easy

  • A.角度
  • B.角速度← 正确答案
  • C.线速度
  • D.加速度

答案:B。陀螺仪输出的是角速度,单位是 rad/s 或 °/s。角度需要通过积分得到,就像半规管感知的是“转动快慢”而不是“已经转了多远”,后者需要大脑累计积分。

Q3. 加速度计静止平放时,读数大约是多少?

单选题 · mid

  • A.零,因为静止
  • B.一半重力值
  • C.与重力大小相同← 正确答案
  • D.竖直向上的推力

答案:C。加速度计测量的是比力,静止时比力与重力大小相同、方向相反。就像阿衡站着时耳石感受到 1g 的拉力,因此读数不是 0,而是约 9.8 m/s²。

Q4. 陀螺仪零偏对姿态估计的主要影响是什么?

单选题 · mid

  • A.误差随时间线性增长← 正确答案
  • B.误差随速度比例放大
  • C.只影响瞬时噪声大小
  • D.只导致温度突变漂移

答案:A。零偏是常值偏差,积一次分会变成线性增长的姿态误差。好比阿衡闭眼原地转圈,前庭“以为”还在转,这种错觉会随着时间累积。

Q5. 互补滤波的核心思想是什么?

单选题 · mid

  • A.高频陀螺仪,低频加速度计← 正确答案
  • B.用卡尔曼替代四元数
  • C.直接丢弃陀螺仪测量
  • D.将两种信号简单相加

答案:A。互补滤波在频域上取长补短:陀螺仪适合短时动态,所以高频信任它;加速度计长期稳定,所以低频信任它。简单相加或丢弃都违背了“互补”的本意。

Q6. 卡尔曼滤波中 Q 矩阵表示什么?

单选题 · hard

  • A.过程噪声协方差← 正确答案
  • B.量测噪声协方差
  • C.状态转移矩阵
  • D.卡尔曼增益矩阵

答案:A。Q 是过程噪声协方差,描述状态预测模型不可靠的程度;R 才是量测噪声协方差。阿衡在强风中跑动时,大脑对“前庭预测”的信心下降,相当于 Q 变大。

Q7. 四元数相比欧拉角有哪些优势?

多选题 · mid

  • A.无万向节锁死← 正确答案
  • B.插值计算更简单
  • C.计算量一定更小
  • D.避免三角函数运算← 正确答案

答案:AD。四元数没有欧拉角的万向节锁死问题,且旋转复合只涉及加减乘除、无三角函数,天然适合计算机运算。“计算量一定更小”不够严谨,它与具体实现有关。

Q8. 常见的 IMU 与视觉融合方式有哪些?

多选题 · hard

  • A.松耦合← 正确答案
  • B.紧耦合← 正确答案
  • C.光纤耦合
  • D.预积分优化← 正确答案

答案:ABD。松耦合先让视觉算出位姿再融合,紧耦合把 IMU 原始观测放进后端优化,预积分是紧耦合中处理高频 IMU 的常用技巧。光纤耦合是光电技术,与视觉融合无关。

Q9. 艾伦方差主要用于分析 IMU 的哪类误差?

单选题 · hard

  • A.零偏随机游走特性← 正确答案
  • B.尺度因子非线性
  • C.安装轴正交度
  • D.温度迟滞效应

答案:A。艾伦方差通过在不同积分时间下统计方差,分离白噪声、零偏稳定性、随机游走等成分,是对“噪声指纹”做体检的工具。安装误差和温滞需要另用标定方法。

Q10. IMU 标定通常包括哪些内容?

多选题 · easy

  • A.零偏标定← 正确答案
  • B.尺度因子标定← 正确答案
  • C.轴间安装误差← 正确答案
  • D.重力矢量校准

答案:ABC。零偏、尺度因子和轴间安装误差是标定三大主题;重力矢量校准属于初始化或对准,不是标定本身。就像阿衡重新归零“前庭基准”是标定,而站直看远方只是开机准备。