Skip to content

Latest commit

 

History

History
225 lines (172 loc) · 7.97 KB

File metadata and controls

225 lines (172 loc) · 7.97 KB

太阳系轨道设计工具

项目介绍

本项目是一款专注于星际转移弹道优化的太阳系内轨道设计工具,基于直接配点法(Direct Collocation)实现轨道优化。该项目起源于与艺术家范文南合作的硬核科幻设定——设计一艘千人万吨级的木星-海王星往返转移飞行器,旨在将核心轨道动力学优化代码转化为简洁易用的工具,服务于科普教育与可视化演示。

项目采用"一核三用"的模式:同一核心代码支撑科幻设定验证、SOLO挑战赛参与、课程教学展示三大应用场景。

使用方法

运行应用

  1. 通过可执行文件运行
    • dist 目录下找到 SolarSystemDirectCollocation.exe 文件
    • 双击运行该文件即可启动应用
  2. 通过源码运行
    • 确保已安装Python 3.10+
    • 安装依赖:pip install -r requirements.txt
    • 运行主程序:python main.py

功能使用

  1. 3D 可视化太阳系场景
    • 支持拖拽、缩放、平移视角,多角度观察行星位置
    • 鼠标悬浮在星体上可查看详细信息
  2. 轨道规划功能
    • 选择出发行星、目标行星
    • 设置出发时刻及期望飞行时间
    • 点击计算按钮自动生成转移轨道
    • 查看可视化展示与 ΔV 计算结果
  3. porkchop 图绘制
    • 设置最早出发时间和最晚出发时间
    • 设置飞行时间范围
    • 点击计算按钮生成发射窗口分析图
    • 查看最优转移轨道和所有临时弹道
  4. 时间轴控制
    • 通过滑块拖动可查看不同时间点的轨迹和星体位置
    • 支持远未来年份的时间设置
    • 点击"更新时间"按钮可更新太阳系状态

基础知识

本项目涉及航天、轨道动力学及数学等领域的基础知识,主要包括:

1. 轨道状态描述

轨道状态由位置、速度和加速度三个基本量描述:

  • 位置(r):航天器在空间中的坐标
  • 速度(v):航天器运动的速度矢量
  • 加速度(a):航天器速度变化的速率

2. 限制性二体问题

限制性二体问题是航天动力学中的基本问题,假设两个天体在万有引力作用下运动,其中一个天体质量远大于另一个,忽略其他天体的影响。其运动方程为:

$$\ddot{\mathbf{r}}=-\frac{\mu}{r^3}\mathbf{r}$$

3. 速度增量(ΔV)概念

速度增量是指航天器为了改变轨道而需要的速度变化量,是衡量轨道机动能量需求的重要指标。ΔV 越小,所需的推进剂越少,任务成本越低。

4. 脉冲转移与连续推力转移

  • 脉冲转移:假设推进力作用时间极短,速度变化瞬间完成
  • 连续推力转移:推进力持续作用,速度变化是连续的过程

本项目主要针对连续推力转移进行优化。

5. Porkchop 猪排图概念

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/                  # 构建目录

核心模块功能

  1. 主程序入口 (main.py)
    • 启动桌面应用
    • 导入并实例化 UI 组件
    • 启动主事件循环
  2. UI模块 (ui/)
    • app.py:主应用逻辑,处理用户交互和计算流程
    • ui_component.py:UI组件定义,包含控件布局和初始化
    • ui_plotter.py:绘图功能,包含太阳系和轨迹可视化
    • ui_util.py:UI工具函数,提供辅助功能
  3. 功能模块 (features/)
    • orbit_planner.py:轨道规划,处理用户输入和约束检查
    • constraints.py:约束检查,验证轨迹是否满足物理约束
    • porkchop.py:猪排图计算,生成发射窗口分析
  4. 核心模块 (core/)
    • trajectory_optimizer.py:轨迹优化核心,实现直接配点法
    • solar_system.py:太阳系模型,计算星体位置和速度
    • visualization.py:可视化工具,提供绘图功能
  5. 工具模块 (utils/)
    • config.py:配置管理,存储应用设置
    • data_processor.py:数据处理,处理轨迹数据

直接配点法基本公式

对于一个连续推力的航天器弹道,我们考虑二体问题,动力学方程为:

$$\ddot{\mathbf{r}}=-\frac{\mu}{r^3}\mathbf{r}+\mathbf{u}$$

其中 $$\mathbf{r}$$ 是位置矢量 $$\mathbf{u}$$ 是控制加速度。

状态变量

假设飞行时间 $$T\in [0,T_f]$$ 分割为 (N) 个点,待优化的状态变量为:

$$\begin{bmatrix} x\\ y\\ z\\ v_x\\ v_y\\ v_z\\ u_x\\ u_y\\ u_z \end{bmatrix} =\begin{bmatrix} x_0, x_1,..., x_{N-1}\\ y_0, y_1,..., y_{N-1}\\ z_0, z_1,..., z_{N-1}\\ v_{x_0}, v_{x_1},..., v_{x_{N-1}}\\ v_{y_0}, v_{y_1},..., v_{y_{N-1}}\\ v_{z_0}, v_{z_1},..., v_{z_{N-1}}\\ u_{x_0}, u_{x_1},..., u_{x_{N-1}}\\ u_{y_0}, u_{y_1},..., u_{y_{N-1}}\\ u_{z_0}, u_{z_1},..., u_{z_{N-1}} \end{bmatrix}$$

优化目标

我们期望最小化控制输入的平方积分:

$$\min J=\int_0^{t_f}u^2(\tau)d\tau= \sum_{k=0}^{N-2}\frac{1}{2}(u_{k+1}^2+u_k^2)dt$$

动力学约束

使用梯形积分方法,满足以下动力学约束:

$$ \mathbf{x}_{k+1}=\mathbf{x}_k+\frac{1}{2}(\mathbf{v}_{k+1}+\mathbf{v}_k)dt$$ $$ \mathbf{v}_{k+1}=\mathbf{v}_k+\frac{1}{2}(\mathbf{a}_{k+1}+\mathbf{a}_k)dt$$

边界条件

满足出发和到达时刻的边界条件:

$$ \mathbf{x}_0=\mathbf{x}_{k=0}=[x_{o},y_{o},z_{o}]^T $$ $$ \mathbf{v}_0=\mathbf{v}_{k=0}=[v_{x,{o}},v_{y,{o}},v_{z,{o}}]^T$$ $$ \mathbf{x}_f=\mathbf{x}_{N-1}=[x_{f},y_{f},z_{f}]^T$$ $$ \mathbf{v}_f=\mathbf{v}_{N-1}=[v_{x,{f}},v_{y,{f}},v_{z,{f}}]^T$$

优化问题

最终的优化问题拥有 (9N) 个优化参数,以及 (6N+6) 个等式约束。使用 Python 的序列二次规划求解器 SLSQP 方法求解,并使用了两种简单的初始化条件。

技术特点

  1. 直接配点法:采用梯形积分方法进行轨迹优化,精度高,收敛性好
  2. 3D 可视化:使用 Matplotlib 实现太阳系和轨迹的 3D 可视化
  3. 交互式 UI:基于 Tkinter 构建的交互式用户界面,操作简便
  4. 发射窗口分析:通过猪排图直观展示发射窗口和 ΔV 需求
  5. 时间轴控制:支持动态调整时间,查看不同时刻的轨迹状态

应用场景

  1. 科幻设定验证:验证大型航天器的轨道设计可行性
  2. 教育科普:用于航天相关课程的教学演示
  3. 轨道设计研究:辅助研究人员进行轨道优化设计

作者信息

  • 开发者:周恒博
  • 单位:北京航空航天大学,宇航学院,博士生
  • 项目用途:科幻设定验证、SOLO挑战赛参与、课程教学展示