4、惯性导航系统(INS)基础:IMU工作原理、比力方程与姿态更新、捷联惯导解算(姿态、速度、位置)、INS误差传播特性

4.1 IMU工作原理:陀螺仪与加速度计

说到惯性导航,核心硬件就是IMU(惯性测量单元)。它里面装了两个关键传感器:陀螺仪和加速度计。

陀螺仪测什么?测角速度。说白了,就是物体转得有多快。加速度计呢?测比力。这个「比力」不是我们平时说的力,而是物体受到的惯性力与重力的合力。嗯,这个概念容易搞混,我后面会细讲。

我记得刚入行那会儿,总觉得加速度计测的就是加速度。后来在项目里调试数据才发现,静止状态下加速度计输出的是重力加速度g,而不是0。这才真正理解了「比力」的含义。

核心要点:

  • 陀螺仪输出:角速度(单位:rad/s 或 °/s)
  • 加速度计输出:比力(单位:m/s²)
  • IMU输出频率通常较高:100Hz~1000Hz

4.2 比力方程:从加速度计到导航加速度

比力方程是INS解算的基石。它长这样:

a_n = C_b^n * f_b - (2ω_ie^n + ω_en^n) × v_n + g_n

看着复杂?我拆开给你讲:

  • a_n:导航系下的加速度(我们真正想要的)
  • C_b^n * f_b:把IMU测的比力从载体系转到导航系
  • (2ω_ie^n + ω_en^n) × v_n:地球自转和载体运动引起的哥氏加速度
  • g_n:重力加速度补偿

为什么要有这个方程?因为加速度计测的不是纯粹的加速度,而是包含了重力在内的比力。你想想看,如果直接积分加速度计的输出,静止时你会得到一个向上飞的轨迹——这显然不对。

我的经验:在实际项目中,比力方程中的哥氏项和重力项很容易被忽略。我曾经在一个低精度MEMS项目里偷懒没加哥氏补偿,结果在高速运动时位置误差直接发散。后来老老实实加上了,精度提升了一个数量级。

4.3 姿态更新:四元数法与等效旋转矢量

姿态更新是INS解算中最核心也最容易出问题的一环。常用的方法有两种:

方法 优点 缺点
四元数法 无奇点、计算量小、适合实时 需要归一化、存在漂移
等效旋转矢量法 精度高、能补偿圆锥运动 计算稍复杂

我个人习惯用四元数法做姿态更新,因为它简单高效。但要注意——四元数必须定期归一化,否则数值误差会累积。我见过有人忘了这步,结果姿态越算越偏。

四元数更新公式:

q_k+1 = q_k ⊗ exp(Δθ/2)

其中Δθ是角增量,由陀螺仪积分得到。

避坑指南:我曾经在一个高动态项目中直接用角速度乘以dt代替角增量,结果在高频振动下姿态发散得一塌糊涂。后来改用等效旋转矢量法补偿圆锥运动,问题才解决。记住:高动态场景下,角增量比角速度更可靠。

4.4 捷联惯导解算:姿态、速度、位置

捷联惯导解算的流程其实很清晰:

  1. 姿态更新:用陀螺仪数据更新四元数/姿态矩阵
  2. 比力转换:用姿态矩阵把比力转到导航系
  3. 速度更新:对比力积分,加上哥氏和重力补偿
  4. 位置更新:对速度积分得到位置

说白了,就是「积分再积分」的过程。但每一步都有坑。

速度更新公式:

v_k+1 = v_k + [C_b^n * f_b - (2ω_ie^n + ω_en^n) × v_k + g_n] * Δt

位置更新公式(经纬度形式):

φ_k+1 = φ_k + v_N * Δt / (R_M + h)
λ_k+1 = λ_k + v_E * Δt / ((R_N + h) * cos(φ))
h_k+1 = h_k + v_U * Δt

这里R_M和R_N分别是子午圈和卯酉圈曲率半径。嗯,地球不是完美的球体,所以要用椭球模型。

关键点:捷联惯导解算是一个递推过程,每一步都依赖上一步的结果。这意味着——误差会累积,而且会越积越大。这就是为什么纯INS不能长时间独立工作。

4.5 INS误差传播特性:为什么纯INS会发散?

INS的误差传播,说白了就是「误差的误差」。我画了一张图帮你理解:

INS误差传播特性示意图 陀螺仪误差 加速度计误差 姿态误差 比力投影误差 速度误差 位置误差 误差反馈:姿态误差影响后续所有解算

从图上你能看到:陀螺仪误差直接导致姿态误差,姿态误差又导致比力投影错误,进而产生速度误差,速度误差积分出位置误差。而且——姿态误差还会反过来影响后续的比力转换,形成正反馈。

这就是为什么纯INS的位置误差会随时间的三次方增长。你想想看,一个0.01°/h的陀螺仪漂移,在1小时内就能产生几百米的位置误差。

注意:INS误差传播有几个典型周期:

  • 舒勒周期:约84.4分钟,由重力恢复力引起
  • 地球周期:24小时,由地球自转引起
  • 傅科周期:随纬度变化,由地球自转和运动耦合引起

这些周期在长时间导航中会显现出来。我曾在一次船载测试中,看到位置误差呈现明显的84分钟振荡——那就是舒勒周期在作怪。

4.6 本章小结

INS基础这块,说白了就是三件事:

  • IMU测什么:陀螺仪测角速度,加速度计测比力
  • 怎么解算:比力方程去重力、去哥氏,四元数更新姿态,积分得速度位置
  • 误差怎么传:陀螺仪误差→姿态误差→速度误差→位置误差,层层放大

我个人觉得,理解INS误差传播特性比会写解算代码更重要。因为只有知道误差从哪来、怎么传,你才能在融合定位时设计出有效的补偿策略。下一章我们会讲如何用外部传感器来抑制这些误差——嗯,那就是组合导航的核心了。

一个小建议:如果你刚开始接触INS,建议先用手写代码实现一遍完整的捷联惯导解算。别用现成的库。我当年就是这么干的,虽然踩了不少坑,但踩完之后对INS的理解就再也不会忘了。


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