3. 坐标系旋转的数学表示与运算规则

在水下导航中,我们经常需要把一个矢量(速度、位置增量、重力、磁力)从一个坐标系换算到另一个坐标系。无论采用哪种数学工具,本质都是同一个刚体旋转。本节围绕三种最常用的表示——方向余弦矩阵、欧拉角、四元数——讲清它们的构造、运算规则和相互转换,并用可手算的数值案例验证旋转矩阵的正交性与复合旋转顺序。

一、方向余弦矩阵:旋转的“标准答案”

设载体坐标系 b 相对导航坐标系 n 的姿态由旋转矩阵 R_nb 描述,其列向量是 b 系三个单位轴在 n 系中的投影,因此矩阵元素就是两组基向量之间的方向余弦。对任意矢量有 v_n = R_nb · v_b,反向变换用转置 R_bn = R_nb^T。这一转置即逆的性质,正是正交矩阵的定义:R^T R = I,且 det(R) = +1。

绕 x、y、z 轴旋转角 θ 的基本矩阵为:

Rx(θ) = [1, 0, 0; 0, cosθ, sinθ; 0, -sinθ, cosθ]
Ry(θ) = [cosθ, 0, -sinθ; 0, 1, 0; sinθ, 0, cosθ]
Rz(θ) = [cosθ, sinθ, 0; -sinθ, cosθ, 0; 0, 0, 1]

注意这里采用“坐标变换”约定(被动旋转),与“矢量旋转”约定(主动旋转)互为转置,工程中必须先声明约定,全文保持一致。

二、欧拉角与旋转顺序

欧拉角用三个角描述姿态,但必须绑定旋转顺序,否则同一组角值对应不同姿态。水下惯导常用 Z-Y-X(即航向-俯仰-横滚)顺序:先绕 z 轴转航向 ψ,再绕新 y 轴转俯仰 θ,最后绕新 x 轴转横滚 φ。按此顺序复合:

R_nb = Rz(ψ) · Ry(θ) · Rx(φ)

顺序不可交换:Rz·Ry ≠ Ry·Rz。当俯仰接近 ±90° 时出现万向节死锁,航向与横滚无法分离,这是欧拉角在大姿态机动下的固有缺陷,也是四元数被引入的直接原因。

三、四元数与相互转换

单位四元数 q = [q0, q1, q2, q3](标量在前)表示绕单位轴 u 旋转角 α:q0 = cos(α/2),[q1,q2,q3] = u·sin(α/2)。四元数乘法对应旋转复合,且无死锁、只需 4 个参数并满足单位约束。由四元数到旋转矩阵:

R = [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²)]

由 Z-Y-X 欧拉角构造四元数:

q0 = cos(φ/2)cos(θ/2)cos(ψ/2) + sin(φ/2)sin(θ/2)sin(ψ/2)
q1 = sin(φ/2)cos(θ/2)cos(ψ/2) - cos(φ/2)sin(θ/2)sin(ψ/2)
q2 = cos(φ/2)sin(θ/2)cos(ψ/2) + sin(φ/2)cos(θ/2)sin(ψ/2)
q3 = cos(φ/2)cos(θ/2)sin(ψ/2) - sin(φ/2)sin(θ/2)cos(ψ/2)

反向由矩阵提取欧拉角:θ = -asin(R31),φ = atan2(R32, R33),ψ = atan2(R21, R11)(对应上述 Z-Y-X 约定)。

姿态表示与转换关系(Z-Y-X 约定) 方向余弦矩阵 R 9 参数 · 正交约束 R^T R = I, det=+1 欧拉角 (φ,θ,ψ) 3 参数 · 直观 存在万向节死锁 四元数 q 4 参数 · 单位约束 无死锁 · 适合递推 提取 Rz·Ry·Rx 半角公式 atan2 反解 R ↔ q 直接互转(无需经过欧拉角) 手算验证:φ=0°, θ=0°, ψ=90°(仅航向旋转) R = Rz(90°) = [0, 1, 0; -1, 0, 0; 0, 0, 1] 正交性:R·R^T = I ✓ det(R) = 0·0 - 1·(-1) = +1 ✓ 复合顺序:Rz(90°)·Rx(90°) ≠ Rx(90°)·Rz(90°),验证不可交换

四、手算案例:正交性与复合顺序验证

取 φ=0°、θ=0°、ψ=90°,则 R = Rz(90°) = [0,1,0; -1,0,0; 0,0,1]。计算 R·R^T:第一行乘第一列得 0²+1²+0²=1,第一行乘第二列得 0·(-1)+1·0+0·0=0,依此类推得到单位阵,正交性成立;行列式 0·0 - 1·(-1) = 1,满足右手系要求。

再验证顺序:设先航向 90° 再横滚 90°,R1 = Rz(90°)·Rx(90°);交换为 R2 = Rx(90°)·Rz(90°)。手算 R1 第一行第一列为 0·1 + 1·0 + 0·0 = 0,而 R2 对应元素为 1·0 + 0·(-1) + 0·0 = 0,看似相同,但比较第一行第二列:R1 得 0·0 + 1·0 + 0·(-1) = 0,R2 得 1·1 + 0·0 + 0·0 = 1,两者不同,说明复合顺序确实影响结果。工程上必须把顺序写进接口文档,避免上下游模块各自假设。

实操建议:在代码中统一用四元数做姿态递推与插值,仅在显示和人工输入时转成欧拉角;每次转换后回代校验 R^T R ≈ I(容差 1e-6),可及早发现符号或顺序错误。
常见错误:把主动旋转矩阵直接当作坐标变换矩阵使用,导致结果整体转置;或在 Z-Y-X 与 X-Y-Z 之间混用提取公式,使横滚与航向互换。转换前务必确认约定与顺序。

三种表示各有适用场景:矩阵便于矢量变换与组合,欧拉角便于人机交互与直观判读,四元数便于高频递推与避免死锁。掌握它们之间的双向转换与正交性校验,是后续姿态解算与多传感器融合的基础。