第一章 坐标系与姿态表示:从零开始理解导航的“语言”

大家好,我是你们的老朋友。今天咱们正式开讲《多源传感器融合导航从零到一实战》的第一章。

说实话,我刚开始接触组合导航那会儿,最头疼的就是坐标系。什么地心地固系、导航系、载体系,还有欧拉角、四元数……一堆名词砸过来,人都是懵的。但后来我发现,坐标系其实就是导航的“语言”。你想想看,如果连说话的基本单位都搞不清楚,那后面的融合算法、卡尔曼滤波,根本没法聊。

所以这一章,咱们就把坐标系和姿态表示彻底讲透。我会结合自己踩过的坑,带你一步步建立直觉。

1.1 常用坐标系:导航世界的“地图”

先问大家一个问题:你在手机上导航,地图上的“北”是哪个北?

嗯,这个问题其实不简单。导航里常用的坐标系有三个,我一个个说。

1.1.1 地心地固系(ECEF)

地心地固系,英文叫 Earth-Centered Earth-Fixed,简称 ECEF。它的原点在地球质心,Z轴指向北极,X轴指向本初子午线与赤道的交点,Y轴按右手定则确定。

说白了,这个坐标系是跟着地球一起转的。你站在地面上不动,你在ECEF系里的坐标是不变的。

核心特点: 原点在地心,坐标系随地球自转。

我在做卫星导航接收机的时候,经常要处理ECEF坐标。比如GPS输出的位置,默认就是ECEF系的。但你要把它转成经纬高,就得先理解这个坐标系。

1.1.2 导航系(NED / ENU)

导航系,也叫当地水平坐标系。最常用的是北东地(NED)和东北天(ENU)。

我个人习惯用NED系。为什么呢?因为飞机、车辆的运动,天然就是“北向、东向、地向”这样分解的。你开车往北走,那北向速度就是正的,多直观。

导航系的原点通常选在载体所在的位置。比如你的车当前在某个点,那导航系的原点就在那个点,X轴指向北,Y轴指向东,Z轴指向地心(向下)。

小技巧: 如果你做的是无人机或地面车辆,建议统一用NED系。这样后面做姿态解算时,很多公式可以直接套用,不用来回转换。

1.1.3 载体系(Body Frame)

载体系,顾名思义,就是固定在载体上的坐标系。比如你的手机、无人机、汽车,都有自己的“身体坐标系”。

通常定义:X轴指向载体前方(前进方向),Y轴指向右侧,Z轴指向下方(符合右手定则)。

为什么需要载体系?因为IMU(惯性测量单元)测量的加速度和角速度,都是相对于载体系的。你手机平放时,Z轴感受到的是重力加速度;但手机竖起来,重力就跑到Y轴上了。

注意: 不同厂家对载体系的定义可能不同。有的把Z轴朝上,有的朝下。我曾经因为没仔细看手册,把IMU数据直接拿来用,结果姿态解算全反了……嗯,从那以后我每次都会先确认坐标系定义。

1.2 欧拉角与旋转矩阵:描述姿态的“老搭档”

有了坐标系,接下来就要描述“载体相对于导航系是怎么转的”。这就是姿态表示。

1.2.1 欧拉角:直观但有限制

欧拉角用三个角度来描述旋转:横滚角(Roll)、俯仰角(Pitch)、航向角(Yaw)。

举个例子:你坐在飞机上,飞机抬头是俯仰,左右倾斜是横滚,转弯是航向。

欧拉角的优点是直观。你一看“横滚30度”,脑子里就能想象出那个画面。

但欧拉角有个致命问题——万向锁(Gimbal Lock)。当俯仰角接近±90度时,横滚和航向会变得无法区分。说白了,就是自由度丢失了。

避坑指南: 我曾经在无人机飞控里用欧拉角做姿态控制,结果飞机做大机动时,姿态解算直接炸了。后来换成四元数,问题才解决。所以,如果你做的是全姿态运动(比如无人机、机器人),建议别用欧拉角做内部计算。

1.2.2 旋转矩阵:数学上完美

旋转矩阵是一个3x3的正交矩阵,它能把一个向量从一个坐标系旋转到另一个坐标系。

比如,从载体系到导航系的旋转矩阵 R,满足:

v_nav = R * v_body

旋转矩阵没有万向锁问题,而且可以连续旋转。但它的缺点是参数多(9个元素),而且必须满足正交约束,计算起来稍微麻烦一点。

欧拉角和旋转矩阵可以互相转换。公式我就不列了,大家记住一点:欧拉角适合给人看,旋转矩阵适合给计算机算。

1.3 四元数基础:现代导航的“瑞士军刀”

四元数,听起来很高大上,其实没那么神秘。它就是一个四维复数,形式是:

q = w + x*i + y*j + z*k

其中 w 是实部,x、y、z 是虚部。而且 i² = j² = k² = ijk = -1。

为什么用四元数?三个原因:

  • 无万向锁:可以表示任意姿态
  • 计算高效:只需要4个参数,比旋转矩阵的9个少
  • 插值平滑:做姿态插值时,四元数比欧拉角平滑得多

我记得第一次用四元数做姿态解算时,被它的乘法规则搞晕了。后来我总结了一个口诀:

我的经验: 四元数乘法不满足交换律,顺序很重要。如果你要表示“先旋转q1,再旋转q2”,结果是 q = q2 * q1(注意顺序!)。这个坑我踩过不止一次。

1.3.1 四元数与旋转矩阵的转换

四元数和旋转矩阵可以互相转换。给定四元数 q = [w, x, y, z],对应的旋转矩阵 R 为:

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²)]]

反过来,从旋转矩阵也可以提取四元数。这个公式在姿态解算中经常用到。

1.3.2 四元数的归一化

四元数必须满足模长为1,即 w² + x² + y² + z² = 1。如果计算过程中模长偏离了1,一定要做归一化。

重要: 我见过很多新手,做完四元数乘法后忘了归一化,结果姿态越算越偏。记住,每次更新完四元数,都要做一次归一化。这是基本功。

1.4 知识体系总览

为了让大家更直观地理解本章的知识结构,我画了一张SVG图。它展示了坐标系、姿态表示方法以及它们之间的关系。

坐标系与姿态表示知识体系 常用坐标系 地心地固系 (ECEF) 导航系 (NED/ENU) 载体系 (Body Frame) 原点、轴向定义不同 姿态表示方法 欧拉角 (Roll/Pitch/Yaw) 旋转矩阵 (3x3) 四元数 (w,x,y,z) 各有优缺点,互相转换 核心关系 坐标系转换 姿态描述 IMU数据解读 融合导航的基础 实战要点总结 1. 坐标系定义是第一步,务必确认清楚 2. 欧拉角直观但有限制,内部计算推荐四元数 3. 四元数要归一化,旋转矩阵要正交化 4. 多源融合时,统一坐标系是前提

1.5 本章小结

这一章我们讲了三个坐标系、三种姿态表示方法。说实话,内容不算少,但都是后面所有章节的基础。

我个人建议,初学者可以先从欧拉角入手建立直觉,然后尽快过渡到四元数。因为在实际工程中,四元数才是主流。你想想看,现在主流的开源飞控、机器人框架,哪个不是用四元数?

嗯,今天就到这里。下一章我们会讲IMU的测量模型和误差特性,那是传感器融合的“原材料”。咱们到时候见。


专注资料整理