第1章:坐标系与姿态描述

各位同学,咱们开始上课。

做太阳翼对日定向跟踪,第一件事是什么?不是写代码,不是调PID。而是——搞清楚你的航天器在哪儿,脸朝哪边。说白了,就是坐标系和姿态描述的问题。

我当年刚入行时,觉得坐标系这东西太基础了,随便翻翻书就过了。结果呢?第一次做半物理仿真,卫星本体坐标系定义反了,太阳翼直接朝着地球转。嗯,那场面,项目经理脸都绿了。从那以后,我再也不敢小看坐标系了。

1.1 三个核心坐标系

航天器GNC里,我们打交道最多的就是三个坐标系。你想想看,一个卫星在天上飞,它得知道自己在哪儿(相对于地球),自己朝哪边(相对于惯性空间),自己的部件怎么动(相对于本体)。所以这三个坐标系,一个都不能少。

1.1.1 惯性坐标系(ECI)

惯性坐标系,就是那个「绝对不动」的参考系。当然,严格来说没有绝对不动的东西,但咱们做工程嘛,够用就行。

  • 原点:地球质心
  • Z轴:指向北极(地球自转轴方向)
  • X轴:指向春分点(黄道与赤道的交点)
  • Y轴:右手定则,Z×X

我个人习惯把ECI坐标系想象成「宇宙的标尺」。不管卫星怎么转、怎么飞,这个坐标系始终不变。所有轨道计算、星历预报,都得基于它。

小提示:实际工程中,我们常用J2000.0历元定义的ECI坐标系。也就是2000年1月1日12:00:00那个时刻的春分点方向。为什么选这个?因为那时候的测量数据最准,大家都认这个标准。

1.1.2 本体坐标系(Body Frame)

本体坐标系,就是绑在航天器身上的坐标系。卫星怎么动,它就怎么动。

  • 原点:航天器质心
  • X轴:通常指向飞行方向(速度方向)
  • Z轴:指向对地面(也就是指向地球)
  • Y轴:右手定则,Z×X

这里有个坑,我得提醒你。不同卫星的本体坐标系定义可能不一样。有的卫星把Z轴指向太阳,有的指向地球。我在项目中遇到过,两个分系统的人拿着不同的本体定义开会,吵了半小时才发现说的不是一回事。所以,拿到任何数据前,先确认坐标系定义

注意:太阳翼的驱动轴通常沿着本体坐标系的某一轴定义。比如常见的对日定向机构,驱动轴沿Y轴,这样太阳翼可以绕Y轴旋转跟踪太阳。如果本体坐标系定义错了,整个跟踪算法就全歪了。

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,时间长了姿态就飘了。我一般在每个控制周期末尾加一行代码:q = q / norm(q)。简单,但管用。

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 本章小结

这一章我们讲了三个坐标系和三种姿态描述方法。你可能会觉得,这不就是数学吗?跟太阳翼跟踪有什么关系?

关系大了。太阳翼要跟踪太阳,首先得知道太阳在哪个方向。这个方向是在惯性系下算出来的。然后你得把它转到本体系,才知道太阳翼该往哪转。中间涉及轨道系、本体系、惯性系之间的转换,每一步都离不开坐标系和姿态描述。

我曾经带过一个新人,他算法写得飞快,但仿真结果总是不对。我让他把每一步的坐标系转换打印出来,一看——惯性系到轨道系的转换矩阵用反了。就这一个错误,折腾了三天。所以,坐标系和姿态描述是基本功,基本功不牢,后面全是空中楼阁

下一章,我们开始讲太阳矢量在惯性系下的计算。也就是——怎么知道太阳在哪儿。