数学基础:坐标系定义与姿态描述方法

姿态解算与稳定控制的核心,是回答“飞行器/载体现在相对于参考系转了多少、朝向哪里”这一基本问题。无论是四旋翼无人机、机械臂末端,还是惯性测量单元(IMU)驱动的云台,其控制律设计都建立在精确的姿态描述之上。本章将系统梳理机体坐标系与惯性坐标系的定义、欧拉角、旋转矩阵、四元数、方向余弦矩阵(DCM)的数学本质,并给出工程中最常用的相互转换方法与注意事项。这些内容不仅是后续卡尔曼滤波、互补滤波的基础,也是理解“姿态”这一抽象概念从物理世界到数学表达的关键桥梁。

姿态描述方法关系与转换路径图 惯性坐标系 (i系) 地球固连 / NED 机体坐标系 (b系) 前右下 / 右前上 姿态描述方法 欧拉角 (Roll/Pitch/Yaw) 旋转矩阵 (C_b^n) 四元数 (q0+q1i+q2j+q3k) 定义基准 旋转映射 欧拉角 ↔ 旋转矩阵 R = Rz(ψ)·Ry(θ)·Rx(φ) φ=atan2(R21,R11) θ=-asin(R31) ψ=atan2(R32,R33) 注意:万向锁时需特殊处理 四元数 ↔ 旋转矩阵 R = f(q0,q1,q2,q3) q0=0.5·sqrt(1+R11+R22+R33) q1=(R32-R23)/(4q0) q2=(R13-R31)/(4q0) 需归一化处理 欧拉角 ↔ 四元数 q = q_yaw·q_pitch·q_roll φ=atan2(2(q0q1+q2q3), 1-2(q1²+q2²)) θ=asin(2(q0q2-q3q1)) 工程中最常用转换 DCM = 旋转矩阵的工程别名,本质相同;四元数无万向锁问题,计算量小

2.1 坐标系定义:惯性系与机体系

核心原理:姿态描述必须建立在明确的坐标系基准之上。惯性坐标系(i系)是描述载体运动与姿态的参考基准,通常选取地球固连坐标系(NED:北东地)或地心惯性系(ECI)。在无人机、机器人等近地面应用中,NED坐标系最为常用:X轴指向北、Y轴指向东、Z轴指向地心。机体坐标系(b系)则固连于载体本身,原点位于载体质心,通常定义X轴沿机体纵轴向前(机头方向)、Y轴沿机体右翼、Z轴沿机体竖轴向下(右手定则)。

判断方法:工程中需明确区分“载体姿态”与“载体位置”。姿态描述的是b系相对于i系的角位置关系,而位置描述的是b系原点在i系中的坐标。两者独立但耦合——姿态影响加速度计测量值的分解,位置变化又通过旋转矩阵影响导航解算。

实战要点:在飞控代码中,坐标系定义混乱是导致姿态解算错误的头号原因。建议在代码注释中明确写出“当前使用的惯性系为NED,机体轴定义遵循右手定则,X前Y右Z下”,并在初始化时进行坐标系一致性检查。

2.2 欧拉角:直观但存在万向锁

核心原理:欧拉角通过三次绕不同轴的旋转来描述姿态,常用顺序为Z-Y-X(偏航ψ→俯仰θ→横滚φ)。其物理意义直观:横滚角φ为绕机体X轴旋转,俯仰角θ为绕机体Y轴旋转,偏航角ψ为绕机体Z轴旋转。旋转矩阵由三次基本旋转矩阵连乘得到:C_b^n = Rz(ψ)·Ry(θ)·Rx(φ)。

操作流程:从旋转矩阵提取欧拉角时,需注意象限判断。标准公式为:φ = atan2(R21, R11),θ = -asin(R31),ψ = atan2(R32, R33)。但工程中更推荐使用atan2函数而非asin/acos,以避免角度范围模糊。

欧拉角旋转轴范围工程含义
横滚φX轴±180°左右倾斜
俯仰θY轴±90°抬头低头
偏航ψZ轴±180°机头朝向
万向锁风险:当俯仰角接近±90°时,横滚与偏航的旋转轴重合,导致自由度丢失。此时旋转矩阵退化,欧拉角解算出现奇异。在姿态控制中,若飞行器可能垂直爬升或倒飞,必须切换至四元数描述。

2.3 旋转矩阵与方向余弦矩阵(DCM)

核心原理:旋转矩阵(又称方向余弦矩阵)是一个3×3正交矩阵,其元素为两个坐标系基向量之间的方向余弦。DCM将b系向量映射到i系:v_i = C_b^n · v_b。其逆矩阵等于转置矩阵(正交性),即C_n^b = (C_b^n)^T。DCM的9个元素存在6个约束条件(正交性),因此实际自由度为3。

判断方法:工程中判断DCM是否正确,可检查其行列式是否等于1(允许微小误差),以及是否满足C·C^T = I。若误差累积导致正交性破坏,需进行正交化修正(如Gram-Schmidt过程)。

案例拆解:某云台控制项目使用DCM进行姿态反馈。初始时DCM由欧拉角初始化,运行10分钟后发现姿态漂移。排查发现:积分过程中未对DCM进行正交化修正,导致矩阵逐渐失去正交性。解决方案:每50ms执行一次正交化修正,并重新归一化。修正后漂移量降低80%。

2.4 四元数:高效无奇异

核心原理:四元数由1个实部和3个虚部组成:q = q0 + q1·i + q2·j + q3·k,满足i²=j²=k²=ijk=-1。单位四元数(模长为1)可表示三维旋转,其优点是无万向锁问题、计算量小(仅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²)
]

操作流程:四元数更新采用一阶龙格-库塔积分:q_dot = 0.5 · q ⊗ ω,其中ω为陀螺仪角速度四元数(实部为0)。每次更新后必须归一化,防止模长漂移。

经验提醒:四元数乘法不满足交换律,旋转顺序为q_total = q_yaw ⊗ q_pitch ⊗ q_roll(从右到左)。在代码中务必保持一致的乘法顺序,否则姿态会完全错误。

2.5 相互转换与工程选型

核心原理:三种描述方法本质等价,但适用场景不同。欧拉角适合人机交互显示;DCM适合需要明确物理意义的场合;四元数适合实时解算与滤波。转换关系如下:

  • 欧拉角→四元数:分别计算三个基本旋转四元数,再按Z-Y-X顺序相乘。
  • 四元数→欧拉角:利用四元数元素直接计算:φ = atan2(2(q0q1+q2q3), 1-2(q1²+q2²)),θ = asin(2(q0q2-q3q1)),ψ = atan2(2(q0q3+q1q2), 1-2(q2²+q3²))。
  • DCM↔四元数:通过矩阵迹与元素关系转换,注意当q0接近0时需采用其他元素计算。
描述方法参数数量万向锁计算量适用场景
欧拉角3有小显示、简单控制
DCM9无中需要明确物理意义
四元数4无小滤波、实时解算
常见误区:① 将欧拉角直接用于积分——欧拉角微分方程存在奇异且非线性强,应使用四元数或DCM积分;② 忽略四元数归一化——模长漂移会导致旋转矩阵非正交,最终姿态发散;③ 混淆旋转顺序——不同行业(航空、航海、机器人)可能采用不同旋转顺序,必须明确约定。

2.6 实战场景:IMU姿态初始化与更新

案例背景:某四旋翼飞控使用BMI088惯性传感器,需在起飞前完成姿态初始化,并在飞行中以1kHz频率更新姿态。初始姿态由加速度计(测横滚俯仰)和磁力计(测偏航)确定,飞行中由陀螺仪积分。

操作步骤:

  1. 静态初始化:采集100组加速度计数据求平均,计算初始横滚俯仰角:φ = atan2(ay, az),θ = atan2(-ax, sqrt(ay²+az²))。
  2. 磁力计校准:旋转飞行器采集磁力计数据,拟合椭球参数消除硬磁/软磁干扰,计算偏航角。
  3. 四元数初始化:将欧拉角转换为四元数,作为滤波初值。
  4. 实时更新:读取陀螺仪角速度,执行四元数积分并归一化,再转换为欧拉角供控制律使用。

结果对比:采用四元数更新后,10分钟悬停测试姿态漂移小于2°,而直接使用欧拉角积分漂移超过15°。复盘发现,四元数避免了万向锁问题,且归一化操作有效抑制了积分误差累积。

总结复盘:姿态描述方法的选择直接影响系统稳定性。工程建议:内部解算统一使用四元数,仅在数据输出或调试时转换为欧拉角;所有转换函数需经过单元测试验证;在代码中增加坐标系与旋转顺序的宏定义,防止团队协作时出现歧义。