2、坐标系基础:地球坐标系、导航坐标系、载体坐标系、坐标系转换原理、欧拉角与四元数

2.1 引言:为什么需要坐标系?

在捷联惯导系统中,惯性测量单元(IMU)直接测量的是相对于惯性空间的角速度和比力。然而,导航解算最终需要输出载体相对于地球的位置、速度和姿态。因此,我们必须定义一系列坐标系,并理解如何在这些坐标系之间进行转换。坐标系是描述物理量(如位置、速度、加速度)的数学基准,也是惯导解算的基石。

2.2 常用坐标系定义

2.2.1 地球坐标系(e系,ECEF)

定义:地球坐标系(Earth-Centered Earth-Fixed,ECEF)是一个原点位于地球质心,且与地球固连的直角坐标系。

  • 原点:地球质心。
  • X轴:指向本初子午线与赤道的交点。
  • Z轴:指向地球北极(协议地球极,CTP)。
  • Y轴:与X、Z轴构成右手直角坐标系(指向东经90度方向)。

特点:该坐标系随地球自转,因此地面上的静止点在该系下的坐标是固定的。常用于GPS定位和全球位置表示。

2.2.2 导航坐标系(n系)

定义:导航坐标系是惯导解算时使用的参考坐标系。在捷联惯导中,通常采用“东北天”(ENU)地理坐标系。

  • 原点:载体所在位置(通常为IMU中心)。
  • X轴(E轴):指向当地东向。
  • Y轴(N轴):指向当地北向。
  • Z轴(U轴):指向当地天向(垂直于参考椭球面向上)。

特点:n系是解算速度、位置和姿态的“工作台”。IMU输出的比力需要转换到n系下进行积分,才能得到速度增量。

2.2.3 载体坐标系(b系)

定义:载体坐标系与运载体(如飞机、导弹、车辆)固连。

  • 原点:载体质心(或IMU安装中心)。
  • X轴:指向载体前进方向(机头方向)。
  • Y轴:指向载体右侧(右翼方向)。
  • Z轴:指向载体下方(构成右手系,即“前-右-下”)。

特点:IMU的陀螺仪和加速度计直接测量的是b系下的角速度和比力。因此,所有原始测量数据都是在b系下表达的。

2.3 坐标系转换原理

坐标系转换的核心是方向余弦矩阵(Direction Cosine Matrix, DCM),也称为旋转矩阵。一个向量在不同坐标系下的投影可以通过一个正交矩阵相乘得到。

例如,将b系下的向量 v^b 转换到n系下:

v^n = C_b^n · v^b

其中 C_b^n 是从b系到n系的旋转矩阵。该矩阵的每一行是b系坐标轴在n系下的方向余弦。

重要性质:旋转矩阵是正交矩阵,其逆等于其转置:(C_b^n)^{-1} = C_n^b = (C_b^n)^T

2.4 姿态表示方法:欧拉角与四元数

旋转矩阵虽然有9个元素,但只有3个自由度。为了更高效地表示和更新姿态,工程中常用欧拉角和四元数。

2.4.1 欧拉角

定义:欧拉角通过三次绕不同轴的旋转来描述b系相对于n系的姿态。常用的旋转顺序为:Z-Y-X(即航向-俯仰-横滚)。

  • 航向角(ψ, Yaw):绕Z轴旋转,范围通常为0°~360°或-180°~180°。
  • 俯仰角(θ, Pitch):绕Y轴旋转,范围-90°~+90°。
  • 横滚角(φ, Roll):绕X轴旋转,范围-180°~+180°。

优点:物理意义直观,易于理解。

缺点:存在“万向锁”问题(当俯仰角为±90°时,航向和横滚无法区分),且三角函数计算在实时系统中效率较低。

2.4.2 四元数

定义:四元数是一个超复数,由一个实部和三个虚部组成:q = q0 + q1·i + q2·j + q3·k。在姿态表示中,它代表绕一个单位向量旋转一定角度。

优点:

  • 无奇点(无万向锁问题)。
  • 计算效率高(仅需4个参数,且更新时只需简单的乘法和加法)。
  • 易于插值。

缺点:物理意义不如欧拉角直观。

2.4.3 欧拉角与四元数的转换

在惯导解算中,我们通常用四元数进行姿态更新,但在输出给用户或进行可视化时,需要转换为欧拉角。

四元数 → 欧拉角(Z-Y-X顺序):

import math

def quaternion_to_euler(q):
    """
    将四元数转换为欧拉角(弧度)
    q: [q0, q1, q2, q3]
    返回: [roll, pitch, yaw] 单位:弧度
    """
    q0, q1, q2, q3 = q

    # 计算俯仰角(防止万向锁)
    sin_pitch = 2.0 * (q0 * q2 - q3 * q1)
    if abs(sin_pitch) >= 1.0:
        pitch = math.copysign(math.pi / 2.0, sin_pitch)
    else:
        pitch = math.asin(sin_pitch)

    # 计算横滚角
    sin_roll_cos_pitch = 2.0 * (q0 * q1 + q2 * q3)
    cos_roll_cos_pitch = 1.0 - 2.0 * (q1 * q1 + q2 * q2)
    roll = math.atan2(sin_roll_cos_pitch, cos_roll_cos_pitch)

    # 计算航向角
    sin_yaw_cos_pitch = 2.0 * (q0 * q3 + q1 * q2)
    cos_yaw_cos_pitch = 1.0 - 2.0 * (q2 * q2 + q3 * q3)
    yaw = math.atan2(sin_yaw_cos_pitch, cos_yaw_cos_pitch)

    return [roll, pitch, yaw]

欧拉角 → 四元数(Z-Y-X顺序):

def euler_to_quaternion(roll, pitch, yaw):
    """
    将欧拉角(弧度)转换为四元数
    返回: [q0, q1, q2, q3]
    """
    cr = math.cos(roll * 0.5)
    sr = math.sin(roll * 0.5)
    cp = math.cos(pitch * 0.5)
    sp = math.sin(pitch * 0.5)
    cy = math.cos(yaw * 0.5)
    sy = math.sin(yaw * 0.5)

    q0 = cr * cp * cy + sr * sp * sy
    q1 = sr * cp * cy - cr * sp * sy
    q2 = cr * sp * cy + sr * cp * sy
    q3 = cr * cp * sy - sr * sp * cy

    return [q0, q1, q2, q3]

2.5 本章小结

坐标系 符号 原点 主要用途
地球坐标系 e系 地心 全球位置基准,GPS输出
导航坐标系 n系 载体位置 惯导解算(速度、位置积分)
载体坐标系 b系 载体质心 IMU原始测量

理解这三个坐标系以及它们之间的转换关系(通过旋转矩阵、欧拉角或四元数),是后续进行速度积分和位置解算的前提。在下一章中,我们将利用本章的坐标系知识,推导IMU测量值如何转换到导航系下进行积分。