第1章:坐标系与姿态描述
各位同学,咱们开始上课。
做太阳翼对日定向跟踪,第一件事是什么?不是写代码,不是调PID。而是——搞清楚你的航天器在哪儿,脸朝哪边。说白了,就是坐标系和姿态描述的问题。
我当年刚入行时,觉得坐标系这东西太基础了,随便翻翻书就过了。结果呢?第一次做半物理仿真,卫星本体坐标系定义反了,太阳翼直接朝着地球转。嗯,那场面,项目经理脸都绿了。从那以后,我再也不敢小看坐标系了。
1.1 三个核心坐标系
航天器GNC里,我们打交道最多的就是三个坐标系。你想想看,一个卫星在天上飞,它得知道自己在哪儿(相对于地球),自己朝哪边(相对于惯性空间),自己的部件怎么动(相对于本体)。所以这三个坐标系,一个都不能少。
1.1.1 惯性坐标系(ECI)
惯性坐标系,就是那个「绝对不动」的参考系。当然,严格来说没有绝对不动的东西,但咱们做工程嘛,够用就行。
- 原点:地球质心
- Z轴:指向北极(地球自转轴方向)
- X轴:指向春分点(黄道与赤道的交点)
- Y轴:右手定则,Z×X
我个人习惯把ECI坐标系想象成「宇宙的标尺」。不管卫星怎么转、怎么飞,这个坐标系始终不变。所有轨道计算、星历预报,都得基于它。
1.1.2 本体坐标系(Body Frame)
本体坐标系,就是绑在航天器身上的坐标系。卫星怎么动,它就怎么动。
- 原点:航天器质心
- X轴:通常指向飞行方向(速度方向)
- Z轴:指向对地面(也就是指向地球)
- Y轴:右手定则,Z×X
这里有个坑,我得提醒你。不同卫星的本体坐标系定义可能不一样。有的卫星把Z轴指向太阳,有的指向地球。我在项目中遇到过,两个分系统的人拿着不同的本体定义开会,吵了半小时才发现说的不是一回事。所以,拿到任何数据前,先确认坐标系定义。
1.1.3 轨道坐标系(LVLH)
轨道坐标系,也叫LVLH(Local Vertical Local Horizontal)。它跟着卫星跑,但始终保持一个姿态——Z轴指向地心,X轴指向速度方向。
- 原点:航天器质心
- Z轴:指向地心(当地垂线方向)
- X轴:指向速度方向(轨道运动方向)
- Y轴:右手定则,Z×X(垂直于轨道平面)
这个坐标系有什么用?说白了,它描述的是「卫星相对于地球的姿态」。比如卫星要对地通信,天线得指向地球,这时候轨道坐标系就派上用场了。
我记得有一次做在轨测试,卫星的星敏感器数据异常,怎么查都查不出问题。后来发现,是轨道坐标系和本体坐标系的转换矩阵算错了。一个符号反了,整个姿态就偏了10度。你说冤不冤?
1.2 姿态描述的三种方式
坐标系定义好了,接下来就是描述「卫星现在朝哪边」。也就是从本体坐标系到参考坐标系(比如惯性系或轨道系)的旋转关系。常用的有三种方法:欧拉角、四元数、方向余弦矩阵。
1.2.1 欧拉角
欧拉角,最直观的姿态描述方式。就是绕三个轴依次旋转的角度。常用的顺序是3-1-2(先绕Z轴,再绕X轴,最后绕Y轴),对应航天领域的偏航-俯仰-滚转。
| 角度 | 符号 | 旋转轴 | 说明 |
|---|---|---|---|
| 偏航角 | ψ | Z轴 | 相当于摇头 |
| 俯仰角 | θ | X轴 | 相当于点头 |
| 滚转角 | φ | Y轴 | 相当于歪头 |
欧拉角的好处是直观,一看就懂。但有个致命问题——万向锁。当俯仰角接近±90度时,偏航和滚转就分不清了。你想想看,卫星在天上做机动,万一卡在万向锁附近,姿态控制就乱套了。
1.2.2 四元数
四元数,说白了就是「没有奇异的姿态描述」。它用四个数表示旋转:一个标量加三个矢量。
q = [q0, q1, q2, q3]ᵀ
其中:
q0 = cos(θ/2) // 标量部分
[q1, q2, q3] = sin(θ/2)·n // 矢量部分,n是旋转轴单位矢量
四元数最大的优点是什么?连续、无奇异、计算快。你随便怎么转,它都能平滑描述。而且四元数的乘法就是旋转的复合,特别适合计算机实现。
我个人习惯,所有内部姿态计算都用四元数。只有在最后输出给遥测或者显示时,才转成欧拉角给人看。这个习惯帮我避免了很多坑。
1.2.3 方向余弦矩阵(DCM)
方向余弦矩阵,就是一个3×3的旋转矩阵。它把矢量从一个坐标系变换到另一个坐标系。
C = [c11 c12 c13]
[c21 c22 c23]
[c31 c32 c33]
其中 cij = cos(θij),θij是两轴之间的夹角
DCM的好处是,它可以直接用在矢量变换上。比如你要把太阳方向矢量从惯性系转到本体系,直接乘DCM就行。而且DCM是正交矩阵,逆矩阵就是转置,计算很方便。
但DCM也有缺点——9个元素,冗余度大。而且它必须满足正交性约束,数值误差会破坏这个约束。所以实际工程中,DCM更多用于理论推导,或者作为中间结果。
1.3 三种描述方式的对比
| 特性 | 欧拉角 | 四元数 | DCM |
|---|---|---|---|
| 参数个数 | 3 | 4 | 9 |
| 有无奇异 | 有(万向锁) | 无 | 无 |
| 直观性 | 高 | 低 | 中 |
| 计算效率 | 中(有三角函数) | 高(只有乘加) | 中(9个元素) |
| 工程常用场景 | 遥测显示、人机交互 | 姿态控制、滤波、插值 | 坐标变换、理论推导 |
看到这个表,你应该明白了。做太阳翼对日定向跟踪,我推荐的核心方案是:内部用四元数,外部显示用欧拉角,坐标变换用DCM。三者之间可以互相转换,代码实现也不复杂。
1.4 本章小结
这一章我们讲了三个坐标系和三种姿态描述方法。你可能会觉得,这不就是数学吗?跟太阳翼跟踪有什么关系?
关系大了。太阳翼要跟踪太阳,首先得知道太阳在哪个方向。这个方向是在惯性系下算出来的。然后你得把它转到本体系,才知道太阳翼该往哪转。中间涉及轨道系、本体系、惯性系之间的转换,每一步都离不开坐标系和姿态描述。
我曾经带过一个新人,他算法写得飞快,但仿真结果总是不对。我让他把每一步的坐标系转换打印出来,一看——惯性系到轨道系的转换矩阵用反了。就这一个错误,折腾了三天。所以,坐标系和姿态描述是基本功,基本功不牢,后面全是空中楼阁。
下一章,我们开始讲太阳矢量在惯性系下的计算。也就是——怎么知道太阳在哪儿。