GNC 姿态仿真平台

基于 Vite + TypeScript + Three.js + ECharts 的卫星姿态确定与控制系统(GNC/ADCS)仿真平台。采用**完整 6 维误差状态扩展卡尔曼滤波(EKF)**融合星敏感器、陀螺仪、太阳敏感器与磁强计测量,实时估计卫星三轴姿态与陀螺零偏,并内置 PD 姿态控制闭环、轨道动力学、故障注入告警与蒙特卡洛统计分析。

界面采用航天任务控制中心设计语言:三栏任务控制台布局(顶栏全局状态 + 左侧 Tab 控制面板 + 中央 3D 可视化 + 右侧遥测告警 + 底部图表矩阵),Modern Dark 玻璃拟态主题,支持 1920×1080 单屏无滚动监控。

gnc.png

books.png

✨ 功能特性

姿态确定(EKF 滤波)

  • 姿态运动学仿真:Z-Y-X 欧拉角 → 四元数,RK4 四元数积分,支持任意初始姿态与三轴恒定角速度
  • 星敏感器测量仿真:在真实姿态四元数上叠加高斯小角度噪声,噪声强度可配置
  • 陀螺仪测量仿真:真实角速度 + 固定零偏 + 高斯噪声,零偏可在滤波中被在线估计
  • 6 维误差状态 EKF:状态量 = 3 姿态误差 + 3 陀螺零偏
    • 预测步:完整状态转移矩阵 F(含姿态误差动力学与零偏耦合),协方差传播 P = F·P·Fᵀ + Q
    • 更新步:星敏四元观测误差角作为量测,标准卡尔曼增益与 P = (I−K·H)·P 修正,含协方差对称化保护

多传感器融合与故障注入

  • 太阳敏感器模型:粗太阳敏 + 精太阳敏,本体系太阳方向矢量量测,含半视场角(FOV)限制与噪声可配置
  • 磁强计模型:三轴磁强计,简化地磁场偶极子模型(IGRF 近似),量测本体系磁场矢量
  • 多传感器融合 EKF:在星敏 + 陀螺基础上扩展太阳敏/磁强计矢量观测,支持任意传感器组合参与滤波
  • 传感器故障注入
    • 星敏:失效 / 卡死(指定姿态角)/ 跳变(指定幅度)
    • 陀螺:漂移增大(指定倍数)/ 失效
    • 太阳敏 / 磁强计:失效
  • 执行器故障注入:反作用轮停转 / 力矩偏差(输出 = (1−e)·τ,e 可配)
  • 故障告警系统:基于量测新息模值超阈值的新息检测,实时状态灯(正常/警告/严重)与滚动告警列表

姿态控制闭环

  • PD 姿态控制器:基于四元数误差的 PD 控制律 τ = −Kp·q_vec − Kd·ω_err,Kp / Kd 可配置
  • 三种控制模式
    • 三轴稳定:将卫星稳定到指定目标 Roll / Pitch / Yaw
    • 机动模式:支持目标姿态动态跟踪的大角度机动
    • 对日定向:使本体系 +X 轴指向太阳方向
  • 反作用轮模型:三轴反作用轮,含力矩饱和、转速饱和与转速积分(动量管理),支持轮最大力矩/转速配置
  • 磁力矩器模型:简化地磁场偶极子模型与磁控制律 m = (b×τ)/|b|²,支持磁卸载
  • 刚体姿态动力学:完整惯量矩阵 I·ω̇ + ω×(I·ω) = τ,RK4 角速度积分,惯性张量可配置
  • 执行器分配:反作用轮 / 磁力矩器 / 理想执行器选择与力矩矢量叠加

轨道动力学与高级分析(阶段4)

  • 轨道传播:开普勒轨道根数(半长轴 / 偏心率 / 倾角 / 升交点赤经 / 近地点幅角 / 真近点角)初始化,数值积分传播轨道
  • 轨道可视化:独立 3D 轨道视图(地球 + 轨道面 + 卫星运动),顶栏一键切换姿态/轨道视图
  • 蒙特卡洛分析:批量随机种子运行(1~500 次),统计收敛概率平均 RMSE Roll,结果自动下载 CSV
  • 敏感性分析:对星敏噪声 / 陀螺噪声 / 陀螺零偏 / 太阳敏噪声 / 磁强计噪声做 0.5×~2× 因子扫描
  • 数据回放:加载 CSV / JSON 历史数据,0.05s 步进逐点回放时序曲线,无需重新仿真
  • 多场景对比:基准 / 低噪声(0.5×) / 高噪声(2×) 三场景并行运行,RMSE 汇总对比

可视化与数据

  • 实时 3D 姿态可视化:Three.js 卫星模型(本体 + 太阳能板 + 星敏 + 本体系坐标轴)+ 深空星空粒子背景,支持鼠标拖拽旋转、滚轮缩放
  • 7 路实时曲线:ECharts 深色主题时序图(数据窗口长度可配置,默认 1000 点)
    • RPY 姿态时序:实线真实 / 虚线星敏 / 橙色 EKF 滤波
    • 滤波误差曲线(真实 − EKF,°)
    • 角速度时序(rad/s):真实 / 陀螺测量 / EKF 估计
    • EKF 协方差 P 对角元(log 坐标,方差)
    • 控制力矩时序(N·m):PD 控制器三轴输出
    • 反作用轮转速(rad/s)
    • 姿态控制误差角(°)
  • 18 项实时统计指标:姿态误差 RMSE、陀螺零偏估计误差、EKF 收敛状态与收敛时间、P 对角元、控制误差角、控制力矩幅值、轮饱和状态与转速利用率等(蓝/琥珀/绿三组配色区分)
  • 场景保存/加载:完整仿真状态(参数 + 全部历史数据 + 告警)序列化为 JSON(v3),一键保存/恢复复现实验
  • CSV 数据导出:46 字段完整数据(姿态、误差、角速度、协方差、控制力矩、轮转速、误差角、目标姿态、轨道状态),可直接用于 MATLAB/Python 离线分析
  • 中英文界面切换:顶栏一键切换,全部界面文本与状态实时翻译
  • 键盘快捷键Space 启停、R 重置、E 导出 CSV、O 切换姿态/轨道视图

🚀 快速开始

bash
复制代码
# 安装依赖 npm install # 启动开发服务器 npm run dev # 生产构建(多页:主控制台 + 使用手册) npm run build # 预览生产构建 npm run preview

浏览器访问 Vite 输出的本地地址(默认 http://localhost:5173)即可打开平台;系统使用手册位于 /manual.html,也可点击顶栏"使用手册"按钮在新窗口打开。

🎮 使用说明

界面为三栏任务控制台布局,自上而下分为六个区域:

区域位置职责
顶栏顶部视图切换(姿态/轨道)、开始/停止/重置、系统状态灯、告警指示灯、中英文切换、使用手册入口
控制面板左栏四个 Tab:仿真参数 / 控制闭环 / 传感器故障 / 轨道分析;底部为 CSV 导出与场景保存/加载
可视化区中栏上部3D 姿态/轨道视图,右上角 HUD 显示当前视图类型
统计面板中栏下部18 项实时统计指标
遥测与告警右栏真实姿态 / 星敏量测 / EKF 估计遥测值、轨道高度与速度、告警列表与计数
图表矩阵底部7 张实时曲线图

仿真参数(Tab 1)

  • 初始 Roll / Pitch / Yaw(°):卫星初始姿态角(默认 15°/10°/20°)
  • 角速度 ωx / ωy / ωz(°/s):三轴真实角速度(默认 0/0/2)
  • 星敏噪声 σ(°)、陀螺噪声 σ(°/s)、陀螺零偏 bx/by/bz(°/s)
  • 仿真步长(s):数值积分步长(默认 0.01)
  • 数据窗口长度:图表保留点数(100~10000,默认 1000)

参数在重置后生效:修改参数 → 点击顶栏"重置"(或按 R)。

控制闭环(Tab 2)

  • 启用姿态控制:PD 闭环总开关(默认关闭)
  • 反作用轮 / 磁力矩器:执行机构使能
  • 控制模式:三轴稳定 / 机动模式 / 对日定向
  • PD 增益:Kp=0.5、Kd=1.5(振荡时减小 Kp / 增大 Kd)
  • 目标姿态(°)、惯量矩阵 Ix/Iy/Iz(kg·m²)、轮最大力矩(N·m)、轮最大转速(rad/s)

传感器与故障注入(Tab 3)

  • 传感器配置:太阳敏/磁强计使能、入 EKF 开关、噪声与视场角、告警阈值(新息,默认 0.05)
  • 故障注入:星敏(失效/卡死/跳变)、陀螺(漂移增大/失效)、太阳敏/磁强计(失效)、反作用轮(停转/力矩偏差)

轨道与分析(Tab 4)

  • 轨道动力学:启用轨道传播 + 六根数配置(默认 500 km 近地轨道)
  • 高级分析:运行蒙特卡洛 / 敏感性分析 / 加载回放数据 / 多场景对比,结果自动下载 CSV

默认仿真条件

项目默认值
仿真步长0.01 s
初始姿态Roll 15° / Pitch 10° / Yaw 20°
角速度ωx=0 / ωy=0 / ωz=2 °/s(偏航可见)
星敏噪声 σ0.05°
陀螺噪声 σ0.008 °/s
陀螺真零偏0.01 °/s(三轴)
数据窗口1000 点
EKF 初值姿态=真实姿态,零偏=0,P=0.001,Q 姿态 1e-7 / 零偏 1e-9
姿态控制默认关闭
控制模式三轴稳定
PD 增益Kp=0.5,Kd=1.5
目标姿态0° / 0° / 0°
惯量矩阵Ix=5 / Iy=4 / Iz=3 kg·m²
反作用轮最大力矩 0.1 N·m,最大转速 300 rad/s,默认启用
磁力矩器默认关闭(最大磁矩 10 A·m²,磁卸载开启)
太阳敏感器默认启用,噪声 0.5°,半视场角 60°
磁强计默认启用,噪声 1e-7 T
传感器入 EKF太阳敏 / 磁强计均默认启用
故障注入全部默认关闭
告警阈值新息 0.05
轨道默认关闭传播,a=6878 km / e=0.001 / i=97.5°
蒙特卡洛50 次 / 30s

📊 CSV 导出字段

分组字段
时间time(s)
真实姿态 (°)trueRoll, truePitch, trueYaw
星敏测量 (°)starRoll, starPitch, starYaw
EKF 估计 (°)ekfRoll, ekfPitch, ekfYaw
滤波误差 (°)errRoll, errPitch, errYaw
角速度 (rad/s)omegaTrue/Gyro/Efk × X/Y/Z
协方差 (rad²)P_dthetaX/Y/Z(姿态误差方差)
协方差 (rad²/s²)P_bx/by/bz(陀螺零偏方差)
控制力矩 (N·m)tauX, tauY, tauZ(PD 控制器三轴输出)
反作用轮 (rad/s)wheelSpeedX/Y/Z(三轴轮转速)
控制误差角 (rad)errorAngle(姿态误差角)
目标姿态 (°)targetRoll, targetPitch, targetYaw
轨道位置 (m)orbitX, orbitY, orbitZ
轨道速度 (m/s)orbitVx, orbitVy, orbitVz
轨道状态orbitAlt(m), orbitSpeed(m/s)

🏗️ 项目结构

text
复制代码
├── index.html # 主控制台页面(三栏任务控制台布局) ├── manual.html # 系统使用手册页面(独立文档页) ├── vite.config.ts # Vite 多页构建配置(index + manual) ├── src/ │ ├── main.ts # 入口装配:仿真循环、事件绑定、快捷键、Tab 切换、i18n │ ├── core/ │ │ ├── types.ts # 共享类型定义(SimConfig / SimState / SimStats / SceneData) │ │ ├── math.ts # 四元数 / 欧拉角 / 矩阵 / RK4 积分工具 │ │ ├── noise.ts # Box-Muller 高斯噪声生成 │ │ ├── orbit.ts # 轨道动力学(开普勒根数 / 数值积分) │ │ └── sim.ts # 仿真核心:状态创建 / 重置 / 步进 / CSV 导出 │ ├── sensors/ │ │ ├── starTracker.ts # 星敏感器模型 │ │ ├── gyro.ts # 陀螺仪模型 │ │ ├── sunSensor.ts # 太阳敏感器模型(矢量量测 + FOV) │ │ ├── magnetometer.ts # 磁强计模型(简化地磁场 + 矢量量测) │ │ └── fault.ts # 传感器/执行器故障注入 │ ├── ekf/ │ │ └── attitudeEKF.ts # 6 维误差状态 EKF(预测 / 更新 / 多传感器融合) │ ├── control/ │ │ ├── pdController.ts # PD 姿态控制器(三种控制模式) │ │ ├── reactionWheel.ts # 反作用轮模型(饱和 / 动量管理) │ │ ├── magnetorquer.ts # 磁力矩器模型(磁控 / 磁卸载) │ │ ├── dynamics.ts # 刚体姿态动力学(RK4 积分) │ │ └── controlManager.ts# 控制管理器(模式切换 / 执行器分配) │ ├── analysis/ # 阶段4:高级分析 │ │ ├── monteCarlo.ts # 蒙特卡洛(收敛概率 / 平均 RMSE) │ │ ├── sensitivity.ts # 参数敏感性扫描 │ │ ├── comparison.ts # 多场景对比 │ │ └── replay.ts # CSV / JSON 数据回放 │ ├── visual/ │ │ ├── threeView.ts # Three.js 3D 姿态可视化(星空粒子) │ │ ├── orbitView.ts # 3D 轨道视图 │ │ └── charts.ts # ECharts 实时曲线(7 图) │ ├── i18n/ │ │ └── index.ts # 中英文界面切换 │ ├── ui/ │ │ ├── panel.ts # 控制面板 DOM 绑定与参数读写 │ │ ├── stats.ts # 实时统计指标(18 项) │ │ ├── scene.ts # 场景保存 / 加载(JSON v3) │ │ └── alerts.ts # 故障告警系统(新息检测 + 状态灯 + 列表) │ └── css/ │ ├── style.css # 设计令牌与组件基础样式(玻璃拟态) │ ├── main.css # 主控制台布局(三栏 + 图表矩阵) │ └── manual.css # 使用手册页样式 ├── public/ # 静态资源(favicon 等) └── package.json

🛠️ 技术栈

技术用途
Vite + TypeScript工程化与类型安全(多页构建)
Three.js三维姿态/轨道可视化(WebGL + OrbitControls)
ECharts实时时序曲线与协方差监控
gl-matrix四元数运算与矩阵数学

🎨 设计主题

采用 Modern Dark(星空白 + 发射蓝) 航天任务控制中心风格,玻璃拟态面板 + 霓虹辉光 + JetBrains Mono 等宽数字仪表,深色固定主题与 3D 视图背景统一:

令牌用途
背景#0B0B10页面底色(深空黑)
玻璃rgba(20,22,31,0.72)面板玻璃拟态背景(12px 圆角 + 内高光)
主色#3B82F6按钮、焦点、分段控制器、辉光
强调#F59E0BEKF 曲线、告警、导出按钮
弱化#94A3B8标签、次级文字
等宽JetBrains Mono遥测数值、统计指标、kbd

📖 使用手册

系统内置完整使用手册(/manual.html,顶栏按钮新窗口打开),覆盖快速上手、界面导览、全部参数说明、故障注入模式、高级分析工具、告警系统解读与常见问题。

开源地址

项目地址:https://gitee.com/zd_g/gnc-sim-enhanced

欢迎 Star、Fork、Issue 反馈!

⚠️ 说明

  • 本项目为教学/演示用途的姿态确定与控制仿真,阶段1(架构模块化)、阶段2(姿态控制闭环)、阶段3(多传感器融合 + 故障注入 + 告警)、阶段4(轨道动力学 + 蒙特卡洛 + 敏感性 + 回放 + 对比)均已完成
  • 太阳敏感器采用简化模型(假设安装在 +Z 轴,主轴 +Z 指向太阳),未建模真实视场遮挡与太阳方向随时间变化
  • 磁强计与地磁场为简化偶极子模型,磁场方向随时间绕 Z 轴进动(90 分钟轨道周期),非真实 IGRF
  • 故障检测基于量测新息模值超阈值(阈值可配置),属简化方案;真实系统常用残差平方加权(CUSUM / χ² 检验)
  • 图表保留点数由「数据窗口长度」参数控制(默认 1000 点),CSV 导出包含全部历史数据
  • 蒙特卡洛 / 敏感性分析为计算密集型任务,期间界面可能短暂卡顿,属正常现象
  • 场景文件含版本号(v3)且加载时严格校验,请使用同一平台版本保存与加载
  • 建议在 1920×1080 及以上分辨率全屏使用,以获得最佳单屏监控体验(窗口小于 1100px 或高度小于 860px 时自动降级为滚动布局)
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP