4、捷联惯导解算:速度更新算法、位置更新算法、重力模型、地球自转补偿

各位同学,欢迎来到第四章。前面我们聊了姿态更新,那是惯导解算的「脊梁骨」。今天我们要把剩下的三块拼图补上:速度怎么算、位置怎么推、以及重力这个「捣蛋鬼」怎么处理。

说实话,这三块内容在教科书里往往被一笔带过。但我得提醒你——实际工程中,80%的导航误差都出在这里。不是姿态算不准,而是速度和位置被重力模型和地球自转带偏了。

4.1 速度更新算法:比力方程离散化

速度更新的核心,就是解这个比力方程:

dV/dt = f^n - (2ω_ie^n + ω_en^n) × V + g^n

看着挺吓人,其实就三部分:

  • f^n:加速度计测的比力,投影到导航系
  • -(2ω_ie^n + ω_en^n) × V:哥里奥利力和向心力的合体
  • g^n:重力加速度

离散化怎么做?我个人习惯用二子样法。为啥?因为简单、够用。

// 速度更新(二子样法)
ΔV = ΔV_f + ΔV_g + ΔV_cor

// 比力增量
ΔV_f = C_b^n(t) * (ΔV_1 + ΔV_2) / 2

// 重力增量
ΔV_g = g^n * Δt

// 哥里奥利力修正
ΔV_cor = -(2ω_ie^n + ω_en^n) × V(t) * Δt

重要提醒:比力增量一定要用平均姿态矩阵来投影。直接用t时刻的矩阵,误差会随时间累积。我在项目里吃过这个亏,跑10分钟就偏了50米。

4.2 位置更新算法:经纬高怎么推

位置更新相对直观,但有个坑——地球曲率。你不能把地球当平面算,否则飞个几百公里就偏到姥姥家了。

位置更新公式:

// 纬度更新
φ(t+Δt) = φ(t) + V_N * Δt / (R_M + h)

// 经度更新
λ(t+Δt) = λ(t) + V_E * Δt / ((R_N + h) * cos(φ))

// 高度更新
h(t+Δt) = h(t) + V_U * Δt

这里R_M和R_N分别是子午圈曲率半径和卯酉圈曲率半径。你想想看,地球是个椭球,不同纬度的曲率半径是不一样的。

参数 含义 典型值(纬度45°)
R_M 子午圈曲率半径 约 6,367 km
R_N 卯酉圈曲率半径 约 6,389 km
g 重力加速度 约 9.806 m/s²

我的小技巧:高度更新时,别忘了用气压高度做辅助。纯惯导的高度通道是发散的,这是物理规律,没办法。所以实际系统中,高度一定要用外部传感器修正。

4.3 重力模型:别用9.8糊弄事

很多初学者喜欢写死g=9.8。嗯,这里要注意——重力是随纬度和高度变化的。

常用的重力模型:

g(φ, h) = g_0 * (1 + 0.0052884 * sin²(φ) - 0.0000059 * sin²(2φ)) 
          - 0.000003086 * h

g_0是赤道海平面重力,约9.780 m/s²。你看,纬度从0°到90°,重力变化约0.05 m/s²。别小看这0.05,积分10分钟就是30m/s的速度误差。

我曾经在一个高纬度项目中,忘了改重力模型,结果导航误差直接爆表。后来查了三天才找到原因——就是重力公式里少了个sin²(2φ)项。

避坑指南:我曾经在极地地区测试,发现惯导解算结果异常。后来发现,标准重力模型在纬度>80°时误差会急剧增大。建议高纬度地区使用EGM2008重力场模型,或者至少用高阶展开式。

4.4 地球自转补偿:别让地球「偷」你的速度

地球自转角速度ω_ie ≈ 7.292115 × 10⁻⁵ rad/s。看着很小,但影响不小。

主要体现在两个地方:

  • 哥里奥利力:物体在旋转参考系中运动时受到的偏转力。比如北向运动会引起东向的加速度。
  • 向心加速度:地球自转产生的离心力,其实已经包含在重力模型里了。

补偿公式:

// 地球自转角速度在导航系下的投影
ω_ie^n = [ω_ie * cos(φ), 0, -ω_ie * sin(φ)]^T

// 哥里奥利力加速度
a_cor = -2 * ω_ie^n × V^n

说白了,就是你在北半球往北走,地球自转会让你往东偏。这个效应在高速运动时特别明显。比如飞机以250m/s的速度向北飞,哥里奥利力产生的东向加速度约0.036 m/s²。10分钟后,东向速度误差约22m/s。

核心要点:地球自转补偿不能忽略,尤其是在高精度导航或长时间导航场景。对于消费级IMU(比如手机里的),这个效应可以忽略。但对于航空级惯导,必须精确补偿。

4.5 完整解算流程

好了,我们把姿态、速度、位置串起来,看看完整的捷联惯导解算流程:

// 每个解算周期(比如1ms)
1. 读取陀螺仪角增量 Δθ,加速度计速度增量 ΔV
2. 姿态更新:用Δθ更新四元数/方向余弦矩阵
3. 速度更新:
   a. 用平均姿态矩阵投影ΔV到导航系
   b. 计算哥里奥利力修正项
   c. 计算重力修正项
   d. 更新速度
4. 位置更新:用更新后的速度计算经纬高
5. 输出导航结果

这个流程看起来简单,但每个步骤都有细节。我建议你写代码时,先跑一个纯仿真环境,给一个已知轨迹,看看解算结果能不能跟真值对上。

调试技巧:如果发现速度或位置发散,先检查重力模型是否正确,再看哥里奥利力补偿有没有加反符号。这两个是新手最容易犯错的地方。

4.6 本章知识体系

下面我用一张图来总结本章的核心逻辑:

捷联惯导解算核心流程 IMU原始数据 姿态更新 四元数/方向余弦矩阵 速度更新 比力投影 + 哥里奥利力补偿 + 重力补偿 二子样法 / 三子样法 位置更新 经纬高 + 地球曲率半径修正 导航输出 陀螺仪角增量 加速度计速度增量 地球自转补偿

这张图把今天讲的内容串起来了。你仔细看,速度更新是承上启下的关键环节——它既要用到姿态更新的结果,又要为位置更新提供输入。所以速度更新算法做得好不好,直接决定了整个导航系统的精度。

好了,这一章就到这里。记住我说的:重力模型别偷懒,地球自转别忽略,速度更新用平均姿态矩阵。做到这三点,你的惯导解算至少不会「翻车」。

可可精品资料库