# orbitdynamics **Repository Path**: han-2021/orbitdynamics ## Basic Information - **Project Name**: orbitdynamics - **Description**: 卫星轨道动力学 - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-12-14 - **Last Updated**: 2026-10-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OrbitDyn —— 航天器轨道动力学 C++ 程序库 OrbitDyn 是一个用 C++ 编写的航天器轨道动力学计算程序库,用于卫星/航天器轨道的精密外推、轨道机动与编队、低推力转移、月球/火星/深空轨道计算等。 - 当前版本:`2.1.0`(代号 `Net`,见 `orbitdyn/OrbitDyn.h`) - 许可证:Apache License 2.0(见 `LICENSE`) - 作者:Han --- ## 主要特性 | 类别 | 能力 | | --- | --- | | 数值积分 | RKF7(8) 自适应步长积分器、Gill4 定步长积分器(快速外推) | | 引力场 | 支持 EGM2008 / EGM96 / WGS84 / WGS84_EGM96 / JGM2 / JGM3 / GLGM2 / LP165P,可达 70×70 阶(带谐 + 田谐) | | 行星历表 | JPL DE405、DE421(默认),另含太阳/月球解析星历(`NONE_DATA_FILE_MODE` 下无需数据文件) | | 大气模型 | NRLMSISE-00、美国标准大气 1976(SA76) | | 摄动力 | 地球非球形引力、大气阻力、太阳/月球中心引力、太阳光压(球/CODE/GPS-M/Box-wing)、地球反照、固体潮、海潮、后牛顿效应、热辐射压、月球非球形引力与物理天平动、火星/金星/木星/土星引力 | | 坐标与时间 | J2000 惯性系、地固系(ECF)、VVLH/VNC 轨道系、月心惯性/月固系;岁差、章动、极移、格林尼治恒星时;UTC/UT1/TDT 等时间系统 | | 卫星类型 | `CSatellite`(地球卫星)、`CRapidSatellite`(快速外推)、`CLEO`、`CGEO`、`CMoonSat`、`CMarsSat`、`CLibrationSat`(平动点) | | 其他 | 地面站可见性分析、星下点计算、瞬时/平均根数互转、相对运动(RIC/C-W)、HDF5 仿真数据文件、JSON 轨道参数、MATLAB/MEX 接口、SOFA 天文基础库 | 矩阵/矢量运算基于 **Armadillo**(`orbitdyn/armadillo_bits`,底层 BLAS/LAPACK/MKL)。 --- ## 目录结构 ``` orbitdynamics/ ├─ orbitdyn/ 核心库源码(编译为 OrbitDyn.dll / libOrbitDyn.dylib) │ ├─ Satellite.h/.cpp 卫星基类与派生类、摄动项宏定义 │ ├─ CentralBody.h/.cpp 中心天体(地球/太阳/月球/火星)、引力场、大气、EOP │ ├─ PlanetEphemeris.h/.cpp DE405 / DE421 星历读取与插值 │ ├─ CDateTime.h/.cpp 时间系统(UTC/UT1/TDT/MJD/JD/儒略世纪数) │ ├─ Kepler.h/.cpp 开普勒根数、根数与位置速度互转 │ ├─ Facility.h/.cpp 地面站、可见性、当地坐标系 │ ├─ Utility.h/.cpp 摄动加速度、坐标转换、岁差章动、解析星历等工具函数 │ ├─ Msise00.* + nrlmsise-00.* NRLMSISE-00 大气模型 │ ├─ LibrationSat.* / Quaternion.* / Euler.* / StopCondition.* / Maneuver.h │ ├─ SimDataFile.h HDF5 仿真数据文件 │ ├─ armadillo_bits/ Armadillo 线性代数库(自带) │ ├─ hdf5/ HDF5 头文件(自带) │ └─ nlohmann/ JSON 库(自带) ├─ maneuver/ 轨道机动类命令行工具(LEO/GEO 转移、保持、离轨、构形、地面轨迹等) ├─ LowThrust/ 小推力转移与姿轨耦合控制程序(GTO2GEO、LEO2GEO、LEOKeep 等) ├─ test/ 单元测试与示例程序(外推、月轨、编队、DE405/DE421 对比等) ├─ DE421/ DE421 星历的 C 读写工具与测试文件 ├─ sofa/ IAU SOFA 天文基础库(C 版,232 个源文件) ├─ Eigen/ 第三方 Eigen 库 ├─ matlab/ MATLAB 辅助函数与 MEX 接口(mexOrbitDyn / mexDE405 / mexDE421 / mexsofa) ├─ data/ 数据文件:引力场(*.grv/*.gfc)、星历(planetEph.405/.421)、EOP、LeapSecond、大气密度等 ├─ lib/ 预编译第三方静态库 ├─ bin/ 编译产物与运行时 DLL(OrbitDyn32/64、hdf5、BLAS/LAPACK、sofa) ├─ doc/ 文档(NRLMSISE-00 说明、Armadillo 文档) ├─ oldversion/ 历史版本压缩包 └─ aocs/ attdyn/ geometry/ 姿轨控、姿态动力学、几何等零散模块 ``` --- ## 依赖与构建 ### 依赖 - C++ 编译器:MSVC(推荐,VS2005 及以上)或 GCC/Clang - CMake ≥ 3.5 - Armadillo(已随源码附带)、BLAS/LAPACK(Windows 下使用 `bin/` 中的 DLL;macOS 使用 Accelerate 框架) - HDF5(头文件已附带,库文件在 `lib/`,DLL 在 `bin/`) - Boost ≥ 1.66.1(可选,CMake 未找到仅告警) ### CMake 构建(跨平台) ```bash cmake -S . -B build cmake --build build --config Release ``` 顶层 `CMakeLists.txt` 会依次构建 `orbitdyn`(核心动态库)、`maneuver`、`LowThrust`、`DE421`、`sofa`,并将 `test` 中的示例编译为可执行程序(`BUILD_SOFA`/`BUILD_TEST` 开关控制)。 ### Visual Studio 仓库中已提供 `CMakeSettings.json`(x64-Debug / Ninja)与 `orbitdynamics.props` 属性表,可直接用 VS 打开目录进行 CMake 工程构建。 ### 运行前提 程序通过环境变量 **`OrbitDyn`** 定位 `data` 目录;若未设置,则退回到当前工作目录下的 `data`。运行前请把 `bin/` 中的 DLL 放到可执行文件可搜索的路径,并确保 `data/` 中的引力场、星历、EOP 文件可用。 --- ## 快速上手 ```cpp #include using namespace Constant; int main() { CSatellite sat; // 初始历元与轨道根数 [a(km), e, i(rad), Ω(rad), ω(rad), M(rad)] CDateTime epoch(2006, 5, 1, 0, 0, 0); Kepler orbit(7157, 0.001, 98.5*RAD, 60*RAD, 90*RAD, 60*RAD); // 卫星参数 sat.Mass0 = 1000; // kg sat.Cr = 1.0; // 光压系数 sat.LightPressArea= 20.0; // m^2 sat.Cd = 2.2; // 大气阻力系数 sat.AirDragArea = 20.0; // m^2 sat.Initialize(epoch, orbit); // 设置力学模型:21 阶引力场 + 指定摄动项 sat.SetForce(21, ODP_EARTH_ZONAL | ODP_EARTH_TESSERAL | ODP_AIR_DRAG | ODP_SOLAR_CENT | ODP_SOLAR_PRESSURE | ODP_LUNAR_CENT | ODP_POSTNEWTON); // 外推一天,步长 60s for (double t = 0; t < 86400; t += 60) { cout << t << TAB << sat.Pos().t() << TAB << sat.Vel().t() << endl; sat.Propagate(60, 60); } return 0; } ``` 更多可编译示例见 `test/`(如 `test_orbit_propagator.cpp`、`test_formation.cpp`、`test_circle_moon.cpp`)。 ### 常用摄动项宏(`orbitdyn/Satellite.h`) ``` 地球卫星:ODP_EARTH_ZONAL / ODP_EARTH_TESSERAL / ODP_AIR_DRAG / ODP_LUNAR_CENT / ODP_SOLAR_CENT / ODP_SOLAR_PRESSURE / ODP_EARTH_ALBEDO / ODP_SOLID_TIDES / ODP_OCEAN_TIDES / ODP_POSTNEWTON / ODP_THERMAL_RADIATION_PRESSURE 月球卫星:ODP_LUNAR_ZONAL / ODP_LUNAR_TESSERAL / ODP_LUNAR_NON_SPHERE / ODP_EARTH_CENT / ODP_LUNAR_TIDES / ODP_LUNAR_LIBRATION 深空探测:ODP_VENUS_CENT / ODP_MARS_CENT / ODP_JUPITER_CENT / ODP_SATURN_CENT 常用组合:ODP_EARTH_ALL / ODP_GEO / ODP_LEO / ODP_LUNAR_SAT ``` 单位约定:长度 km,时间 s,速度 km/s,加速度 km/s?,角度 rad(常用 `RAD`、`DEG` 常量换算)。 --- ## 命令行工具 ### `maneuver/` —— 轨道机动(CMake target folder `AOC`) `leotrans`、`leocap`、`leodeorbit`、`sap1`、`sap2`、`groundtraj`、`AdjustTime`、`attdet`、`attctrl`、`consformation`、`geocolocationE`、`geocolocationI`、`geodeorbit`、`geoEWsk`、`geoNSsk`、`geotrans`。 多数以命令行参数 + 配置文件(`*.txt`)方式运行,例如: ``` leotrans a1 a2 out.txt # 霍曼转移速度增量 ``` ### `LowThrust/` —— 小推力与姿轨耦合 `lt`、`GTO2GEO`、`LEO2GEO`、`LEOKeep`、`Ctrla`、`Ctrli`、`LTOrbitCal`、`LTOrbitControl`、`LTAttiCal`、`LTAttiControl`、`Example2`。 ### `test/` —— 示例与验证 `test_orbit_propagator`、`test_orbit_maneuver`、`test_formation`、`test_circle_moon`、`test_earth_lunar_transfer`、`test_DE405_DE421`、`test_facility`、`test_mean_inst`、`test_RIC`、`test_sofa_Gst`、`testjson`、`testBackward`、`checkmemoryleak` 等 17 个可执行程序。 --- ## MATLAB 接口 `matlab/` 目录提供 200+ 个 `.m` 辅助函数(坐标转换、时间换算、SGP4、Lambert、C-W 制导、绘图等)以及预编译 MEX: - `mexOrbitDyn.mexw64` / `mexOrbitDyn.mexmaci64` —— 轨道外推 - `mexDE405.mexw64` / `mexDE405.mexmaci64`、`mexDE421.*` —— 行星历表 - `mexsofa.m`、`sofa.mexw32` —— SOFA 天文算法 将 `matlab/` 加入 MATLAB 路径即可调用,配合 `h5view.m` / `h5import.m` 可读取 C++ 端输出的 HDF5 结果。 --- ## 数据文件(`data/`) | 文件 | 说明 | | --- | --- | | `EGM2008.grv`、`EGM96.grv`、`JGM2/3.grv`、`GLGM2.grv`、`LP165P.grv`、`WGS84*.grv`、`*.gfc` | 地球/月球引力场模型 | | `planetEph.421`(默认)、`planetEph.405`、`plteph.405` | JPL 行星历表 | | `EOP.dat`、`EOP_all.txt`、`EOP_old.dat` | 地球自转参数(极移、dUT1) | | `LeapSecond.dat` | 闰秒表 | | `atmos.den`、`SolFlx_Schatten.dat` | 大气密度与太阳辐射通量 | | `MarsAttitude2000.rot`、`Mars50c.grv` | 火星姿态与引力场 | --- ## 版本演进 完整的变更历史见 `readme.txt`,关键节点: - **V2.0.x(2014–2015)**:全面改用 Armadillo 替换自有 Vector/Matrix;引入 HDF5 数据输出 - **V1.7.0(2014)**:引入 SOFA 库、平动点卫星类 `CLibrationSat` - **V1.6.0(2012)**:引入 DE421 并设为默认星历,新增 `Delay`、`PosVel` - **V1.5.x(2011–2012)**:增加 DE405、无数据文件模式、扩展摄动项定义 - **V1.2(2008)**:新增 `CRapidSatellite`(Gill4 + 摄动定期刷新)大幅提升外推速度 - **V1.0(2007)** 及更早 EarthFull 系列:从最初的外推程序逐步发展出轨道机动、月球/环月轨道能力 --- 大气模型细节参考 `doc/NRLMSISE-00-DOCUMENTATION.txt`,Armadillo 用法参考 `doc/arma/`。 --- ## 捐助