坐标系与姿态表示:导航坐标系、机体坐标系、欧拉角、旋转矩阵、四元数

IMU(惯性测量单元)输出的原始数据是加速度计和陀螺仪在机体坐标系下的测量值,而姿态解算、导航定位、控制决策等几乎所有上层应用,都需要在导航坐标系下完成。因此,理解坐标系定义以及姿态的数学表示方法,是进行IMU数据处理的第一步,也是后续滤波算法(如互补滤波、卡尔曼滤波)建模的基础。本节将系统梳理两种核心坐标系的定义与转换关系,并深入对比欧拉角、旋转矩阵、四元数三种姿态表示方法的数学原理、工程适用场景与相互转换方法。

坐标系定义 导航坐标系 (n系) 原点:载体质心 X:北向 (N) Y:东向 (E) Z:地向 (D) 机体坐标系 (b系) 原点:载体质心 X:机头方向 Y:右翼方向 Z:机体下方 旋转 姿态表示方法 欧拉角 直观但万向锁 旋转矩阵 9参数冗余 四元数 紧凑无奇异性 三者可相互转换,四元数最适合作业 IMU姿态解算链路 陀螺仪 角速度 (b系) 加速度计 比力 (b系) 姿态解算算法 互补滤波 / 卡尔曼滤波 / 梯度下降 姿态输出 四元数 → 欧拉角 / 旋转矩阵 典型应用 无人机姿态控制 · 机器人导航 · 手机方向检测 AR/VR头显 · 车辆稳定控制

3.1 导航坐标系与机体坐标系的定义与工程意义

3.1.1 核心原理:为什么需要两个坐标系?

IMU传感器(加速度计、陀螺仪、磁力计)直接固连在载体上,其测量轴与载体的几何轴对齐,因此原始数据天然定义在机体坐标系(body frame,b系)中。然而,用户关心的是载体相对于地面、地球或惯性空间的运动状态,这就需要引入导航坐标系(navigation frame,n系)。导航坐标系通常选取当地水平坐标系(如北-东-地,NED),其原点位于载体质心,X轴指向地理北向,Y轴指向东向,Z轴垂直于当地水平面向下。

两个坐标系之间的差异本质上是旋转关系。当载体姿态发生变化时,同一物理量(如重力加速度、地磁场矢量)在两个坐标系下的投影分量不同。姿态解算的核心任务,就是实时估计从b系到n系的旋转关系,从而将IMU测量值转换到导航坐标系下进行积分、融合和导航解算。

3.1.2 判断方法:如何选择坐标系约定?

工程实践中,坐标系的选择直接影响后续算法的复杂度。以下是常用约定:

  • NED(北-东-地):航空、无人机领域最常用,Z轴向下,与重力方向一致,便于高度解算。
  • ENU(东-北-天):机器人、自动驾驶领域常用,Z轴向上,与视觉SLAM的坐标习惯兼容。
  • 机体坐标系:X轴沿载体纵轴向前,Y轴向右,Z轴向下(右手定则),与NED构成右手系。
经验提醒:在项目启动前,务必明确并统一坐标系约定。常见的错误是混用NED和ENU,导致加速度积分方向错误、姿态角符号反转等难以排查的bug。建议在代码中定义常量并注释清楚。

3.1.3 案例拆解:坐标系定义错误导致的飞控异常

背景:某四旋翼无人机开发团队在移植开源飞控代码时,发现飞机起飞后迅速侧翻。排查过程中,地面站显示的姿态角在静止状态下正常,但一旦推油门,滚转角快速发散。

分析过程:检查代码发现,开源飞控默认使用NED坐标系,而团队在传感器驱动中误将加速度计的Z轴方向配置为向上(ENU习惯)。这导致重力加速度在n系中的投影符号错误,姿态解算中的补偿项方向相反,控制器输出正反馈,最终引发侧翻。

解决措施:将传感器安装方向与坐标系定义对齐,并在驱动层增加坐标轴重映射函数,确保加速度计输出与NED约定一致。修改后,无人机飞行稳定。

复盘:坐标系定义是IMU工程的第一道关口,任何不一致都会在闭环控制中被放大。建议在硬件调试阶段使用水平静止数据验证加速度计输出是否满足“Z轴约等于+1g(NED)”或“-1g(ENU)”的预期。

3.2 欧拉角:直观但存在万向锁问题

3.2.1 核心原理:三次基本旋转的合成

欧拉角通过三次绕不同坐标轴的旋转来描述姿态,常用的旋转顺序为Z-Y-X(偏航-俯仰-滚转,即yaw-pitch-roll)。设偏航角为ψ,俯仰角为θ,滚转角为φ,则从b系到n系的旋转矩阵可分解为:

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

其中Rz、Ry、Rx分别为绕Z、Y、X轴的基本旋转矩阵。欧拉角的物理意义直观,便于人机交互和可视化显示,是地面站、调试工具中最常用的姿态表示。

3.2.2 判断方法:万向锁的识别与规避

当俯仰角θ接近±90°时,偏航轴与滚转轴在空间中重合,系统丢失一个自由度,这种现象称为万向锁(Gimbal Lock)。此时,偏航角和滚转角无法唯一确定,且角速度到欧拉角速率的变换矩阵出现奇异(分母为cosθ)。

姿态表示参数数量奇异性计算效率适用场景
欧拉角3有(θ=±90°)高(三角函数)显示、调试、控制外环
旋转矩阵9无低(冗余)坐标变换、理论推导
四元数4无高(仅乘加)姿态解算、滤波、插值
风险提示:在飞行器做垂直爬升或倒飞等大机动动作时,俯仰角可能接近±90°,此时若使用欧拉角进行姿态控制,会导致控制量跳变、系统不稳定。务必在核心控制回路中使用四元数或旋转矩阵。

3.2.3 实战场景:欧拉角在姿态显示中的应用

在无人机地面站软件中,通常使用欧拉角实时显示飞行姿态。开发者需要将四元数转换为欧拉角,转换公式如下(Z-Y-X顺序):

roll  = atan2(2*(w*x + y*z), 1 - 2*(x*x + y*y))
pitch = asin(2*(w*y - z*x))
yaw   = atan2(2*(w*z + x*y), 1 - 2*(y*y + z*z))

注意,pitch的计算使用asin函数,当输入超出[-1,1]范围时(数值误差导致),会产生NaN。工程上应做钳位处理:pitch = asin(max(-1, min(1, 2*(w*y - z*x))))。

3.3 旋转矩阵:数学严谨但参数冗余

3.3.1 核心原理:方向余弦矩阵(DCM)

旋转矩阵(又称方向余弦矩阵,DCM)是一个3×3的正交矩阵,其列向量表示b系各轴在n系中的方向余弦。任意矢量在b系和n系之间的转换关系为:

v_n = R_nb * v_b

旋转矩阵的9个元素并非独立,它们满足正交约束(R^T R = I)和行列式为1的条件。旋转矩阵的优点是:无奇异性、可直接用于矢量旋转、组合旋转只需矩阵乘法。缺点是参数冗余,且随时间积分时需不断正交化修正,否则矩阵会逐渐偏离正交性。

3.3.2 操作流程:旋转矩阵的更新与正交化

在捷联惯导系统中,旋转矩阵的微分方程为:

dR/dt = R * Ω

其中Ω为陀螺仪角速度的反对称矩阵。数值积分后,矩阵会因积分误差失去正交性,需定期进行正交化修正:

  1. 计算误差矩阵:E = R^T * R - I
  2. 修正:R_corrected = R * (I - E/2)
  3. 重新归一化各列向量。
工程要点:虽然旋转矩阵在理论推导中非常优雅,但在嵌入式平台上,9个参数的更新和正交化计算量较大,且数值稳定性不如四元数。因此,现代IMU姿态解算几乎全部采用四元数作为内部状态量,仅在需要坐标变换时临时转换为旋转矩阵。

3.4 四元数:紧凑、无奇异、计算高效

3.4.1 核心原理:超复数与旋转的对应关系

四元数由一个实部和三个虚部组成:q = w + xi + yj + zk,其中w为标量部分,(x,y,z)为矢量部分。单位四元数(模长为1)可以表示三维空间中的旋转。设旋转轴为单位向量(u_x, u_y, u_z),旋转角为θ,则对应的四元数为:

q = [cos(θ/2), u_x*sin(θ/2), u_y*sin(θ/2), u_z*sin(θ/2)]

四元数具有以下优势:

  • 紧凑性:仅4个参数,无冗余。
  • 无奇异性:不存在万向锁问题。
  • 计算高效:乘法仅需16次乘加运算,比矩阵乘法快。
  • 易于插值:球面线性插值(SLERP)可实现平滑姿态过渡。

3.4.2 操作流程:四元数姿态更新与转换

四元数的姿态更新微分方程为:

dq/dt = 0.5 * q ⊗ ω

其中ω为陀螺仪角速度的四元数形式(实部为0),⊗表示四元数乘法。工程上常用一阶龙格-库塔法进行离散积分:

q_new = q + dt * 0.5 * q ⊗ ω

积分后需对四元数进行归一化处理,防止模长漂移。四元数与旋转矩阵的转换关系为:

R = [[1-2(y²+z²), 2(xy-wz), 2(xz+wy)],
     [2(xy+wz), 1-2(x²+z²), 2(yz-wx)],
     [2(xz-wy), 2(yz+wx), 1-2(x²+y²)]]

3.4.3 案例拆解:四元数在姿态解算中的完整闭环

背景:设计一款两轮自平衡机器人,要求姿态更新频率为500Hz,MCU主频168MHz,需在有限算力下实现高精度姿态估计。

方案设计:

  1. 陀螺仪输出角速度,转换为四元数增量,进行姿态预测。
  2. 加速度计输出比力,通过重力矢量对比,计算姿态误差。
  3. 采用互补滤波融合:q_fused = q_gyro * (1-α) + q_acc * α,其中α为权重系数(通常取0.02~0.1)。
  4. 输出四元数,同时转换为欧拉角用于显示和控制。

关键参数:陀螺仪零偏稳定性0.01°/s,加速度计噪声密度0.2mg/√Hz,互补滤波系数α=0.05。

结果:静态姿态误差小于0.5°,动态跟随延迟小于10ms,满足平衡控制需求。

复盘:四元数在整个解算过程中避免了欧拉角的奇异问题,且计算量仅为旋转矩阵的1/3左右。在资源受限的嵌入式平台上,四元数是姿态解算的首选表示。

3.5 三种表示方法的对比与工程选型建议

3.5.1 综合对比表

维度欧拉角旋转矩阵四元数
参数数量394
物理直观性★★★★★★★★★★
奇异性有(万向锁)无无
计算效率中(三角函数)低(冗余)高(乘加)
数值稳定性差(大角度时)需正交化需归一化
插值平滑性差差好(SLERP)
推荐场景人机交互显示理论推导、坐标变换滤波、控制、导航解算

3.5.2 工程选型建议

  • 内部状态量:一律使用四元数,避免奇异性和冗余。
  • 对外接口:根据需求输出欧拉角(显示)或旋转矩阵(坐标变换)。
  • 存储与传输:四元数4个浮点数即可完整表示姿态,适合无线传输和日志记录。
  • 多传感器融合:在卡尔曼滤波中,四元数作为状态向量可避免协方差矩阵奇异。
常见误区:部分开发者习惯在滤波算法中直接使用欧拉角作为状态量,这在俯仰角接近±90°时会导致滤波器发散。务必在算法内部使用四元数,仅在最终输出时转换。

3.5.3 总结复盘:坐标系与姿态表示的工程闭环

本节从IMU数据处理的源头出发,明确了导航坐标系与机体坐标系的定义和转换需求,深入剖析了欧拉角、旋转矩阵、四元数三种姿态表示方法的数学本质与工程特性。核心结论如下:

  1. 坐标系是前提:任何IMU数据都必须明确其参考坐标系,否则后续处理毫无意义。
  2. 四元数是核心:在姿态解算、滤波、控制等核心算法中,四元数是最优选择。
  3. 欧拉角用于交互:仅在需要人机交互或可视化时,将四元数转换为欧拉角。
  4. 旋转矩阵用于变换:当需要将矢量从b系转换到n系时,临时构建旋转矩阵。

掌握这些基础概念后,下一阶段将进入IMU误差分析与校准方法的学习,为后续滤波算法设计奠定数据质量基础。