3、坐标系与姿态表示:地心惯性系、地球坐标系、导航坐标系、载体坐标系、欧拉角、方向余弦矩阵、四元数

各位同学,咱们今天聊点硬核的。坐标系和姿态表示,这玩意儿是惯导系统的地基。地基没打好,后面什么误差补偿都是空中楼阁。我当年刚入行时,就在这上面栽过跟头——有一次把导航坐标系和地球坐标系搞混了,结果解算出来的位置偏了十几公里,被老工程师骂得狗血淋头。嗯,从那以后,我再也不敢小看坐标系了。

3.1 四大坐标系:你总得知道自己在哪

惯导系统里,常用的坐标系有四个。说白了,就是四个不同的“参考系”,用来描述载体在空间中的位置和姿态。

核心要点:坐标系的选择决定了你的数学模型的复杂度。选对了,事半功倍;选错了,debug到天亮。

3.1.1 地心惯性系(i系)

这是最“绝对”的坐标系。原点在地心,Z轴指向北极,X轴指向春分点,Y轴按右手定则确定。它不随地球自转,是牛顿力学成立的理想参考系。我个人习惯把它当作“上帝视角”——所有运动最终都要回到这个坐标系来解算。

3.1.2 地球坐标系(e系)

这个坐标系跟着地球一起转。原点还是地心,但Z轴指向北极,X轴指向本初子午线与赤道的交点。你想想看,GPS给出的经纬度,本质上就是在这个坐标系下的坐标。我在做车载导航时,经常需要把e系下的经纬度转成平面坐标,方便做路径规划。

3.1.3 导航坐标系(n系)

也叫“当地水平坐标系”。原点在载体所在位置,通常取“东北天”或“北东地”指向。这是最贴近我们日常感知的坐标系——你站在地面上,东、北、天三个方向一目了然。我建议初学者先把这个坐标系搞透,因为大部分导航解算都在n系里完成。

3.1.4 载体坐标系(b系)

这个坐标系固定在载体上。原点在载体质心,X轴指向载体前方,Y轴指向右侧,Z轴指向下方(或上方,取决于定义)。IMU输出的加速度和角速度,都是在这个坐标系下测量的。说白了,传感器只知道自己“感觉”到了什么,它不知道自己是朝东还是朝北。

我的经验:在写代码时,我习惯在变量名里加上坐标系后缀,比如 acc_b 表示载体坐标系下的加速度,vel_n 表示导航坐标系下的速度。这样能避免很多低级错误。

3.2 姿态表示:怎么描述“朝向”

知道了载体在哪,还得知道它脸朝哪。姿态表示有三种主流方法:欧拉角、方向余弦矩阵、四元数。每种都有优缺点,我一个个说。

3.2.1 欧拉角

欧拉角最直观:横滚(Roll)、俯仰(Pitch)、航向(Yaw)。你想想看,飞机转弯时,飞行员看的就是这三个角度。但欧拉角有个致命问题——万向锁。当俯仰角接近±90°时,横滚和航向会耦合,导致姿态解算失效。我在做无人机飞控时,就因为这个原因,把姿态更新算法从欧拉角换成了四元数。

欧拉角的旋转顺序很重要。常用的顺序是 Z-Y-X(航向-俯仰-横滚),但不同领域可能有不同约定。我建议你在项目开始时,就把旋转顺序写死在注释里,免得后面自己都忘了。

3.2.2 方向余弦矩阵(DCM)

DCM是一个3x3的矩阵,用来描述两个坐标系之间的旋转关系。它的优点是:没有奇点,可以连续旋转。缺点是:9个参数,计算量大,而且必须保证正交性。我在做捷联惯导时,每次更新完DCM后,都会做一次正交化修正,否则误差会慢慢累积。

DCM的更新公式很简单:

C_b^n(t+Δt) = C_b^n(t) · (I + [ω_b×]·Δt)

其中 [ω_b×] 是角速度的反对称矩阵。嗯,这里要注意,角速度必须是载体坐标系下的。

3.2.3 四元数

四元数是我个人最喜欢的姿态表示方法。它只有4个参数,没有奇点,计算效率高。你想想看,一个四元数 q = [q0, q1, q2, q3] 就能表示任意旋转,而且更新时只需要做简单的四元数乘法。

四元数的更新公式:

q(t+Δt) = q(t) ⊗ exp(0.5 · ω_b · Δt)

其中 ⊗ 表示四元数乘法,ω_b 是角速度向量(虚部)。

避坑指南:我曾经在四元数归一化上吃过亏。四元数必须保持单位模长,否则姿态会漂移。我建议每次更新后都做一次归一化,哪怕你觉得没必要。

3.3 三种姿态表示方法的对比

方法 参数数量 奇点问题 计算效率 直观性 适用场景
欧拉角 3 有(万向锁) 人机交互、控制
方向余弦矩阵 9 理论分析、坐标变换
四元数 4 姿态解算、导航

3.4 坐标系与姿态表示的核心逻辑

为了让你更直观地理解这些概念之间的关系,我画了一张图。这张图展示了从传感器原始数据到导航解算的完整链路。

坐标系与姿态表示核心逻辑 IMU 传感器 输出:加速度 (b系) + 角速度 (b系) 姿态解算 四元数 / DCM / 欧拉角 坐标变换 b系 → n系 → e系 → i系 导航解算 位置、速度、姿态 误差补偿 零偏、标度因数、安装误差 反馈修正 传感器 姿态解算 坐标变换 导航解算 误差补偿

从这张图你可以看到,整个惯导系统的核心链路是:传感器输出原始数据 → 姿态解算得到旋转关系 → 坐标变换将加速度转换到导航系 → 导航解算得到位置和速度 → 误差补偿反过来修正姿态解算。说白了,坐标系和姿态表示贯穿了整个过程,任何一个环节出错,结果都会跑偏。

我的建议:刚开始学的时候,不要急着写代码。先在纸上把坐标系画出来,把旋转关系写清楚。我当年就是这么干的,虽然看起来笨,但效果很好。

3.5 本章小结

这一章我们聊了四个坐标系和三种姿态表示方法。你想想看,它们其实是一件事的两个方面:坐标系定义了“在哪看”,姿态定义了“怎么看”。搞懂了这些,后面的误差补偿才能有的放矢。嗯,下一章我们开始聊具体的误差源,到时候你会发现,坐标系和姿态表示的知识会反复用到。


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