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 约定)。
四、手算案例:正交性与复合顺序验证
取 φ=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),可及早发现符号或顺序错误。三种表示各有适用场景:矩阵便于矢量变换与组合,欧拉角便于人机交互与直观判读,四元数便于高频递推与避免死锁。掌握它们之间的双向转换与正交性校验,是后续姿态解算与多传感器融合的基础。