本项目是一款专注于星际转移弹道优化的太阳系内轨道设计工具,基于直接配点法(Direct Collocation)实现轨道优化。该项目起源于与艺术家范文南合作的硬核科幻设定——设计一艘千人万吨级的木星-海王星往返转移飞行器,旨在将核心轨道动力学优化代码转化为简洁易用的工具,服务于科普教育与可视化演示。
项目采用"一核三用"的模式:同一核心代码支撑科幻设定验证、SOLO挑战赛参与、课程教学展示三大应用场景。
- 通过可执行文件运行:
- 在
dist目录下找到SolarSystemDirectCollocation.exe文件 - 双击运行该文件即可启动应用
- 在
- 通过源码运行:
- 确保已安装Python 3.10+
- 安装依赖:
pip install -r requirements.txt - 运行主程序:
python main.py
- 3D 可视化太阳系场景:
- 支持拖拽、缩放、平移视角,多角度观察行星位置
- 鼠标悬浮在星体上可查看详细信息
- 轨道规划功能:
- 选择出发行星、目标行星
- 设置出发时刻及期望飞行时间
- 点击计算按钮自动生成转移轨道
- 查看可视化展示与 ΔV 计算结果
- porkchop 图绘制:
- 设置最早出发时间和最晚出发时间
- 设置飞行时间范围
- 点击计算按钮生成发射窗口分析图
- 查看最优转移轨道和所有临时弹道
- 时间轴控制:
- 通过滑块拖动可查看不同时间点的轨迹和星体位置
- 支持远未来年份的时间设置
- 点击"更新时间"按钮可更新太阳系状态
本项目涉及航天、轨道动力学及数学等领域的基础知识,主要包括:
轨道状态由位置、速度和加速度三个基本量描述:
- 位置(r):航天器在空间中的坐标
- 速度(v):航天器运动的速度矢量
- 加速度(a):航天器速度变化的速率
限制性二体问题是航天动力学中的基本问题,假设两个天体在万有引力作用下运动,其中一个天体质量远大于另一个,忽略其他天体的影响。其运动方程为:
速度增量是指航天器为了改变轨道而需要的速度变化量,是衡量轨道机动能量需求的重要指标。ΔV 越小,所需的推进剂越少,任务成本越低。
- 脉冲转移:假设推进力作用时间极短,速度变化瞬间完成
- 连续推力转移:推进力持续作用,速度变化是连续的过程
本项目主要针对连续推力转移进行优化。
Porkchop 图是一种发射窗口分析工具,横轴表示出发时间,纵轴表示飞行时间,颜色表示所需的速度增量(ΔV)。通过猪排图可以直观地找到最优的发射窗口和飞行时间组合。
├── main.py # 主程序入口
├── ui/ # UI相关模块
│ ├── __init__.py
│ ├── app.py # 主应用逻辑
│ ├── ui_component.py # UI组件定义
│ ├── ui_plotter.py # 绘图功能
│ └── ui_util.py # UI工具函数
├── features/ # 功能模块
│ ├── __init__.py
│ ├── orbit_planner.py # 轨道规划
│ ├── constraints.py # 约束检查
│ ├── direction_optimizer.py # 方向优化
│ └── porkchop.py # 猪排图计算
├── core/ # 核心模块
│ ├── __init__.py
│ ├── trajectory_optimizer.py # 轨迹优化核心
│ ├── solar_system.py # 太阳系模型
│ └── visualization.py # 可视化工具
├── utils/ # 工具模块
│ ├── __init__.py
│ ├── config.py # 配置
│ └── data_processor.py # 数据处理
├── Param.py # 参数配置
├── Output/ # 输出目录
├── dist/ # 可执行文件目录
└── build/ # 构建目录
- 主程序入口 (main.py)
- 启动桌面应用
- 导入并实例化 UI 组件
- 启动主事件循环
- UI模块 (ui/)
app.py:主应用逻辑,处理用户交互和计算流程ui_component.py:UI组件定义,包含控件布局和初始化ui_plotter.py:绘图功能,包含太阳系和轨迹可视化ui_util.py:UI工具函数,提供辅助功能
- 功能模块 (features/)
orbit_planner.py:轨道规划,处理用户输入和约束检查constraints.py:约束检查,验证轨迹是否满足物理约束porkchop.py:猪排图计算,生成发射窗口分析
- 核心模块 (core/)
trajectory_optimizer.py:轨迹优化核心,实现直接配点法solar_system.py:太阳系模型,计算星体位置和速度visualization.py:可视化工具,提供绘图功能
- 工具模块 (utils/)
config.py:配置管理,存储应用设置data_processor.py:数据处理,处理轨迹数据
对于一个连续推力的航天器弹道,我们考虑二体问题,动力学方程为:
其中
假设飞行时间
我们期望最小化控制输入的平方积分:
使用梯形积分方法,满足以下动力学约束:
满足出发和到达时刻的边界条件:
最终的优化问题拥有 (9N) 个优化参数,以及 (6N+6) 个等式约束。使用 Python 的序列二次规划求解器 SLSQP 方法求解,并使用了两种简单的初始化条件。
- 直接配点法:采用梯形积分方法进行轨迹优化,精度高,收敛性好
- 3D 可视化:使用 Matplotlib 实现太阳系和轨迹的 3D 可视化
- 交互式 UI:基于 Tkinter 构建的交互式用户界面,操作简便
- 发射窗口分析:通过猪排图直观展示发射窗口和 ΔV 需求
- 时间轴控制:支持动态调整时间,查看不同时刻的轨迹状态
- 科幻设定验证:验证大型航天器的轨道设计可行性
- 教育科普:用于航天相关课程的教学演示
- 轨道设计研究:辅助研究人员进行轨道优化设计
- 开发者:周恒博
- 单位:北京航空航天大学,宇航学院,博士生
- 项目用途:科幻设定验证、SOLO挑战赛参与、课程教学展示