发布时间:2026/8/25 3:19:23
SpaceAST-一个C++航天仿真基础组件库 做航天任务仿真和分析的人手边多半摆着这么几个工具STK 功能全但贵且闭源英文文档、COM技术学习难度大GMAT 开源但接口和用法绑定 NASA 的习惯底层基础算法要自己抠出来才能复用Orekit 是纯 Java 的想嵌进 C 工程得走 JNI比较别扭Poliastro、astropy、pykep等 适合教学和快速原型NASA 的 SPICE 只管星历和几何不提供动力学。真要自己用C做仿真软件、使用一些基础算法往往没有一个特别顺手的。SpaceAST 是一个面向航天任务分析、设计与仿真的 C11 基础组件库从最底层的数学工具一路提供到高层的仿真对象模型和智能体接口。跨平台、模块化按需取用。编译产物是一组模块粒度的共享库Windows 下是 DLLLinux 下是 SO。本文按四层架构梳理它的功能全貌。一句话定位像 Qt 给图形界面提供控件那样SpaceAST 给航天任务分析提供基础组件轨道预报、坐标变换、力模型、访问窗口分析、碰撞检测、仿真对象、智能Agent……等可以按需取用拼成自己的软件。想只做轨道基础计算取 Math Core 就够想做完整的任务分析工具再把 Sim、Report、AI 等一层层叠起来。架构四层组织模块按层次分为四层基础层 → 引擎层 → 业务层 → 接口层层次模块接口层Cmd、COM、Script、AI业务层Sim、Report、Loader引擎层Core、Weather、SPICE基础层Math、Util基础层Math — 数学工具库提供航天动力学所需的底层数学支持是整个库的数值计算基石。主要功能线性代数 — 动态矩阵、固定大小矩阵、向量、下三角矩阵、稀疏矩阵与四元数姿态/旋转 — 轴角表示AngleAxis与旋转矩阵互转、欧拉角Euler支持 XYZ/ZYZ 等 14 种旋转序列可与矩阵/四元数互转、旋转矩阵Rotation、运动学旋转KinematicRotation与运动学变换KinematicTransform常微分方程求解 (ODE) — 固定步长积分器RK4、RK8、RKV8与自适应步长积分器RKF45、RKF56、RKF78、RKCK含事件检测器ODEEventDetector与状态观测器非线性方程求解 (NLE) — 割线法、Ridder、Brent、二分法等多种求根算法函数极值求解 — Brent、黄金分割等求极值算法插值 — 抽象插值接口Interpolator含拉格朗日插值器LagrangeInterpolator姿态转换 —AttitudeConvert系列提供四元数/欧拉角/轴角/旋转矩阵之间的完整转换Util — 通用工具库最大的基础模块提供序列化、解析、压缩、颜色、反射等通用基础设施。主要功能压缩解压 — 支持 tar/tgz/zip/7z 多种格式可探测后端ShellCOM/System/Tar/Raw解析器 — STK 配置文件与 CelesTrak 数据解析、SPICE 数据文件解析、Markdown、Json、Xml解析等颜色 — 基础颜色类型含rgb/rgba辅助函数与命名颜色表网络 — 支持发送 HTTP 网络请求单位量纲 — 提供单位量纲转换支持基本单位、派生单位、自定义单位等其他 — 字符串处理、文件系统管理、动态反射、C拓展容器等引擎层Core — 航天动力学核心引擎库中最大的核心模块提供坐标系统、力模型、轨道预报、大气模型、可见性分析等完整的航天动力学计算能力。主要功能时间系统 — 儒略日、闰秒、EOP、不同时间系统转换坐标与参考系 — 提供完整的坐标系层次结构地心惯性系ICRF、地固系BodyFixed、真赤道系TOD、平赤道系MOD、冻结系Frozen、体轴系BodyInertial/BodyRelated等力模型块系统 — 基于信号-块的架构通过命名信号Pos/Vel/Acc/AccTwoBody/AccGravity/AccDrag/AccSRP 等自动连接各功能块提供二体引力、第三体引力、重力场、大气阻力、太阳光压SRP、相对论效应、运动方程、质量模块、状态转移矩阵STM轨道预报 — SGP4、HPOP、J2/J4 解析解、二体运动以及 DE/SPK/Lagrange/二进制星历源轨道根数 — 经典轨道根数、春分点根数、德洛奈根数等定义与相互转换轨道设计器 — 圆轨道、冻结轨道、太阳同步轨道、闪电轨道、回归轨道、静止轨道等设计器大气模型 — 抽象Atmosphere基类具体实现包括MSISE90、NRLMSISE00、MSIS86、HarrisPriester、JacchiaRoberts、DTM2012、USSA1976访问窗口分析 —AccessEvaluator采样可见性约束条件通过 Brent 求根法精确定位时间区间边界返回满足约束的时间段列表碰撞检测 — 检测航天器之间的碰撞返回最接近时刻、最小距离、相对速度等数据数据库 — TLE数据库加载、CelesTrak卫星数据库Weather — 大气与空间环境模型提供大气密度、地磁场与辐射带模型。主要功能大气密度模型 — USSA1976、JacchiaRoberts、Harris-Priester、NRLMSISE-00、DTM-12地磁场模型 — IGRF13 国际地磁参考场辐射带模型 — AE8/AP8 辐射带电子/质子模型SPICE — 兼容 SPICE 的接口参考 NASA SPICE工具包的接口定义对核心算法进行轻量封装提供 SPICE 兼容的接口。函数签名对齐 SPICE底层却落在核心库对象上。熟悉 SPICE 的人可以直接上手又不必绑定整套 SPICE 工具链。SPICE 兼容函数帧变换 —pxform坐标系间变换矩阵、tipbod体固系相对惯性系变换旋转与姿态表示 —axisar轴角→矩阵、eul2m/m2eul欧拉角↔矩阵、q2m/m2q四元数↔矩阵、mxm/mxvg矩阵乘/矩阵-向量坐标转换 —latrec经纬高→直角、radrec半径/方位/仰角→直角、azlrec方位/仰角/距离→直角星历查询 —spkpos、spkgeo、spkgps、spkapo、spkssb等读取 SPK 星历时间系统 —utc2etUTC→星历时间 ET以及j2000/b1950/clight/dpr等常量光行差修正 —stelab、stlabx处理观测者与天体的相对运动状态变换 —rav2xf角速度/旋转→状态变换矩阵业务层Sim — 仿真对象模型定义场景中的各类对象卫星、飞行器、地面站、天线、传感器等及其运动与姿态模型(完善中…)。主要功能对象体系 — 完整的对象继承链SpaceObject→Spacecraft→Satellite以及Aircraft、Missile、LaunchVehicle、GroundStation、GroundVehicle、Facility、Ship、Submarine、Star、Planet、Asteroid、Antenna、Radar、Sensor、CommSystem、Constellation、AreaTarget、LineTarget等Mover 机制 — 所有运动对象的核心抽象组合MotionProfile运动模型与AttitudeProfile姿态模型生成星历并提供位置/速度查询运动模型 (Motion) — 二体运动、SGP4、HPOP可配置力模型航天器参数积分器、J2/J4 解析解、弹道导弹、SPICE 星历、SP3、GPS、大圆弧、外部星历、任务指令、实时/本地轨道预报等姿态模型 (Attitude) — 约 30 种预定义指向模式太阳指向、天底指向、固定/自旋指向、轨道速度坐标系VVLH、目标指向、GPS 姿态、导弹姿态、多段姿态、进动自旋、太阳法线指向黄道面法线等(完善中…)场景管理 —Scenario顶层容器以及覆盖定义CoverageDefinition、品质因数FigureOfMerit、链路Chain等分析概念(完善中…)Report — 报表与数据导出面向表格与图形化报表的数据组织与导出模块。主要功能数据序列 —DataSeries类型擦除的 1D 数据列底层VariantVector含统计方法均值/最值/求和/标准差数据组 —DataGroup命名数据组基类含按名称提取extract()方法提供约 20 种具体数据组类型直角坐标位置/速度、赤道轨道根数、欧拉角、四元数、球坐标、经纬高LLA/LLR、姿态、轨迹、Beta 角、改进轨道根数、点/向量等报表元素 —ReportElement数据元素模型数据源、格式化、聚合掩码、单位设置、线/点/填充样式报表结构 —ReportSection节、ReportLine行、ReportWriter写入器、ReportStyle样式Loader — 场景加载器解析 STK/GMAT 风格的场景与定义文件构建任务分析对象。主要功能约 60 个类型专用加载器每个对应一个对象类型ScenarioLoader、ConstellationLoader、ForceModelLoader、ObjectLoader、SensorLoader、RadarLoader、PlanetLoader、StarLoader、FacilityLoader、PropagatorLoader、ManeuverLoader等运动模型 SAX 加载器 —MotionHPOPSax、MotionJ2AnalyticalSax、MotionJ4AnalyticalSax、MotionOrbitDynamicsSax、MotionOrbitDynamicsKeplerianSax等LoaderContext— 加载过程上下文父对象指针、场景目录、文件路径GMATScriptParser— GMAT 脚本解析器规划中加载 API 模式 — 每个类型对应一个 C-API 导出函数aLoadX(filepath, object)返回errc_t接口层Cmd — 命令分发引擎将文本命令字符串路由到已注册的处理函数。主要功能CommandDispatcher— 持有CommandTrie前缀树execute()路由命令字符串addRuleHandler()注册命令模板CommandRouting—CommandTrie基于命令 token 的树结构节点携带参数数量与可选处理函数编译时参数解码 —REGISTER_COMMAND/COMMAND_RULE宏在编译时根据命令模板字符串推导参数类型公共 API —aExecuteCommand(cmd)/aExecuteCommand(cmd, result)CommandResult为std::vectorstd::stringCOM — COM 自动化接口通过 Microsoft COM 将核心引擎能力暴露给脚本语言VBScript、Python 等。主要功能COMAPI—aComObjectRoot()返回根IDispatch*aComGetObject()将原生对象包装为 COM 接口ATL COM 共类 —CObject、CScenario、CSatellite基于CComObjectRootEx/CComCoClass暴露IObject/IDispatch/IUnknownIObjectImpl— 使用IDispatchImpl从 DLL 加载类型库桥接原生子对象ComObjectManager— 单例对象池维护原生对象到 COM 包装器的映射Script — 脚本引擎完整的脚本语言实现从词法分析、语法解析到 AST 解释执行并提供外部语言执行器。主要功能表达式系统 —Expr为所有 AST 节点基类支持多态求值eval()、访问者模式accept(ExprVisitor)与宏展开expand()解析器 — 递归下降解析器覆盖赋值、条件、逻辑/位/关系/移位/加法/乘法/指数/区间表达式及 if/while/for 块语句解释器 —Interpreter解析脚本并基于符号作用域ISymbolScope执行含调用栈跟踪调试器 —Debugger/Breakpoint提供断点、单步调试与变量检查能力规划中函数系统 —Function为可调用脚本函数参数函数体外部脚本执行器 —ActiveScriptExecutor通过 COMIActiveScript接口运行 JScript/VBScriptScriptExecutor抽象层支持 Python、MATLAB、JScript、VBScript、Julia、Lua 等多种语言AI — AI 对话集成将大语言模型LLM对话能力集成到应用中。主要功能LLM 客户端 — 统一的LLMClient接口chat/chatStream具体实现OpenAIOpenAI 兼容 API、DeepSeek继承 OpenAI指向 DeepSeek 端点、Anthropic规划中对话管理 —Chat阻塞式对话 APIaChat系列函数ChatMessages消息历史管理智能体框架 —ChatAgent抽象基类含流式runStreamChatEventHandlerAssistantAgent助手实现UserProxyAgent用户代理群聊 —BaseGroupChat/RoundRobinGroupChat多智能体轮询对话工具调用 —ChatTool/ChatTools支持 LLM 函数调用SSE 流解析 —SSEParser支持 Server-Sent Events 流式响应解析终止条件 —TerminationCondition/TextMentionTermination基于文本内容的对话终止判断配置管理 —LLMConfig模型名、温度、额外请求体ChatConsole控制台交互一个能跑的真实例子下面用几段代码展示几个典型用法均从仓库示例里节选按坐标变换 → 快速预报 → 高精度预报 → 可见性分析的顺序由浅入深。坐标变换J2000 到 ECF#includeast/FrameTransform.hpp#includeast/TimePoint.hpp#includeast/Vector.hpp#includeast/Literals.hppAST_USING_NAMESPACEusingnamespace_AST literals;intmain(){// 创建时间点TimePoint tpTimePoint::FromUTC(2026,1,1,0,0,0);// J2000 坐标_km 字面量自动换算成米Vector3d vecJ2000{1000_km,2000_km,3000_km};// 转换到 ECF 坐标Vector3d vecECF;aJ2000ToECF(tp,vecJ2000,vecECF);printf(J2000坐标: %.3f m, %.3f m, %.3f m\n,vecJ2000[0],vecJ2000[1],vecJ2000[2]);printf(ECF坐标: %.3f m, %.3f m, %.3f m\n,vecECF[0],vecECF[1],vecECF[2]);return0;}几百行就能看到这个库的用感_km这种字面量替代裸数字函数直接做变换不搞一堆临时对象。快速预报从 TLE 算国际空间站两行根数TLE是 NORAD 发布的卫星轨道标准格式SGP4 是对近地卫星做快速预报的标配。#includeast/TLE.hpp#includeast/SGP4.hpp#includeast/TimePoint.hpp#includeast/Vector.hpp#includeast/RunTime.hpp#includecstdioAST_USING_NAMESPACEintmain(){// 国际空间站 (ISS) 的两行根数constchar*line11 25544U 98067A 24185.54861111 .00012345 000000 22222-3 0 9991;constchar*line22 25544 51.6400 210.1234 0005000 100.0000 260.0000 15.50000000123456;// 解析 TLE构造 SGP4 预报器封装类TLE tleTLE::FromLines(line1,line2);SGP4sgp4(tle);// 预报 TLE 历元后约 90 分钟的位置速度默认输出在 TEME 坐标系TimePoint tpTimePoint::FromUTC(2024,7,3,14,40,0);Vector3d r,v;sgp4.getPosVel(tp,r,v);printf(ISS 位置 (km): %s\n,r.toString().c_str());printf(ISS 速度 (km/s): %s\n,v.toString().c_str());return0;}TLE::FromLines()解析两行根数SGP4类把底层细节收起来getPosVel()按时间点取位置速度。想换坐标系改调getPosVelIn(frame, tp, r, v)就行。高精度预报HPOP 与可配置力模型想要精度就得把力模型配全。HPOP是数值积分的高精度预报器力模型通过块来配。#includeast/HPOP.hpp#includeast/HPOPForceModel.hpp#includeast/TimePoint.hpp#includeast/Vector.hpp#includeast/Literals.hpp#includeast/RunTime.hpp#includeiostreamAST_USING_NAMESPACEusingnamespaceast::literals;intmain(){// 力模型JGM3 重力场8x8HPOPForceModel force_model;force_model.gravity().model_JGM3;force_model.gravity().maxDegree_8;force_model.gravity().maxOrder_8;HPOP hpop;hpop.setForceModel(force_model);hpop.initialize();// 近地初始状态TimePoint startTimePoint::FromUTC(2026,1,1,0,0,0);Vector3d pos{7000_km,0.0,0.0};Vector3d vel{0.0,7.5_km_s,1.0_km_s};// 预报 1 天autostopstart24*3600.0;hpop.propagate(start,stop,pos,vel);std::cout1 天后位置 (km): pos.norm()/1000.0 速度 (km/s): vel.norm()/1000.0std::endl;return0;}setForceModel()里可以配 JGM3 重力场的阶数要不要第三体、要不要大气阻力。任务分析地面站可见性窗口构造一颗卫星、一座地面站然后问卫星过站时哪些时段连线不被地球挡住#includeast/Facility.hpp#includeast/Satellite.hpp#includeast/Mover.hpp#includeast/MotionTwoBody.hpp#includeast/StateKeplerian.hpp#includeast/EventIntervalExplicit.hpp#includeast/CelestialBody.hpp#includeast/OrbitElement.hpp#includeast/BodyObstructionConstraint.hpp#includeast/AccessEvaluator.hpp#includeast/FixedStepStepper.hpp#includeast/TimePoint.hpp#includeast/TimeIntervalList.hpp#includeast/Literals.hpp#includeast/RunTime.hpp#includecstdioAST_USING_NAMESPACEusingnamespaceast::literals;intmain(){// 1) 构造一颗二体运动卫星近地圆轨道28.5° 倾角CelestialBody*earthaGetEarth();autoframeearth-makeFrameICRF();automotionMotionTwoBody::New();autostateStateKeplerian::New();ModOrbElem elem{};elem.rp_6678137.0;// 近地点半径 (m)elem.e_0.0;// 圆轨道elem.i_deg2rad(28.5);elem.raan_deg2rad(0.0);elem.argper_deg2rad(0.0);elem.trueA_deg2rad(0.0);TimePoint epochTimePoint::FromUTC(2026,7,22,4,0,0.0);state-setFrame(frame.get());state-setState(elem);state-setStateEpoch(epoch);motion-setInitialState(state);motion-setPropagationFrame(frame.get());motion-setInterval(EventIntervalExplicit::New(epoch,epoch86400.0));motion-setStepSize(60.0);autosatnewSatellite();sat-setName(Satellite1);sat-setMotionProfile(motion);sat-generateEphemeris();// 2) 建一座地面站Facility*facnewFacility();fac-setLatitude(deg2rad(40.0));fac-setLongitude(deg2rad(-75.0));fac-setAltitude(0.0);// 3) 可见性约束连线不被地球遮挡BodyObstructionConstraintconstraint(sat,fac,earth);// 4) 60s 粗采样 Brent 求根精化边界FixedStepStepperstepper(60.0);AccessEvaluator evaluator;evaluator.setConstraint(constraint);evaluator.setStepper(stepper);TimeIntervalList intervals;evaluator.evaluate({epoch,epoch86400.0},intervals);// 5) 打印每个可见窗口for(size_t i0;iintervals.size();i){TimeInterval tiintervals[i];printf([%zu] %s duration%.1f s\n,i,ti.toString().c_str(),ti.duration());}return0;}AccessEvaluator先按 60 秒粗采样再用 Brent 求根把可见/不可见的切换时刻精化到秒级输出一天里几段过站窗口。想加传感器视场再叠一个FieldOfViewConstraint或者用AndConstraint把视线和视场一起满足aEvaluateAccess还能一次处理多个约束。如果你的工作是航天仿真或者手头也缺这么一块地基可以把它拿来当工具箱。二进制库下载https://github.com/space-ast/ast/releases本文梳理自文档站与源码示例。文中模块名、API 与架构以仓库最新版本为准。GitHubSpaceASTGiteeSpaceASTGitCodeSpaceAST文档SpaceAST

相关新闻

2026/8/25 3:19:23

制导器件真空共晶焊接设备技术详解:从原理到应用

真空共晶炉:半导体界的“超级焊接师” 你是否好奇,那些精密的小芯片是如何被封装起来的?今天,我们就来聊聊半导体封装中的一个秘密武器——真空共晶炉。想象一下,如果把芯片比作是一个精致的艺术品,那么真空…

2026/8/25 3:14:23

Git Push全流程避坑指南:从安全检查到团队协作最佳实践

在团队协作开发中,git push是代码共享与集成的关键一步,但许多开发者都曾因推送前的疏忽而陷入困境:误推了敏感信息、提交了错误的文件、破坏了主分支历史,甚至因权限问题导致整个团队的工作流中断。这些问题不仅浪费大量时间回滚…

2026/8/25 5:59:35

OpenAI API密钥级用量追踪:精细化成本管理与多项目分摊实战

这次我们来看一个对开发者、团队和公司财务都至关重要的功能更新:OpenAI 支持按 API 密钥追踪用量与支出。对于任何将 OpenAI 的 GPT、DALLE、Whisper 等模型集成到产品、服务或内部工作流中的用户来说,成本控制和管理都是一个核心痛点。过去&#xff0c…

2026/8/25 5:59:35

机器视觉采用Jakarta EE 和Python深度学习框架的技术方案

如果要为现有的 Jakarta EE 11 业务应用(采用经典的 JSF EJB JPA 三层架构)增加一个类似 IBM Maximo 的机器视觉(模型训练与推理)模块,最核心的原则是“业务归 Java,AI 归 Python,通过微服务/…

2026/8/25 5:59:35

AI Agent从副驾驶到代理人:打通支付闭环的技术架构与挑战

1. 项目概述:当AI Agent开始“掏钱”最近,一个名为“龙虾”的OpenClaw项目,与支付宝的AI付功能进行了一次引人注目的结合尝试。这听起来可能有点抽象,但简单来说,就是让AI智能体(Agent)不再仅仅…

2026/8/25 5:59:35

Java后端面试高频考点与深度解析

1. Java后端高频面试题整理的必要性作为Java后端开发者,面试准备是职业生涯中无法回避的重要环节。我整理这份高频面试题集的初衷很简单:市面上虽然有不少面试题库,但要么过于零散不成体系,要么内容陈旧跟不上技术发展。更重要的是…

2026/8/25 5:59:35

LangChain Agent集成MCP协议:实现AI工具即插即用的标准化方案

如果你正在开发AI Agent,可能已经遇到了这样的瓶颈:Agent能理解你的指令,也能调用几个基础工具,但一旦需要连接数据库、读取文件、调用第三方API,就得写大量胶水代码。更头疼的是,每个新工具都得重新集成、…

2026/8/25 1:04:19

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 1:12:32

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 8:17:29

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 0:04:14

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

2026/8/25 0:04:14

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/25 1:08:14

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…