坐标系基础:天球坐标系、星敏感器坐标系、航天器本体坐标系、坐标转换矩阵

做星光敏感器导航,说白了就是回答三个问题:

  • 我在哪?(航天器在太空中的位置和姿态)
  • 我看到了什么?(星敏感器拍摄到的恒星)
  • 怎么把看到的和我所在的位置联系起来?(坐标转换)

这三个问题,每一个都离不开坐标系。我刚开始接触星敏感器时,觉得坐标系就是一堆数学公式,没什么大不了的。直到有一次,我在项目中因为搞混了坐标轴方向,导致姿态解算结果差了180度——嗯,那天的加班餐味道我现在还记得。

所以,坐标系这东西,看似基础,但真不能马虎。咱们今天就把这几个坐标系彻底讲清楚。

1. 天球坐标系

天球坐标系,你可以把它想象成一个巨大的虚拟球壳。地球在球心,所有恒星都投影在这个球壳上。我们用它来描述恒星在天空中的位置。

常用的天球坐标系有两种:

  • 赤道坐标系:以地球赤道面为基准。用赤经(RA)赤纬(Dec)表示。赤经从春分点起算,向东度量;赤纬从赤道面向北为正。
  • 黄道坐标系:以地球公转轨道面(黄道面)为基准。用黄经黄纬表示。这个在星敏感器里用得少,但做太阳系导航时会用到。

我个人习惯用赤道坐标系。为什么呢?因为星敏感器拍摄的星图,本质上就是一张天球赤道坐标系的投影图。你想想看,星敏感器看到的恒星,它们的赤经赤纬是固定的(忽略自行),这就给我们提供了一个天然的参考基准。

关键点:天球坐标系是惯性坐标系,它不随地球自转或航天器运动而改变。这是星敏感器能够定姿的根本前提。

2. 星敏感器坐标系

星敏感器坐标系,就是固定在星敏感器自身上的坐标系。它的定义很简单:

  • 原点:通常位于星敏感器的光学中心(或探测器中心)。
  • Z轴:沿光轴方向,指向星敏感器观测的方向。
  • X轴、Y轴:与探测器像元阵列的行列方向对齐。

这个坐标系是非惯性系。星敏感器在太空中怎么转,这个坐标系就跟着怎么转。我们通过星敏感器拍摄到的星点,在探测器上的像素坐标(x, y),就可以计算出这颗星在星敏感器坐标系下的方向矢量。

这里有个坑,我踩过。不同厂家的星敏感器,X轴和Y轴的定义可能不一样。有的厂家把X轴定义为行方向,有的定义为列方向。我曾经因为没仔细看手册,直接把像素坐标代入公式,结果解出来的姿态全是反的。所以,拿到一个星敏感器,第一件事就是确认它的坐标系定义。

注意:星敏感器坐标系的原点通常不在探测器中心,而是在光学中心。两者之间有一个平移量。但在大多数工程应用中,这个平移量可以忽略,因为星敏感器到航天器本体的距离远大于这个偏移。

3. 航天器本体坐标系

航天器本体坐标系,就是固定在航天器结构上的坐标系。它的定义通常遵循以下原则:

  • 原点:位于航天器的质心(或几何中心)。
  • Z轴:通常指向对地方向(或任务指定的方向)。
  • X轴:指向飞行方向(或太阳方向)。
  • Y轴:由右手定则确定。

这个坐标系是星敏感器导航的最终目标。我们做星敏感器导航,最终要输出的就是航天器本体坐标系相对于天球坐标系的姿态。

说白了,天球坐标系是参考,星敏感器坐标系是测量,航天器本体坐标系是目标。我们通过星敏感器测量得到星点在星敏感器坐标系下的方向,然后通过坐标转换,得到航天器本体坐标系下的方向,再与星表比对,最终解算出姿态。

4. 坐标转换矩阵

坐标转换矩阵,就是连接不同坐标系的桥梁。它的本质是一个3x3的正交矩阵,满足:

  • 行列式为+1(保证是右手系)
  • 矩阵的逆等于矩阵的转置

常用的坐标转换矩阵有:

  • 天球坐标系 → 星敏感器坐标系:这个转换矩阵就是星敏感器的安装矩阵。它描述了星敏感器在航天器上的安装姿态。
  • 星敏感器坐标系 → 航天器本体坐标系:这个转换矩阵就是星敏感器的测量输出。星敏感器测量得到的是星点在星敏感器坐标系下的方向,我们需要把它转换到本体坐标系下。
  • 天球坐标系 → 航天器本体坐标系:这个转换矩阵就是航天器的姿态矩阵。它是我们最终要输出的结果。

举个例子,假设星敏感器测量得到一颗星在星敏感器坐标系下的方向矢量为 v_s,星敏感器的安装矩阵为 C_sb(从星敏感器坐标系到本体坐标系的转换矩阵),那么这颗星在本体坐标系下的方向矢量 v_b 为:

v_b = C_sb * v_s

然后,我们通过星表查询,知道这颗星在天球坐标系下的方向矢量为 v_i,那么航天器的姿态矩阵 C_bi(从本体坐标系到天球坐标系的转换矩阵)满足:

v_i = C_bi * v_b

解出 C_bi,我们就得到了航天器的姿态。

小技巧:在实际工程中,我们通常用四元数来表示姿态矩阵,而不是直接用9个元素的矩阵。四元数只有4个参数,计算效率更高,而且没有奇点问题。但四元数的物理意义不如矩阵直观,所以做理论分析时,我还是习惯用矩阵。

5. 知识体系总览

为了让你更直观地理解这几个坐标系之间的关系,我画了一张图:

坐标系关系与转换流程 天球坐标系 惯性坐标系 恒星位置参考 赤经、赤纬 星敏感器坐标系 非惯性坐标系 测量坐标系 像素坐标 → 方向矢量 航天器本体坐标系 目标坐标系 姿态输出 质心、飞行方向 安装矩阵 测量输出 姿态矩阵(最终输出) 核心逻辑:天球坐标系(参考)→ 星敏感器坐标系(测量)→ 航天器本体坐标系(目标) 关键公式 v_b = C_sb · v_s (星敏感器坐标系 → 本体坐标系) v_i = C_bi · v_b (本体坐标系 → 天球坐标系,即姿态矩阵)

6. 工程实现中的注意事项

在实际工程中,坐标转换不是简单的矩阵乘法。有几个细节,我建议你特别注意:

  1. 坐标系定义的一致性:不同部门、不同供应商对坐标系的定义可能不同。拿到数据后,先确认坐标轴方向、旋转顺序、正负号定义。我曾经因为一个负号,多花了三天时间排查问题。
  2. 数值精度:坐标转换矩阵是正交矩阵,理论上满足 C * C^T = I。但在计算机中,由于浮点数精度限制,这个等式不一定严格成立。长时间运行后,误差会累积。所以,需要定期对姿态矩阵进行正交化修正
  3. 奇点问题:如果用欧拉角表示姿态,当俯仰角接近±90度时,会出现奇点(万向锁)。我建议在工程代码中,统一使用四元数或旋转矩阵,避免欧拉角。
  4. 时间同步:星敏感器的测量数据、星表数据、航天器的姿态数据,都有各自的时间戳。在做坐标转换时,必须确保所有数据的时间基准一致。否则,转换出来的姿态就是错的。
避坑指南:我曾经在一个项目中,星敏感器的数据采样频率是10Hz,而航天器姿态控制系统的更新频率是100Hz。两者时间不同步,导致坐标转换结果一直在抖动。后来加了时间戳对齐和插值处理,问题才解决。所以,时间同步问题,一定要在系统设计阶段就考虑进去。

好了,坐标系基础就讲到这里。这几个坐标系是星敏感器导航的基石,理解透了,后面的内容就好办了。


专注资料整理