第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。
为什么飞控要用四元数?三个理由:
- 无万向锁:四元数不会像欧拉角那样在特定角度失效
- 计算高效:四元数乘法比矩阵乘法快得多
- 插值平滑:在两个姿态之间做平滑过渡,四元数是最自然的
举个例子,用四元数旋转一个向量v:
v' = q * v * q_conj
其中q_conj是q的共轭。就这么简单。
实战经验:我在PX4飞控里,姿态解算全部用四元数。IMU数据进来,先做四元数更新,再转换成欧拉角给上层控制用。这样既保证了精度,又方便调试。
2.6 四种表示方式的对比
| 表示方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 欧拉角 | 直观,容易理解 | 有万向锁,插值困难 | 人机交互、显示 |
| 旋转矩阵 | 数学性质好,可逆 | 计算量大,9个参数 | 坐标变换、计算机图形学 |
| 四元数 | 无万向锁,计算快,插值平滑 | 不够直观,调试困难 | 飞控姿态解算、惯性导航 |
| 轴角表示 | 物理意义明确 | 插值复杂,有奇点 | 特殊场景 |
2.7 知识体系总览
下面这张图,是我自己梳理的坐标系与姿态表示的知识结构。你看一眼,就能明白它们之间的关系。
这张图把整个知识体系串起来了。你看,地球坐标系和机体坐标系是"两端",姿态表示是"桥梁"。而欧拉角、旋转矩阵、四元数,就是这座桥的三种不同"建筑材料"。
我的建议:刚开始学的时候,先用欧拉角理解概念。写代码时,用四元数做核心计算。调试时,再转回欧拉角看数据。这样既直观又高效。
好了,坐标系和姿态表示的基础就讲到这里。这些东西,你后面写代码、调参数、解bug,天天都会用到。把它们吃透了,飞控的大门就为你敞开了。
公众号:蓝海资料掘金营,微信deep3321