第4章:INS机械编排——姿态、速度、位置更新与圆锥/划桨效应补偿

各位同学,欢迎来到INS机械编排这一章。说实话,这是整个紧耦合系统里最“硬核”的部分之一。你想想看,IMU输出的原始数据是角速度和比力,我们要靠这些算出姿态、速度、位置,这个过程就是机械编排。我当年刚接触时,觉得不就是积分嘛,有什么难的?后来发现,坑多着呢。

这一章,我会把姿态更新(四元数/等效旋转矢量)、速度更新、位置更新,还有圆锥效应和划桨效应补偿,掰开了讲清楚。嗯,咱们开始吧。

4.1 姿态更新:从角速度到旋转矩阵

姿态更新,说白了就是回答一个问题:载体转了多少?

IMU输出的角速度是载体坐标系相对于惯性系的旋转速率。我们要把它积分,得到当前时刻相对于上一时刻的姿态变化。常用的数学工具有两种:四元数和等效旋转矢量。

4.1.1 四元数法

四元数是个好东西。它没有欧拉角的万向锁问题,计算量也比方向余弦矩阵小。我个人习惯用四元数做姿态更新,因为它在工程实现上非常稳定。

四元数的微分方程长这样:

dq/dt = 0.5 * q ⊗ ω

其中ω是角速度向量,⊗表示四元数乘法。实际离散化时,我们通常用一阶或二阶龙格-库塔法。我建议用二阶,精度够用,计算量也不大。

举个例子,假设陀螺采样周期为dt,角增量为Δθ = ω * dt,那么四元数更新公式为:

q_new = q_old ⊗ [cos(|Δθ|/2), (Δθ/|Δθ|) * sin(|Δθ|/2)]

这里要注意,如果|Δθ|很小(比如小于1e-6),直接用一阶近似:

q_new = q_old ⊗ [1, Δθ/2]
我的经验: 在低动态场景下,一阶近似完全够用。但如果你做无人机或车载导航,角速度变化剧烈,一定要用完整公式。我曾经在无人机试飞时偷懒用了一阶近似,结果姿态发散,差点炸机。

4.1.2 等效旋转矢量法

等效旋转矢量法,是专门用来对付圆锥效应的。什么是圆锥效应?简单说,就是当载体同时绕两个轴做同频振动时,积分出来的姿态会多出一个虚假的旋转分量。这可不是数学游戏,实际IMU数据里真的会发生。

等效旋转矢量Φ的微分方程是:

dΦ/dt = ω + 0.5 * Φ × ω + (1/|Φ|²) * (1 - |Φ| * sin(|Φ|) / (2*(1-cos(|Φ|)))) * Φ × (Φ × ω)

看着复杂,但实际工程中常用简化形式。对于小角度,可以近似为:

Φ = Δθ₁ + Δθ₂ + (2/3) * (Δθ₁ × Δθ₂)

其中Δθ₁和Δθ₂是相邻两个半采样周期的角增量。这个公式就是著名的“二子样算法”。

核心要点: 等效旋转矢量法能有效补偿圆锥效应。在振动环境下,用四元数直接积分会发散,但用等效旋转矢量法先算Φ,再转成四元数,结果就稳了。

4.2 速度更新:比力积分与重力补偿

速度更新,就是把加速度计测到的比力,去掉重力,再积分。公式很简单:

v_new = v_old + (f - g) * dt

但实际做起来,有几个坑要小心。

第一,比力坐标系转换。 加速度计测的是载体坐标系下的比力,但我们要在导航坐标系下积分。所以必须先做坐标变换:

f_n = C_b^n * f_b

其中C_b^n是姿态矩阵。这里有个鸡生蛋蛋生鸡的问题:姿态更新需要角速度,速度更新需要姿态矩阵。实际工程中,我们通常先做姿态更新,再用更新后的姿态做速度更新。

第二,重力模型。 重力不是常数。我建议用WGS84模型,考虑纬度和高度的影响。简单点可以用:

g = 9.780326 * (1 + 0.0053024 * sin²(lat) - 0.0000058 * sin²(2*lat)) - 0.000003086 * h

其中lat是纬度,h是高度。嗯,这个公式我背了十年了。

注意: 千万别用9.8直接算。在高精度导航中,重力误差会直接累积到速度里。我曾经在长航时测试中,就因为重力模型没选对,速度误差漂了十几米每秒。

4.3 位置更新:速度积分与曲率补偿

位置更新,就是把速度积分得到位移。在平面导航中很简单:

p_new = p_old + v * dt

但在全球导航中,要考虑地球曲率。位置通常用经纬高表示,更新公式为:

lat_new = lat_old + v_n * dt / (R_m + h)
lon_new = lon_old + v_e * dt / ((R_t + h) * cos(lat))
h_new = h_old + v_d * dt

其中R_m是子午圈曲率半径,R_t是卯酉圈曲率半径。这两个值随纬度变化,公式如下:

R_m = a * (1 - e²) / (1 - e² * sin²(lat))^(3/2)
R_t = a / sqrt(1 - e² * sin²(lat))

a是地球长半轴,e是偏心率。WGS84模型下,a=6378137米,e²=0.00669437999014。

我的习惯: 在低动态、短时间导航中,可以忽略曲率,直接用平面近似。但如果你做远洋导航或高空飞行,必须用精确的椭球模型。我见过有人用平面模型飞了100公里,位置误差直接爆表。

4.4 圆锥效应与划桨效应补偿

这两个效应,是INS机械编排里最容易被忽视,但影响最大的两个问题。

4.4.1 圆锥效应

圆锥效应发生在角运动上。当载体同时绕两个轴做同频正弦振动时,直接积分角速度会得到虚假的旋转。举个例子,假设载体绕x轴和y轴同时振动:

ω_x = A * sin(Ωt)
ω_y = A * cos(Ωt)

直接积分,你会得到一个绕z轴的虚假旋转。这就是圆锥效应。

补偿方法就是用等效旋转矢量法。前面提到的二子样算法就是最简单的补偿。更高阶的有多子样算法,比如三子样、四子样。我一般用二子样,性价比最高。

// 二子样圆锥补偿
Δθ = Δθ₁ + Δθ₂
Φ = Δθ + (2/3) * (Δθ₁ × Δθ₂)

4.4.2 划桨效应

划桨效应是圆锥效应的“平移版本”。它发生在比力积分中。当载体同时做线振动和角振动时,直接积分比力会得到虚假的速度增量。

想象一下,你坐在船上划桨。桨入水时船身倾斜,桨出水时船身回正。这个过程中,虽然桨的净位移为零,但船却前进了。这就是划桨效应的物理本质。

补偿公式与圆锥效应类似:

Δv_sculling = 0.5 * (Δθ₁ × Δv₂ + Δv₁ × Δθ₂)

其中Δv₁和Δv₂是相邻半采样周期的速度增量,Δθ₁和Δθ₂是角增量。

避坑指南: 我曾经在车载导航测试中,忽略了划桨效应补偿。结果车辆经过颠簸路面时,速度误差瞬间跳变。后来加上补偿,数据就平滑了。记住,振动环境下,这两个补偿是必须的。

4.5 知识体系总览

为了让大家更直观地理解这一章的内容,我画了一张流程图。它展示了INS机械编排的核心逻辑:从IMU原始数据出发,经过姿态、速度、位置更新,最终得到导航解算结果。

INS机械编排核心流程 IMU原始数据 角速度 (陀螺) 比力 (加速度计) 姿态更新 四元数 / 等效旋转矢量 圆锥效应补偿 速度更新 比力积分 + 重力补偿 划桨效应补偿 位置更新 速度积分 + 地球曲率补偿 导航解算结果 姿态矩阵用于比力变换

从图中可以看到,IMU原始数据分为角速度和比力两条路径。角速度经过姿态更新(含圆锥补偿)得到姿态矩阵,比力经过速度更新(含划桨补偿)得到速度,速度再积分得到位置。姿态矩阵还会反馈给速度更新,用于比力的坐标系变换。这就是一个完整的机械编排闭环。

好了,这一章的内容就到这里。机械编排是INS的核心,也是紧耦合的基础。你把这些公式和补偿方法吃透了,后面做融合滤波就会轻松很多。


专注资料整理