2. 姿态描述与坐标系基础

AHRS(Attitude and Heading Reference System,姿态航向参考系统)输出的核心量是姿态,而姿态本身并不是一个“绝对量”,它必须依附于两个坐标系之间的相对关系来定义。因此,在写任何一行姿态解算代码之前,先把坐标系约定和姿态表示方式固定下来,是整门课程中最不能跳过的一步。本节围绕机体坐标系、导航坐标系、欧拉角、方向余弦矩阵和四元数这五个对象,说明它们各自表示什么、彼此如何转换,以及在AHRS中应当如何选用。

一、两个坐标系:姿态的“参照物”

机体坐标系(Body Frame,记作 b 系)固连在飞行器上,随飞行器一起运动。工程上通常取:原点位于飞行器质心,xb 轴指向机头前方,yb 轴指向右翼,zb 轴指向机腹下方,构成右手系。这个“前—右—下”约定在航空领域最常用,它与“北—东—地”的导航坐标系配合时,俯仰、滚转、偏航的正负号最直观。

导航坐标系(Navigation Frame,记作 n 系)是姿态的参考基准。对于近地、短时、小范围的AHRS,通常取当地水平坐标系:原点位于载体所在位置,xn 轴指北,yn 轴指东,zn 轴沿当地垂线指向地心,即“北—东—地”(NED)右手系。若采用“东—北—天”(ENU)约定,则所有角度符号都会相应改变,因此全文必须统一约定,中途不得混用。本节后续内容一律采用 NED 约定。

姿态的本质,就是 b 系相对于 n 系的旋转关系。把这个旋转关系用不同数学对象表达出来,就得到欧拉角、方向余弦矩阵和四元数三种等价形式。

二、欧拉角:最直观但最脆弱

欧拉角把任意旋转分解为三次绕坐标轴的连续转动。在航空中采用 Z-Y-X 顺序(即先偏航、再俯仰、最后滚转),得到三个角:

  • 偏航角 ψ(yaw):绕 zn 轴旋转,机头相对正北的夹角,右偏为正,范围通常取 (−180°, 180°];
  • 俯仰角 θ(pitch):绕旋转后的 y 轴转动,机头相对水平面的夹角,抬头为正,范围 (−90°, 90°);
  • 滚转角 φ(roll):绕旋转后的 x 轴转动,右翼下沉为正,范围 (−180°, 180°]。

欧拉角的最大优点是物理意义明确,飞行员和地面站都直接读它。但它有两个致命问题:一是万向节死锁,当俯仰角接近 ±90° 时,偏航与滚转的旋转轴重合,二者无法区分,解算会出现奇异;二是三角函数运算量大,且姿态更新时若直接对欧拉角做积分,误差会随姿态变化非线性累积。因此欧拉角适合作为输入输出接口,不适合作为AHRS内部递推的状态量。

三、方向余弦矩阵:旋转的完整代数表达

方向余弦矩阵(DCM,又称旋转矩阵)Cbn 是一个 3×3 正交矩阵,其元素是 b 系各轴与 n 系各轴之间夹角的余弦。它把机体坐标下的矢量 vb 变换到导航系:vn = Cbn vb。按 Z-Y-X 顺序,Cbn 可写成三个基本旋转矩阵的乘积:

C_b^n = Rz(ψ) · Ry(θ) · Rx(φ)

        [ cψcθ   cψsθsφ−sψcφ   cψsθcφ+sψsφ ]
      = [ sψcθ   sψsθsφ+cψcφ   sψsθcφ−cψsφ ]
        [ −sθ    cθsφ          cθcφ          ]

其中 c 表示 cos,s 表示 sin。

DCM 没有奇异点,姿态更新时可直接用角速度的反对称矩阵左乘:Ċbn = Cbn · [ωb×],其中 [ωb×] 是机体角速度构成的反对称矩阵。代价是需要维护 9 个元素,且数值积分会破坏正交性,必须周期性做正交化(如 Gram-Schmidt 或 SVD 修正)。在AHRS中,DCM 常用于把加速度计、磁力计的观测矢量从 b 系转到 n 系做比对。

四、四元数:AHRS 内部递推的首选

四元数用一个标量和三个矢量分量表示旋转,记作 q = [q0, q1, q2, q3]T,满足 q02+q12+q22+q32=1。它只有 4 个参数,无奇异,更新方程是双线性形式,计算量远小于 DCM,因此成为绝大多数AHRS内部姿态递推的状态量。其微分方程为:

q̇ = 0.5 · q ⊗ ω_b

其中 ω_b = [0, ωx, ωy, ωz] 为机体角速度四元数,
⊗ 表示四元数乘法。

离散实现时,常用一阶或二阶龙格-库塔积分,例如采样周期 T 下:qk+1 = qk + 0.5·T·(qk⊗ωb),随后归一化。四元数本身不直观,但可以随时转成 DCM 或欧拉角供显示与判断。

五、三种表示的转换关系

三者是同一旋转的不同“语言”,转换关系必须记牢。由四元数到 DCM:

C_b^n =
[ 1−2(q2²+q3²)   2(q1q2−q0q3)   2(q1q3+q0q2) ]
[ 2(q1q2+q0q3)   1−2(q1²+q3²)   2(q2q3−q0q1) ]
[ 2(q1q3−q0q2)   2(q2q3+q0q1)   1−2(q1²+q2²) ]

由 DCM 到欧拉角(NED、Z-Y-X):θ = −arcsin(C31),φ = arctan2(C32, C33),ψ = arctan2(C21, C11)。由欧拉角到四元数则按 Z-Y-X 顺序构造。实际工程中,AHRS 内部用四元数递推,输出前转成欧拉角,观测更新时转成 DCM,三者各司其职。

AHRS 姿态表示与转换关系(NED / Z-Y-X 约定) 机体坐标系 b x_b 前 y_b 右 z_b 下 导航坐标系 n x_n 北 y_n 东 z_n 地 姿态 = b 系相对 n 系的旋转 Z-Y-X 顺序:ψ → θ → φ C_b^n = Rz(ψ)·Ry(θ)·Rx(φ) v^n = C_b^n · v^b 欧拉角 (φ, θ, ψ) 直观、可读 θ→±90° 万向节死锁 适合输入输出接口 方向余弦矩阵 C_b^n 3×3 正交矩阵,无奇异 Ċ = C·[ω×],需正交化 适合矢量坐标变换 四元数 q 4 参数,无奇异 q̇ = 0.5·q⊗ω_b AHRS 内部递推首选 构造 转换 矩阵元素 反三角 AHRS 典型分工: 内部状态用四元数递推 → 观测更新时转 DCM 比对加速度/磁力计 → 输出前转欧拉角供显示与判断 注意:全程统一 NED 与 Z-Y-X 约定,切换参照系必须显式说明,否则符号与方向会整体出错。

六、在AHRS中的实际选用与转换流程

把上述关系落到一个具体实现上,典型流程是:初始化时由加速度计和磁力计计算初始姿态,得到初始四元数 q0;进入循环后,每个采样周期读取陀螺仪角速度 ωb,用 q̇ = 0.5·q⊗ωb 递推并归一化;随后把 q 转成 Cbn,将加速度计测得的重力方向、磁力计测得的磁北方向从 b 系转到 n 系,与理论重力矢量 [0,0,1]T 和理论磁矢量比对,得到误差;用该误差修正陀螺零偏或直接修正四元数;最后把修正后的 q 转成欧拉角输出。

约定检查清单:① 机体轴是否为前—右—下;② 导航轴是否为北—东—地;③ 欧拉角旋转顺序是否为 Z-Y-X;④ 偏航、俯仰、滚转的正负号定义是否与显示端一致;⑤ 四元数是否采用 q0 为标量的排列。这五项只要有一项不一致,姿态输出就会出现方向翻转或角度跳变。
常见错误:把 ENU 的导航系与 NED 的欧拉角公式混用,会导致俯仰角符号相反、偏航角相差 90°;四元数递推后忘记归一化,会使模长漂移并最终导致 DCM 不再正交;直接用欧拉角积分更新姿态,在大俯仰机动时会出现死锁与剧烈跳变。

理解这五种对象的分工,是后续姿态解算、传感器融合与误差分析的基础。欧拉角负责“给人看”,DCM 负责“做变换”,四元数负责“做递推”,三者通过固定的转换关系互相支撑,而坐标系约定则是这一切能够成立的前提。