第2章:坐标系与姿态表示

做飞控这些年,我最大的体会就是——坐标系搞不清楚,后面全是坑。你想想看,无人机在天上飞,它得知道自己"朝哪"、"在哪"、"怎么动"。这些信息,全靠坐标系和姿态表示来定义。

这一章,我们就来啃下这块硬骨头。我会把地球坐标系、机体坐标系、欧拉角、旋转矩阵、四元数这些概念,用最直白的方式讲清楚。

2.1 地球坐标系:飞控的"绝对参考"

地球坐标系,说白了就是给无人机一个"绝对位置"的参考系。我习惯叫它NED坐标系——北东地。

  • N轴(北):指向地理北极
  • E轴(东):指向正东方向
  • D轴(地):指向地心,也就是向下

嗯,这里要注意:D轴是向下的,不是向上的。很多新手会搞反。我在项目中遇到过,有同事把高度算反了,结果无人机直接往地里钻……还好是在仿真里。

地球坐标系是固定不动的。我们所有的GPS坐标、高度数据,最终都要转换到这个坐标系下处理。

2.2 机体坐标系:无人机自己的"身体坐标"

机体坐标系是绑在无人机身上的。不管它怎么翻滚、旋转,这个坐标系都跟着它一起动。

  • X轴(前):指向机头方向
  • Y轴(右):指向机身右侧
  • Z轴(下):指向机身下方

你想想看,无人机上的IMU(惯性测量单元)测量到的加速度、角速度,都是基于机体坐标系的。但我们要控制它飞到某个GPS点,就得把机体坐标系的数据转换到地球坐标系。

这就是姿态表示要干的事。

核心思想:地球坐标系是"绝对参考",机体坐标系是"相对参考"。飞控的核心任务之一,就是在这两个坐标系之间来回切换。

2.3 欧拉角:最直观的姿态表示

欧拉角,我觉得是最好理解的一种姿态表示方式。它用三个角度来描述无人机的朝向:

  • 偏航角(Yaw,ψ):绕Z轴旋转,也就是机头朝哪
  • 俯仰角(Pitch,θ):绕Y轴旋转,也就是抬头低头
  • 横滚角(Roll,φ):绕X轴旋转,也就是左右倾斜

这三个角度的旋转顺序,我习惯用Z→Y→X的顺序。为什么?因为这样最符合直觉:先确定朝向,再调整俯仰,最后修正横滚。

避坑指南:欧拉角有个著名的"万向锁"问题。当俯仰角接近±90°时,偏航和横滚会失去一个自由度。我曾经在调试一个特技飞行模式时,就因为这个原因,无人机在俯冲时姿态解算直接炸了。所以,如果你要做全姿态飞行,千万别只用欧拉角。

2.4 旋转矩阵:数学上的"坐标系转换器"

旋转矩阵,就是把一个向量从一个坐标系旋转到另一个坐标系的数学工具。说白了,就是一组3×3的矩阵。

从机体坐标系到地球坐标系的旋转矩阵,可以这样表示:

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

其中:

  • Rz(ψ) 是绕Z轴旋转ψ角的矩阵
  • Ry(θ) 是绕Y轴旋转θ角的矩阵
  • Rx(φ) 是绕X轴旋转φ角的矩阵

展开后长这样:

R = [
  [cosθ*cosψ, sinφ*sinθ*cosψ - cosφ*sinψ, cosφ*sinθ*cosψ + sinφ*sinψ],
  [cosθ*sinψ, sinφ*sinθ*sinψ + cosφ*cosψ, cosφ*sinθ*sinψ - sinφ*cosψ],
  [-sinθ,     sinφ*cosθ,                    cosφ*cosθ]
]

看着挺吓人,对吧?其实你不需要背它。我写代码时都是直接调库函数。但你要理解它的物理意义:每一列代表机体坐标系的一个轴在地球坐标系下的投影。

我的习惯:在代码里,我会把旋转矩阵封装成一个函数,输入欧拉角,输出矩阵。这样代码干净,也不容易出错。

2.5 四元数:飞控的"终极武器"

四元数,很多人一听就头大。但我要说,它是飞控里最优雅、最实用的姿态表示方式。

四元数可以看作是一个"超复数":

q = w + xi + yj + zk

其中w是实部,x、y、z是虚部。它满足:i² = j² = k² = ijk = -1。

为什么飞控要用四元数?三个理由:

  1. 无万向锁:四元数不会像欧拉角那样在特定角度失效
  2. 计算高效:四元数乘法比矩阵乘法快得多
  3. 插值平滑:在两个姿态之间做平滑过渡,四元数是最自然的

举个例子,用四元数旋转一个向量v:

v' = q * v * q_conj

其中q_conj是q的共轭。就这么简单。

实战经验:我在PX4飞控里,姿态解算全部用四元数。IMU数据进来,先做四元数更新,再转换成欧拉角给上层控制用。这样既保证了精度,又方便调试。

2.6 四种表示方式的对比

表示方式 优点 缺点 适用场景
欧拉角 直观,容易理解 有万向锁,插值困难 人机交互、显示
旋转矩阵 数学性质好,可逆 计算量大,9个参数 坐标变换、计算机图形学
四元数 无万向锁,计算快,插值平滑 不够直观,调试困难 飞控姿态解算、惯性导航
轴角表示 物理意义明确 插值复杂,有奇点 特殊场景

2.7 知识体系总览

下面这张图,是我自己梳理的坐标系与姿态表示的知识结构。你看一眼,就能明白它们之间的关系。

坐标系与姿态表示知识体系 地球坐标系 NED(北东地) 机体坐标系 前右下(FRD) 姿态表示 描述两个坐标系 之间的旋转关系 欧拉角 偏航/俯仰/横滚 旋转矩阵 3×3正交矩阵 四元数 w + xi + yj + zk 应用场景 姿态解算、坐标变换 应用场景 控制律设计、导航 应用场景 IMU融合、姿态插值 核心:所有姿态表示最终都是为了实现地球坐标系与机体坐标系之间的转换

这张图把整个知识体系串起来了。你看,地球坐标系和机体坐标系是"两端",姿态表示是"桥梁"。而欧拉角、旋转矩阵、四元数,就是这座桥的三种不同"建筑材料"。

我的建议:刚开始学的时候,先用欧拉角理解概念。写代码时,用四元数做核心计算。调试时,再转回欧拉角看数据。这样既直观又高效。

好了,坐标系和姿态表示的基础就讲到这里。这些东西,你后面写代码、调参数、解bug,天天都会用到。把它们吃透了,飞控的大门就为你敞开了。


公众号:蓝海资料掘金营,微信deep3321