3. 坐标系与姿态表示

在六轴IMU采集与姿态测量中,传感器输出的加速度和角速度都是相对于自身安装位置测量的。要让这些数据具有物理意义,必须先明确“相对于哪个坐标系”,再选择一种姿态表示方法把旋转关系描述出来。本节围绕载体坐标系、导航坐标系、欧拉角、方向余弦矩阵和四元数五个核心概念展开,并给出它们之间的转换关系。

一、两个基础坐标系:载体坐标系与导航坐标系

载体坐标系(Body Frame,记作 b 系)固定在运动载体上,原点通常取在IMU的测量中心。三轴方向与传感器敏感轴一致:x 轴指向载体前方,y 轴指向右方,z 轴指向下方(也可按右手系定义为前-右-下或前-右-上,需与器件手册一致)。IMU输出的加速度、角速度默认都在 b 系下表达。

导航坐标系(Navigation Frame,记作 n 系)是姿态解算的参考基准,常见选择为“东北天”(ENU)或“北东地”(NED)。n 系原点可固定于初始位置,三轴分别指向地理东、北、天(或北、东、地)。姿态测量的本质,就是求取 b 系相对于 n 系的旋转关系。

记忆要点:b 系随载体动,n 系相对地理静止;IMU 原始数据在 b 系,姿态角在 n 系中才有直观含义。

二、姿态的四种表示方法

欧拉角用三个角度描述旋转,最常用的是 Z-Y-X 顺序:先绕 z 轴偏航(Yaw,ψ),再绕 y 轴俯仰(Pitch,θ),最后绕 x 轴横滚(Roll,φ)。欧拉角直观、易读,但存在万向节死锁:当俯仰角接近 ±90° 时,偏航与横滚耦合,解算会退化。

方向余弦矩阵(DCM,也称旋转矩阵 R)是一个 3×3 正交矩阵,其元素为两坐标系基向量之间的方向余弦。它无奇异点,可直接用于向量坐标变换:vn = Rbn · vb。缺点是含 9 个参数、存在冗余,且数值积分后需正交化。

四元数用一个实部和三个虚部表示旋转,q = [q0, q1, q2, q3]T,满足单位约束 q02+q12+q22+q32=1。它无奇异、计算量小、适合递推更新,是姿态解算中最常用的内部表示。

姿态表示方法及其相互转换关系 载体坐标系 b x: 前 y: 右 z: 下 IMU 原始数据所在系 aᵇ, ωᵇ 导航坐标系 n 东 北 天 (ENU) 姿态参考基准 aⁿ, 姿态角 欧拉角 (φ, θ, ψ) 直观,有万向节死锁 方向余弦矩阵 R (3×3) 无奇异,需正交化 四元数 q (4 维) 无奇异,适合递推 R = Rz(ψ)Ry(θ)Rx(φ) R ↔ q 双向转换 欧拉角 ↔ 四元数 vⁿ = R·vᵇ 姿态输出 转换公式速查 欧拉角 → 四元数:q₀=cos(φ/2)cos(θ/2)cos(ψ/2)+sin(φ/2)sin(θ/2)sin(ψ/2),其余分量按 Z-Y-X 顺序展开 四元数 → 欧拉角:φ=atan2(2(q₀q₁+q₂q₃), 1−2(q₁²+q₂²)),θ=asin(2(q₀q₂−q₃q₁)),ψ=atan2(2(q₀q₃+q₁q₂), 1−2(q₂²+q₃²)) 四元数 → DCM:R 的元素由 q₀,q₁,q₂,q₃ 的二次组合构成,例如 R₁₁=1−2(q₂²+q₃²) DCM → 四元数:由矩阵迹 tr(R) 求 q₀,再按最大对角元分支求其余分量,保证数值稳定

三、相互转换的核心流程

实际工程中,姿态解算通常以四元数为内部状态,按以下流程完成表示转换:

  1. 初始化:由加速度计在静止时估计初始横滚与俯仰,由磁力计或已知航向确定偏航,得到初始欧拉角。
  2. 转四元数:将初始欧拉角按 Z-Y-X 顺序转换为单位四元数 q₀。
  3. 递推更新:用陀螺仪角速度 ω 构造四元数微分方程 q̇ = 0.5 · q ⊗ ω,积分得到新四元数并归一化。
  4. 输出转换:需要显示时把四元数转欧拉角;需要做向量旋转时把四元数转 DCM。
// 四元数微分方程递推(简化示意)
q0 = q0 + 0.5 * dt * (-q1*wx - q2*wy - q3*wz);
q1 = q1 + 0.5 * dt * ( q0*wx + q2*wz - q3*wy);
q2 = q2 + 0.5 * dt * ( q0*wy - q1*wz + q3*wx);
q3 = q3 + 0.5 * dt * ( q0*wz + q1*wy - q2*wx);
// 归一化
norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
q0/=norm; q1/=norm; q2/=norm; q3/=norm;

四、四种表示方法对比

表示方法 参数个数 是否奇异 计算复杂度 典型用途
欧拉角 3 有(±90°死锁) 低 人机显示、航向输出
方向余弦矩阵 9 无 中 向量坐标变换、旋转计算
四元数 4 无 低 姿态递推、滤波融合

五、案例与常见误区

案例:无人机悬停姿态输出。飞控内部用四元数做互补滤波或卡尔曼滤波,每 1 ms 更新一次;对外通过 MAVLink 发送欧拉角供地面站显示;在控制律中把期望推力方向从 n 系转到 b 系时,则使用 DCM。三种表示各司其职,而不是互相替代。

误区一:欧拉角顺序混用。Z-Y-X 与 X-Y-Z 得到的矩阵完全不同,代码中必须与公式、器件手册保持一致,否则横滚和偏航会互换。

误区二:四元数不归一化。长时间积分后四元数模长漂移,会导致旋转矩阵不再正交,姿态出现缩放和扭曲,必须每步归一化。

误区三:把 b 系与 n 系数据直接相加。加速度计输出在 b 系,重力参考在 n 系,必须先做 R·aᵇ 变换后再比较,否则倾角计算完全错误。

本节小结:b 系是传感器数据所在系,n 系是姿态参考系;欧拉角直观但有死锁,DCM 适合坐标变换,四元数适合递推更新。掌握“欧拉角 ↔ 四元数 ↔ DCM”的双向转换,是后续姿态解算与传感器融合的数学基础。