坐标系与变换:从地面到天空的数学桥梁

做飞控仿真,第一个绕不开的坎就是坐标系。我记得刚入行那会儿,总觉得坐标系这东西太抽象,不就是几个箭头嘛。直到第一次把仿真数据跟实际试飞数据做对比,发现姿态角全对不上,才意识到——坐标系选错了,后面全是白干。

今天咱们就把这几个坐标系和它们之间的变换关系,掰开了讲清楚。

1. 地心惯性系(ECI)

地心惯性系,简称ECI。它的原点在地球质心,Z轴指向北极,X轴指向春分点,Y轴按右手定则补齐。

为什么需要它?因为牛顿定律只适用于惯性系。你想想看,飞机在天上飞,地球本身还在自转。如果用地固系去算加速度,那离心力和科里奥利力全得手动加进去,麻烦得很。

我个人习惯的做法是:所有动力学方程都在ECI系下推导,最后再变换到其他坐标系输出。这样逻辑最清晰,不容易出错。

关键点:ECI系是惯性系,牛顿第二定律直接适用。其他坐标系都不是严格的惯性系。

2. 地心地固系(ECEF)

ECEF系跟地球固连,一起旋转。原点还是地心,Z轴指向北极,X轴指向本初子午线与赤道的交点。

这个坐标系最大的用处是——定位。GPS输出的经纬高,本质上就是ECEF系的球坐标表示。

我在做无人机物流项目时,遇到过一个问题:GPS给出的位置是ECEF系下的,但飞控需要的是相对于起飞点的位置。这就涉及到ECEF到导航坐标系的变换。嗯,这里要注意,变换矩阵跟纬度有关,不能偷懒用常数。

坐标系 原点 特点 适用场景
ECI 地心 惯性系,不旋转 动力学方程
ECEF 地心 随地球旋转 GPS定位、导航
机体坐标系 飞机质心 固连于机体 姿态控制、传感器

3. 机体坐标系

机体坐标系,说白了就是坐在飞机里看世界。X轴指向机头,Y轴指向右翼,Z轴指向机腹(右手定则)。

为什么需要它?因为IMU(惯性测量单元)就装在飞机上,它测到的加速度和角速度都是机体坐标系下的。你要做控制,也得在机体坐标系下给舵面指令。

我曾经犯过一个低级错误:把机体坐标系下的加速度直接当成惯性系下的加速度去积分算速度。结果速度越算越离谱,飞控直接炸了。后来才意识到——加速度计测的是比力,而且是在机体系下,必须经过坐标变换才能用。

避坑指南:IMU输出的数据默认在机体坐标系下。如果你要用它做导航解算,必须先变换到导航系或惯性系。

4. 欧拉角与旋转矩阵

欧拉角,就是大家熟悉的俯仰角θ、滚转角φ、偏航角ψ。它们描述了机体坐标系相对于导航坐标系的姿态。

旋转顺序我建议用Z-Y-X(偏航-俯仰-滚转),这是航空航天领域的惯例。为什么是这个顺序?因为偏航角变化范围最大(0~360°),放在最后一步可以避免一些奇异性问题。

旋转矩阵长这样:

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

其中:
Rz(ψ) = [cosψ  -sinψ  0;  sinψ  cosψ  0;  0  0  1]
Ry(θ) = [cosθ   0   sinθ;  0    1    0;  -sinθ  0  cosθ]
Rx(φ) = [1    0     0;  0  cosφ  -sinφ;  0  sinφ  cosφ]

注意顺序:先乘的矩阵在右边。也就是说,一个向量从导航系变换到机体系,要先经过滚转,再俯仰,最后偏航。

小技巧:如果你记不住旋转矩阵,可以用MATLAB的angle2dcm函数验证。我每次写代码都会用这个函数做一次交叉验证,确保没写反。

5. 四元数基础

欧拉角有个致命问题——万向锁。当俯仰角接近±90°时,滚转和偏航会耦合在一起,丢失一个自由度。这在飞行器做大机动时特别危险。

四元数就是来解决这个问题的。它用四个参数表示旋转,没有奇异性,而且插值平滑。

四元数的定义:

q = [q0, q1, q2, q3]^T

其中:
q0 = cos(θ/2)
q1 = ex * sin(θ/2)
q2 = ey * sin(θ/2)
q3 = ez * sin(θ/2)

ex, ey, ez 是旋转轴的单位向量
θ 是旋转角度

四元数乘法不满足交换律,这个要特别注意。我刚开始写四元数更新算法时,把乘法顺序搞反了,结果姿态解算结果一直在漂。查了两天bug才发现是这个问题。

四元数到欧拉角的转换:

φ = atan2(2*(q0*q1 + q2*q3), 1 - 2*(q1^2 + q2^2))
θ = asin(2*(q0*q2 - q3*q1))
ψ = atan2(2*(q0*q3 + q1*q2), 1 - 2*(q2^2 + q3^2))

核心建议:在飞控仿真中,内部姿态解算用四元数,对外输出用欧拉角。这样既避免了万向锁,又方便人理解。

知识体系总览

下面这张图,是我自己总结的坐标系与变换的知识结构。你把它理清楚了,后面六自由度仿真的框架就搭好了。

坐标系与变换知识体系 地心惯性系 (ECI) 原点:地心 惯性系,不旋转 地心地固系 (ECEF) 原点:地心 随地球旋转 机体坐标系 原点:飞机质心 固连于机体 地球自转 位置变换 欧拉角 (φ, θ, ψ) 直观但存在万向锁 四元数 (q0, q1, q2, q3) 无奇异性,适合计算 旋转矩阵 R = Rz(ψ) · Ry(θ) · Rx(φ) 四元数 ↔ 欧拉角 双向转换公式 核心原则:动力学用ECI,定位用ECEF,控制用机体坐标系 内部用四元数,对外输出用欧拉角

这张图把今天讲的内容串起来了。你仔细看,ECI和ECEF之间是地球自转关系,ECEF到机体坐标系需要位置变换,而机体坐标系的姿态则通过欧拉角或四元数来描述。旋转矩阵就是连接这些坐标系的数学工具。

我个人建议,刚开始做仿真时,先把ECI到ECEF的变换写对,再处理机体坐标系。一步一步来,别想着一步到位。我曾经见过一个团队,上来就搞四元数+旋转矩阵的联合解算,结果代码写了一堆,最后发现是坐标系定义反了——白白浪费了两周时间。

经验之谈:写代码前,先在纸上把坐标系画出来,标清楚每个轴的方向。这个习惯帮我避免过至少十次以上的低级错误。

好了,坐标系与变换这部分就讲到这里。你把这些基础打牢了,后面六自由度仿真模型的搭建就会顺畅很多。


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