Satellite 是一个地月借力与近日轨道设计项目。它从近地停泊轨道出发,搜索经月球引力辅助到达 0.3 AU 近日点的轨迹,并用 JPL Horizons 历表、N 体积分和独立基线检查数值结果。
项目源于钱学森《星际航行概论》相关课程研究。仓库实现了拼接圆锥初值、Velocity-Verlet N 体传播、月球借力模型、发射窗口搜索、灵敏度分析和轨迹可视化。每项关键数值结论都对应回归测试、收敛性检查或可复现的结果文件。
需要 Python 3.10+。核心数值流程使用 NumPy、SciPy、Matplotlib 和 Astroquery:
python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
make compile
python -m unittest src.tests.test_event_semanticsmake validate 会运行 M1 至 M8 的完整回归验证,约需十分钟。部分审计目标还依赖 data/results/ 中的归档输出。JPL Horizons 查询需要网络;仓库保留了一份固定历表缓存,用于复现主要结果。
| 参数 | 目标值 |
|---|---|
| 近地停泊轨道高度 | 0.1 R_Earth (637 km) |
| 设计近日距 | 0.3 AU |
| 近月距 | R_Moon + 500 km |
| 飞行时间 | < 2 年 |
| 再入速度 | < 15 km/s |
FinalProject/
├── report.tex
├── Makefile
├── README.md
├── AI-Agent.md
├── src/
└── data/
- 近日距到日心轨道根数的解析计算
- 与钱学森 r_p=0.2 AU 算例偏差 0.08%(< 0.1%)
- 支持 N 体系统(日-地-月-探测器)
- 二体圆轨道基准:位置误差 8.27e-5(< 1e-4),能量漂移 < 5e-15
- 同一定义、同一采样下的保真度递进链
- SEM_3body(基线):天文 5912 km,通过 6000 km 阈值
- SEM+Jupiter+Venus_5body:实际积分,残差 1401 km(改善 76.3%)
- SEM_full_planetary(10 体):残差仅 126 km(改善 97.9%)
- 证明 3-body 残差主要由省略大行星摄动(木星)引起,非数值误差
- 详见
data/results/m3_model_hierarchy.json
- 双曲线偏折解析公式
- 四体数值仿真(含 SOI 入口/出口跟踪)
- 60 组参数扫描(6 r_m × 5 v_inf × 2 side),中位角度误差 0.04°
- 月心局部二体数值验证——不是完整任务级 N-body swing-by
- 六段式求解流程 (S1–S6)
- Moon-aligned 前向搜索实现月球拦截
- 合法 formal 锚点:MJD 61065.0(2026-01-25),
trailing,r_m=1837.4 km - 返回地球距离 446,151 km,
return_vinf=10.5173 km/s - 正式三段预算:lunar
15.5845 km/s,same-date no-lunar DSM25.5940 km/s - 当前正式 fixed-date saving ratio:
39.11% - 补充诊断:
vinf_basissaving ratio 仍为50.85%,但不再作为 formal budget - 这是当前保留的正式 same-date 节能结论
- 详见
data/results/m5_best_lunar_candidate_verify.json和m5_fixed_date_current_compare.json
- 已完成 2026 全年合法窗口 coarse+local-refine 搜索
- derived legal-window search:
900个候选,95个 valid complete return,71个 fair return - 当前最佳 legal-window candidate:MJD
61389.0(2026-12-15),trailing,r_m=9737.4 km - derived / independent 两条搜索链都回收到同一组
t0/side/r_m - derived / independent 搜索摘要返回距离约
5.04e4 km,return_vinf≈11.226 km/s,formal totaldv=15.1801 km/s - 补充诊断:该窗口的
total_vinf_basis约为10.1213 km/s - 当前应将它理解为“最佳 legal-window 搜索候选”;单点 replay 仍有明显步长/事件搜索敏感性,因此不应写成强于 fixed-date formal anchor 的最终 formal 结果
- 当前 full Monte Carlo 围绕合法 fixed-date anchor(MJD 61065.0)运行
- Full Monte Carlo:
N=200,valid=101,invalid=99,timeout=0 - formal
return_vinf只在真实 Earth-return event 上定义,旧伪 ~79 km/s 已阻断 - valid-only
return_vinfmean / p50 / p95 =10.8047 / 10.7706 / 11.3542 km/s - 补充诊断:valid-only
total_vinf_basismean / p50 / p95 =10.2299 / 10.1479 / 10.3455 km/s - 围绕当前 legal-window candidate(
61389.0 / trailing / 9737.4)的局部灵敏度重算:75组物理传播、165个 valid return、100个 fair;baseline fair fraction=0.0,结论为fragile - 4 级步长收敛(3600/1800/900/450s):能量漂移保持二阶收敛,但任务级返回判定强烈依赖步长,
1800s与900s才给出有效 Earth-return,3600s与450s均失效
- 当前提交物可直接引用 8 张静态图(轨迹、借力、窗口、灵敏度、能量漂移、日期曲线、等值线、Horizons 残差)
- 所有图片由
make figures生成 - 详见
figure_manifest.json
- 从 1-param angle 升级为多参数 damped Gauss-Newton(2-param: angle + scale)
- 审计发现目标泄漏 bug 并修复;改善约 4×(离收敛尚远)
- 框架完整(无 scipy,Jacobian, line search, Tikhonov, multi-start)
- 文件:
src/experiments/o3_differential_corrector.py;运行:make o3
- 直接 delta_v 速度修正 + Levenberg-Marquardt 阻尼(无 scipy)
- 3-param: delta_vx, delta_vy, tof_shift_days
- 74.59× 改善,最终偏差 66,210 km < 100,000 km 阈值
- 11 个多起点,5/11 useful(改善 ≥ 10×)
- dv_norm=1.22 km/s,速度残差合理(22.1 km/s)
- 文件:
src/experiments/o3plus_vector_differential_corrector.py;运行:make o3plus
- Earth-Moon-Venus-Earth patched-conic 链搜索
- Venus 历表:analytic circular fallback(无网络时离线可用)
- 三段 Lambert:地球出发→月球→金星→地球返回
- O4 已冻结(commit 18fa865),不覆盖
- 在 O4 的 Lambert 链基础上允许 powered flyby residual(Moon/Venus 小速度脉冲)
- 两阶段优化:粗网格 19200 组合 + pattern search 精修
- 142 个 Lambert 成功候选,0 个 feasible_powered
- 确认 O4 结论:Earth-Moon-Venus-Earth 链即使允许 powered flyby residual 也难以实现
- O4+ 不覆盖 O4,是独立增强任务
- 文件:
src/experiments/o4plus_powered_mga_optimizer.py;运行:make o4plus - Earth-Moon-Venus-Earth patched-conic 链搜索
- Venus 历表:analytic circular fallback(无网络时离线可用)
- 三段 Lambert:地球出发→月球→金星→地球返回
- 含飞越可行性判断(required-turn vs available-turn at min periapsis)
- ~8400 条链路组合中 98 条三段 Lambert 成功收敛(保留候选)
- 主要限制:月球在高 v_inf(~10 km/s)下最大偏转角仅 ~3°,限制链可行性
- 文件:
src/experiments/o4_ephemeris_extend.py、o4_multi_gravity_assist.py
- ProcessPoolExecutor batching 替代 ThreadPoolExecutor(旧方案 GIL 限制,仅 0.56×)
- 55 天测试集:平均 3.78× 加速比(3 次重复基准,55/55 结果一致)
- Ridge 回归代理预筛选器(无 sklearn 依赖,闭式解实现)
- 6 个几何特征预测实现近日距,R²=0.8956,MAE=0.059 AU
- Top-15 召回率 33.3% — 可捕捉趋势但不可替代物理 N 体扫描
- 文件:
src/experiments/o7_worker.py、o7_parallel_scan.py、o7_surrogate_prefilter.py - 运行:
make o7-parallel/make o7-surrogate
make delta-v-audit: Unified Δv budget classification and comparison to Qian 33.4make m5-global-baseline: Broader no-lunar baseline search (supports existing M5 caveat)make m6-pareto: Pareto trade-off analysis for launch windowsmake polish-diagnostics: Run all three- Files:
src/delta_v_budget.py,src/experiments/m5_global_no_lunar_baseline.py,src/experiments/m6_pareto_window_diagnostic.py
- Python 3.10+
- numpy
- matplotlib(M8 可视化需要)
- astroquery + astropy(JPL Horizons 查询)
- xelatex(PDF 编译)
make all # compile → m3 → figures → animation → m5 baselines → pdfmake compile # 语法检查
make validate # 全部回归测试
make figures # 生成全部图表
make pdf # 编译 report.pdf
make main-task-export # 导出主任务 JSON/CSV 摘要
make m5-legal-window-daily-scan # 2026 全年逐日合法发射窗扫描
make m6-legal-window-daily-verify # 对逐日扫描前列候选做高精度独立复核
make audit # 安全审计 + 图表完整性检查
make clean # 清理生成物主任务机器可读输出:
make main-task-export输出文件:
data/results/main_task_result.jsondata/results/main_task_trajectory.csv
年度窗口强化输出:
make m5-legal-window-daily-scan
make m6-legal-window-daily-verify输出文件:
data/results/m5_legal_window_daily_scan.jsondata/results/m5_legal_window_daily_scan.csvdata/results/m6_legal_window_daily_verify.jsondata/results/m6_legal_window_daily_verify.csv
这两步是 Rule 19/20/21/22 的强化工作流。第一步做 2026 年 365 天显式覆盖;第二步不直接复用存档行,而是从参数重新传播并验证前列年度候选。两步都支持 JSONL 断点续跑和终端进度条。
make validate这将依次运行 m1 到 m8 的回归测试。
make m1 # 拼接圆锥曲线
make m2 # N 体积分器
make m3 # JPL 历表对照
make m4 # 月球借力
make m5 # 单点轨道求解
make m6 # 发射窗口优化
make m7 # 灵敏度分析
make m8 # 可视化make animation # 依赖 figures,生成 45 秒 MP4 + 4 张关键帧- 输出 MP4:
build/orbit_animation.mp4(若 ffmpeg/H.264 可用) - 降级输出:
build/orbit_animation.gif(若 ffmpeg 不可用) - 关键帧:
data/results/animation_keyframe_*.png - 轨迹缓存:
data/results/animation_trajectory.json - MP4/GIF 不进入 Git(
build/已 gitignore)
- 主计算: SSB 惯性系(N 体积分在此进行)
- 残差对比: 日心相对坐标(事后变换,非拟合)
- 显示: J2000 黄道平面(二维投影)
- 参考系转换统一由
src/frames.py管理
3 体系统:太阳、地球、月球(火箭作为 test particle,GM=0)
Velocity-Verlet 算法:
- 主步长 DT_MAIN = 3600 s
- 细化步长 DT_REFINE = 60 s
动力学引擎支持 SSB 惯性系和日心相对坐标(含 indirect term),见 src/dynamics.py。
SSB 惯性积分 → 日心系残差对比,消除因省略大行星摄动导致的共同漂移。 这一方法在 ablation 实验(E3/E4)中验证与日心相对坐标积分(E6)等价。
config/proxy.ini 包含 JPL 代理凭据,已被 .gitignore 排除。
运行 make audit 可自动检查是否有凭据泄露。
| 参数 | 值 |
|---|---|
| 发射日期 | 2026-01-25(MJD 61065.0) |
| 发射超速 | 10.1213 km/s |
| 表面发射等效速度 | 15.0809 km/s |
| 实现近日距 | 0.274959 AU |
| 返回地球距离 | 446,151 km |
| 返回 v_inf | 10.5173 km/s |
| 飞行总时间 | 96.12 天 |
- formal budget basis:
three_segment_formal = dv_launch + dv_lunar_residual_or_dsm + dv_reentry - lunar formal total_dv: 15.5845 km/s
- no-lunar DSM formal total_dv: 25.5940 km/s
- formal saving ratio: 39.11%
- supplementary vinf_basis ratio: 50.85%
- 该比较仅在相同 t0、相同 formal budget basis、均满足真实 Earth-return event 时成立
- M3 是 same-source propagation check,不是独立 JPL 预测精度证明
- M4 数值验证为局部月心二体/局部任务参数对照,非完整任务级 high-fidelity swingby
- M6 当前已完成合法窗口 coarse+local-refine 搜索,并由独立搜索链支持当前最佳候选;但它仍是有限分辨率 search candidate,且单点 replay 具有明显敏感性
- M7 full MC 当前结果为
101 valid / 99 invalid / 0 timeout,它支撑的是61065fixed-date formal anchor 周边的鲁棒性,而不是61389.0年度最佳窗口周边的最终鲁棒性 - 动画(O5)优先生成 MP4,若 ffmpeg/H.264 不可用会 fallback 到 GIF
- O7 代理预筛选:Ridge 回归 R²=0.8956,几何特征仅能捕捉整体趋势,top-15 recall=33%
- O4 多次借力链搜索:有限的多体链可行性(analytic Venus 近似 + Moon 高 v_inf 偏转角不足限制链可行性)
- 钱学森.《星际航行概论》. 科学出版社, 1963.
- JPL Horizons System: https://ssd.jpl.nasa.gov/horizons/
- Bate, R. R., Mueller, D. D., & White, J. E. Fundamentals of Astrodynamics. Dover, 1971.
- JPL ASTRODYN: https://ssd.jpl.nasa.gov/astro_glossary.html