目录

🛰️ 航天仿真算法库 SpaceAST

Codacy Badge codecov build C++ License Platform

English | 中文

space-ast 是一个专注于航天仿真领域的算法库。

它提供了轨道动力学、姿态仿真、轨迹规划、测控窗口分析等核心算法的现代C++实现,为航天任务分析和设计提供计算基础。

预编译二进制包与自安装源码包的下载地址:https://github.com/space-ast/ast/releases

如果你想要了解更多,请参考:使用指南, API文档, Github以及 Gitee 和 GitCode。

主要功能模块

数学模块

提供航天动力学所需的底层数学支持,是整个库的数值计算基础。

  • 线性代数:矩阵、向量以及相关运算函数;
  • 姿态:四元数、轴角、欧拉角等表示方法与转换函数;
  • 坐标转换:包括位置坐标的转换,以及附带速度转换的运动学版本,支持坐标转换的任意组合与求逆;
  • 常微分方程:固定步长积分器(RK4、RK8、RKV8)与自适应步长积分器(RKF45、RKF56、RKF78、RKCK),含事件检测器与状态观测器;
  • 非线性方程:割线法、Ridder、Brent、二分法等多种求根算法;
  • 函数极值:Brent、黄金分割等求极值算法;
  • 插值:抽象插值接口与拉格朗日插值器;

工具模块

提供解析、压缩、网络、反射等通用基础设施。

  • 单位量纲:提供高效灵活的量纲类型与单位类型,支持基本运算、单位转换、自定义单位等;
  • 反射:提供运行时类型信息,支持动态类型检查、属性访问等操作;
  • 解析器:提供 JSON、XML、Markdown、DAF、键值文件等格式的解析器;
  • 压缩解压:支持 tar/tgz/zip 多种格式的压缩解压操作;
  • 网络:提供文件下载、HTTP请求等支持;
  • 其他:字符串处理、文件系统、日志系统、国际化、颜色、C++拓展容器等;

太空环境模块

提供大气密度、地磁场与辐射带模型。

  • 大气模型:USSA1976、JacchiaRoberts、Harris-Priester、NRLMSISE-00、MSIS-86、MSISE-90、DTM-2012 等模型;
  • 地磁场模型:IGRF 国际地磁参考场;
  • 辐射带模型:AE8/AP8 辐射带电子/质子模型;

核心计算模块

提供坐标系统、力模型、轨道预报、轨道设计、可见性分析、碰撞检测等完整的航天动力学计算能力。

  • 时间系统:包括高精度时间点类型、儒略日、闰秒、EOP、不同时间系统转换;
  • 坐标系统:提供完整的坐标系层次,包括ICRF、J2000、天体惯性系、天体固连系、真赤道系、平赤道系、VVLH、VNC等;
  • 轨道预报:SGP4、HPOP、J2/J4 解析解、二体、Vinti等轨道预报器;
  • 星历加载:支持加载DE、SPK、STK等格式的星历文件;
  • 力模型:提供点质量引力、重力场、三体引力、大气阻力、太阳光压等摄动力模型;
  • 轨道根数:经典轨道根数、春分点根数、德洛奈根数、球坐标、大地坐标、B平面状态等状态量的定义与相互转换;
  • 轨道设计器:冻结轨道、太阳同步轨道、闪电轨道、回归轨道、静止轨道等轨道设计器;
  • 访问窗口分析:可精确计算满足给定约束的时间窗口,并支持约束之间的任意逻辑组合;
  • 碰撞检测:检测航天器之间的碰撞,返回最接近时刻、最小距离、相对速度等数据;
  • 数据库:TLE数据库加载、CelesTrak卫星数据库加载;

其他扩展模块

  • 仿真模块: 定义各类对象(飞行器、地面站、天线、传感器等)及其运动与姿态模型;
  • AI模块: 提供与大语言模型集成的框架,支持工具调用、Agent定义、群聊等;
  • 脚本模块: 提供内置的脚本解释器,并提供了外部脚本语言执行器;
  • 可视化模块: 提供仿真数据的二维和三维可视化功能;
  • 用户界面模块: 提供算法组件的交互式界面控件,以支持参数配置、结果展示等;
  • SPICE模块: 对核心算法进行轻量封装,提供与 NASA SPICE 兼容的接口;
  • 场景加载模块: 解析 STK/GMAT 格式的配置文件,构建仿真对象;
  • Web Assembly模块: 提供Web Assembly接口,支持在浏览器中调用算法;
  • Python模块: 提供Python接口,支持在Python环境中调用算法;

快速开始

环境要求

  • C++11兼容编译器 (MSVC 2015+, GCC 5+, clang)
  • xmake 2.9+

构建项目

git clone https://github.com/space-ast/ast.git --depth=1
cd ast
xmake

项目架构

ast/
├── data/          # 数据
├── docs/          # 文档
├── examples/      # 示例代码
├── include/       # 头文件
├── projects/      # 示例工程
├── repo/          # 第三方库配置文件
├── scripts/       # 工具脚本
├── src/           # 源文件
├── test/          # 单元测试
└── thirdparty/    # 第三方库

API 设计理念

  • 简单易用:提供简洁的API接口,方便开发者快速集成到项目中。
  • 高度可定制:允许开发者根据需求自定义算法参数和行为。
  • 性能优化:针对航天仿真场景,对关键算法进行了性能优化。

代码规范

命名规范

项目采用以下命名约定:

// 命名空间 ast
namespace ast
{
    // 类型 - 无前缀
    class OrbitPropagator;

    // 全局函数 - 单个'a'前缀
    aPropagateOrbit();
    aSolveLambert();
    aRotateQuaternion();

    // 枚举 - 'E' 和 'e' 前缀
    enum EFrame { eECI, eECEF }; 

    // 常量 - 'k' 前缀
    const kEps15 = 1e-15;
}

在以上命名规范里,所有以小写字母开头的都有值或者地址

注释规范

遵循Doxygen注释规范,函数、文件、类的注释采用///格式,其他多行注释也可采用/*! ... */格式。

  • 函数注释:每个函数都需要包含详细的注释,包括参数说明、返回值、异常情况等。

  • 类注释:每个类都需要包含详细的注释,包括功能描述、成员变量、成员函数等。

  • 文件注释:每个源文件都需要包含文件头注释,包括文件名、作者、日期、版权信息等。

参与贡献

我们欢迎各种形式的贡献!无论是代码改进、文档完善、bug报告还是新功能建议,都是对项目的宝贵支持。

贡献流程

  1. Fork 本仓库
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'feat: 新增某功能特性')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

请确保代码遵循项目的编码规范,并添加相应的测试用例。

许可证

本项目采用 Apache2.0 许可证 - 详见 LICENSE 文件。

联系我们

参考资料

本项目的开发参考和使用了很多资料与工具,感谢所有开源社区贡献者的辛勤工作、航天仿真领域研究人员的理论贡献,以及行业标杆软件的启发,这些宝贵的资源为ast项目的开发提供了坚实的基础。

开源代码

  • Orekit: Java语言编写的航天动力学库,提供丰富的轨道和姿态算法
  • GMAT: 通用任务分析工具,NASA开源的航天任务分析软件
  • Pagmo2: 欧洲空间局开发的并行全局优化库
  • PyGMO2: Pagmo2的Python绑定,用于科学计算的优化工具
  • PyKEP: 欧洲空间局的航天动力学Python库,专注于轨道优化
  • brahe: 一个Rust航天动力学库,可用于研究和工程应用
  • satkit: 一个Rust航天动力学库,实现了一些航天中的基础功能
  • AstroLib: 航天/卫星建模与仿真算法库
  • Eigen: 高性能C++模板库,用于线性代数、矩阵和向量运算
  • Scipy: 一个Python库,用于科学计算和技术计算,提供了许多数学、科学和工程领域的功能
  • GNU Octave: 开源数值计算软件,提供与MATLAB兼容的语法
  • Hipparchus: 一个Java数学库,提供了丰富的数学函数和算法
  • Qt: 跨平台C++图形用户界面应用程序开发框架
  • Python: 流行的通用编程语言,在科学计算领域广泛应用
  • julia: 一种高性能的动态编程语言,专为科学计算和数值分析而设计
  • glibc: GNU C库,提供了C语言标准库的实现
  • abseil: 一个C++库,提供了许多常用的功能,如字符串处理、内存管理、并发编程等,是Google开源的一个项目

行业软件

以下行业软件为航天仿真领域的标杆工具,其功能设计为本项目提供了重要参考:

  • STK: Ansys公司(原AGI)的商业航天任务分析、设计与可视化软件,广泛用于航天任务全生命周期
  • FreeFlyer: a.i. solutions公司的商业航天任务设计与分析软件,支持轨道规划、机动分析和星座设计
  • Copernicus: NASA开发的航天任务轨迹设计与优化软件,支持从近地轨道到深空探测的全场景轨迹规划

项目依赖

工具链

  • Xmake: 基于Lua的现代化C/C++构建工具

第三方库

项目所依赖的第三方库均为可选项,用户可以根据需要选择是否引入

  • fmt: 用于格式化字符串的C++库,提供了类似于Python的格式化语法
  • Qt: 跨平台C++图形用户界面应用程序开发框架
  • SPICE: NASA导航和辅助信息设施(NAIF)提供的一套软件库
  • Matplot++: 用于绘制2D和3D图表的C++库,提供了类似于MATLAB的语法
  • agg: 提供高质量 2D 矢量图形渲染能力,支持子像素分辨率和抗锯齿
  • gtest: C++单元测试框架,用于编写和运行单元测试
  • benchmark: C++性能测试框架,用于测量代码性能指标
  • vtk: 一个跨平台的可视化工具库,用于渲染和交互显示科学数据
  • replxx: 提供交互式命令行输入功能,包括行编辑、历史记录、Tab 补全、提示符等

项目名称灵感

ast 源自希腊语词根 astēr(ἀστήρ),意为星辰,天然带有星际空间的意象,并与 astronomy(天文学)、astronaut(宇航员)、astrodynamics(航天动力学)、asteroid(小行星)等同源。专业上,AST 可展开为:

  • Aerospace Simulation Tool: 航天仿真工具
  • Advanced Space Technology: 先进空间技术
  • Astrodynamics Solver Tool: 航天动力学求解工具
关于

🛰️航天仿真算法库,提供了轨道力学、姿态控制、轨迹规划等核心算法的现代C++实现。

417.2 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号