1. GNC实时软件架构概述

GNC(Guidance, Navigation and Control,制导、导航与控制)是航天器实现“知道自己在哪里、要去哪里、如何稳定到达”的核心功能链。GNC实时软件则是承载这条功能链的计算中枢,它运行在星载计算机上,周期性采集敏感器数据、估计姿态与轨道状态、计算控制指令并驱动执行机构,同时还要在故障发生时完成重构与安全处置。理解GNC实时软件架构,首先要理解它所处的系统组成、实时性的真实含义,以及航天器任务对软件结构施加的硬约束。

一、GNC系统的组成

从信息流角度看,GNC系统由四类要素构成:敏感器、执行机构、星载计算机与软件、以及被控对象(航天器本体及其动力学环境)。敏感器负责“感知”,典型包括星敏感器、太阳敏感器、陀螺、磁强计、GNSS接收机、加速度计等;执行机构负责“作用”,典型包括动量轮、控制力矩陀螺、磁力矩器、推力器、帆板驱动机构等;星载计算机与软件负责“决策”,完成数据采集、状态估计、控制律计算、模式管理与故障处理;被控对象则是航天器姿态与轨道动力学本身。

这些要素并非简单串联,而是通过总线与接口形成闭环。例如星敏感器通过RS-422或SpaceWire输出姿态四元数,陀螺通过1553B总线输出角速度,计算机在同一个控制周期内融合两类数据,经卡尔曼滤波得到姿态估计,再计算控制力矩,分配给动量轮与磁力矩器。软件架构必须清晰描述这条闭环中每个环节的时序、数据格式、优先级与失效行为。

GNC实时软件闭环架构与周期时序 敏感器组 星敏感器 · 陀螺 太阳敏感器 · 磁强计 GNSS · 加速度计 采样周期 10~100 ms 星载计算机 · GNC实时软件 采集与时间同步层 总线驱动 · 时标对齐 · 数据校验 导航与状态估计层 姿态确定 · 卡尔曼滤波 · 轨道递推 制导与控制律层 制导律 · 姿态控制 · 力矩分配 模式管理与故障处理层 模式切换 · 安全模式 · 重构 控制周期 T = 100 ms(示例) 执行机构 动量轮 · 控制力矩陀螺 磁力矩器 · 推力器 帆板驱动机构 指令周期 100 ms 航天器本体动力学 姿态运动 · 轨道运动 · 挠性耦合 测量数据 控制指令 力矩/推力 姿态/轨道响应 单周期时序(示例) t0:中断触发,读取陀螺/星敏 t0+20ms:状态估计完成 t0+60ms:控制律与力矩分配

二、实时软件的定义与真实含义

“实时”并不等于“快”,而是指系统必须在确定的时间约束内给出正确结果。对GNC软件而言,实时性包含三个层次:第一是周期确定性,控制周期必须稳定,例如姿态控制周期固定为100 ms,抖动应控制在毫秒级;第二是截止时间约束,从敏感器采样到执行机构指令输出必须在周期内完成,超时即视为失效;第三是优先级可预测,故障处理与安全模式切换必须能抢占常规控制任务。

因此,GNC实时软件通常采用时间触发与优先级抢占相结合的调度结构。以100 ms控制周期为例,可将周期划分为若干时间片:0~20 ms完成敏感器采集与校验,20~50 ms完成导航滤波,50~80 ms完成控制律与力矩分配,80~100 ms完成指令输出与健康监测。每个时间片有明确的执行预算,超出预算即触发超时计数,连续超时则进入降级模式。这种“预算—执行—监测”的结构,是实时软件架构区别于普通应用软件的关键。

三、架构关注点

GNC实时软件架构需要同时回答“功能如何分解”和“非功能约束如何满足”两类问题。功能维度上,通常划分为采集、导航、制导、控制、模式管理、健康监测与遥测等模块;非功能维度上,则关注以下要点:

  • 时间确定性:任务周期、执行时间、抖动与截止时间必须可分析、可测量,避免无界阻塞与动态内存分配。
  • 容错与重构:敏感器或执行机构失效时,软件应能隔离故障、切换备份、重构控制分配,并保证切换过程姿态不发散。
  • 模式管理:典型模式包括待机、安全、对日定向、对地定向、机动、故障保护等,模式切换条件与切换过程必须显式定义。
  • 接口与数据一致性:总线协议、数据格式、时标、单位与坐标系必须统一,避免因参照系不一致导致控制方向错误。
  • 可验证性:架构应支持单元测试、时序分析、硬件在环测试与在轨可观测性设计。

四、典型航天器任务对软件架构的约束

不同任务对GNC软件架构的约束差异显著。以三类典型任务为例:

任务类型 典型约束 架构应对
近地遥感卫星 高精度对地指向,姿态稳定度要求高,控制周期短 高频姿态控制回路,星敏+陀螺组合定姿,动量轮精细力矩分配
深空探测器 通信时延大,自主性要求高,能源与算力受限 分层自主管理,故障自恢复,低功耗周期调度,关键数据本地存储
载人航天器 安全性等级高,故障必须可隔离、可降级、可人工干预 冗余通道管理,安全模式优先,指令优先级仲裁,健康监测全覆盖

这些约束最终都会落到软件架构的具体决策上:任务如何划分、周期如何设定、优先级如何分配、故障如何传播与阻断、模式如何切换。架构设计不是一次性完成的,而是随着任务剖面、硬件资源与验证结果不断迭代。理解这些约束,是后续学习具体调度策略、容错机制与代码实现的基础。