3. 坐标系与姿态表示:导航坐标系、载体坐标系、姿态角(欧拉角)、四元数基础、旋转矩阵的物理意义

做惯性导航这些年,我最大的体会就是:坐标系搞不清楚,后面全是白搭。你想想看,IMU 输出的数据是相对于它自己身体的,而我们要算的是它在世界里的位置。这中间差了啥?就差一个坐标系变换。

这一节,咱们就把坐标系和姿态表示彻底聊透。我会把我在项目里踩过的坑、总结的经验都倒出来。

3.1 导航坐标系 vs 载体坐标系

先说两个最基础的坐标系。说白了,就是「我在哪看」和「我在哪动」的问题。

3.1.1 导航坐标系(n系)

导航坐标系,也叫参考坐标系。它是个固定不动的坐标系,用来描述物体的位置和姿态。我个人习惯用 NED(北-东-地)坐标系:

  • X轴:指向北
  • Y轴:指向东
  • Z轴:指向地心(向下)

当然,也有用 ENU(东-北-天)的,比如 GPS 常用这个。但做惯导,NED 更顺手。我在做无人机项目时,一开始用了 ENU,结果和飞控的坐标系对不上,折腾了两天才发现是坐标系定义不一致。嗯,从那以后我统一用 NED。

3.1.2 载体坐标系(b系)

载体坐标系是固定在运动物体上的。通常这样定义:

  • X轴:指向载体前进方向(前)
  • Y轴:指向载体右侧(右)
  • Z轴:指向载体下方(下)

IMU 的加速度计和陀螺仪,输出的就是相对于这个坐标系的数据。所以,我们要做的就是把 b 系的数据转换到 n 系去。

核心思想:IMU 测量的是「载体自己」的运动,而我们关心的是「载体在世界里」的运动。坐标系变换就是连接这两者的桥梁。

3.2 姿态角(欧拉角)

欧拉角是最直观的姿态表示方法。它用三个角度来描述载体相对于导航坐标系的旋转:

  • 横滚角(Roll, φ):绕 X 轴旋转
  • 俯仰角(Pitch, θ):绕 Y 轴旋转
  • 航向角(Yaw, ψ):绕 Z 轴旋转

旋转顺序很重要!我一般用 Z-Y-X 顺序(先航向,再俯仰,最后横滚)。为什么?因为这是航空航天领域的惯例,而且能避免一些奇异性问题。

避坑指南:欧拉角有个著名的「万向锁」问题。当俯仰角接近 ±90° 时,横滚和航向会耦合在一起,丢失一个自由度。我曾经在四轴飞行器上遇到过这个问题,飞控直接失控。所以,如果你要做全姿态运动,别只用欧拉角。

3.3 旋转矩阵的物理意义

旋转矩阵,说白了就是一个 3x3 的矩阵,它能把一个向量从一个坐标系旋转到另一个坐标系。比如,从 b 系到 n 系的旋转矩阵记作 C_b^n

它的物理意义是什么?我举个例子你就明白了:

假设载体坐标系里有一个向量 v_b(比如加速度计测到的重力加速度),那么它在导航坐标系里的表示就是:

v_n = C_b^n * v_b

这个矩阵的每一列,其实就是导航坐标系的基向量在载体坐标系里的投影。反过来,每一行是载体坐标系的基向量在导航坐标系里的投影。

我记得有一次做标定,需要验证旋转矩阵的正确性。我直接把矩阵的列向量拿出来看,发现它们不正交,就知道标定出问题了。这个小技巧,你可以记一下。

3.4 四元数基础

四元数,很多人一听就头大。其实它没那么复杂。四元数是一个四维复数,形式是:

q = w + xi + yj + zk

其中,w 是实部,x、y、z 是虚部。它用来表示旋转,比欧拉角更优雅,没有万向锁问题,而且计算效率高。

四元数和旋转矩阵可以互相转换。比如,从四元数到旋转矩阵的公式是:

C = [[1-2(y²+z²), 2(xy-wz),   2(xz+wy)],
     [2(xy+wz),   1-2(x²+z²), 2(yz-wx)],
     [2(xz-wy),   2(yz+wx),   1-2(x²+y²)]]

看着复杂?其实你不需要背。我写代码时都是直接调库,但理解原理很重要。

我的习惯:在 IMU 数据融合(比如卡尔曼滤波)中,我全部用四元数做状态量。只在最后输出给用户时,才转成欧拉角。这样既避免了万向锁,又方便调试。

3.5 知识体系总览

下面这张图,是我自己总结的坐标系与姿态表示的知识结构。你看一眼,就能明白它们之间的关系:

坐标系与姿态表示知识体系 导航坐标系 (n系) NED / ENU 载体坐标系 (b系) 前-右-下 姿态表示 欧拉角 (φ, θ, ψ) 旋转矩阵 C_b^n 四元数 q 三者可以互相转换,根据场景选择最合适的表示 核心:IMU数据(b系) → 姿态变换 → 导航信息(n系)

3.6 实战中的选择建议

说了这么多,到底该用哪种?我根据经验给你个参考:

场景 推荐表示 原因
人机交互(如遥控器) 欧拉角 直观,容易理解
姿态控制(如飞控) 四元数 无万向锁,计算快
坐标变换(如导航解算) 旋转矩阵 方便向量运算
数据融合(如卡尔曼滤波) 四元数 状态量连续,无奇异性

总结一下:坐标系是基础,姿态表示是工具。搞懂了它们,IMU 的数据才能变成有用的导航信息。我刚开始做惯导时,花了一周时间才彻底搞明白坐标系变换。别急,慢慢来,这些概念会越来越清晰的。


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