# LaunchWindowCalculator **Repository Path**: quantum-dogdog/LaunchWindowCalculator ## Basic Information - **Project Name**: LaunchWindowCalculator - **Description**: 文昌发射场地月发射窗口计算器 - **Primary Language**: Python - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-18 - **Last Updated**: 2026-10-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 文昌发射场地月发射窗口计算器 基于二体拼接圆锥曲线(patched conics)的闭式求解器,计算自文昌发射场(19.61°N,110.95°E)经近地停泊轨道、地月转移弧到达目标环月轨道的发射窗口,并以嫦娥五号(2020-11)、嫦娥六号(2024-05)两次任务完成对账与反演验证。 核心结果: - CE-5:以公开测量参数标定后,在实飞点火时刻代入模型,解与测量之差为 TLI 速度增量 +1.5 m/s、C3 +0.033 km²/s²、射向 +0.08°、近月点半径 0 km(第 4 节)。 - CE-6:仅用两个公开时间戳(点火 2024-05-03 17:27、近月制动开始 2024-05-08 10:12,北京时间,分钟精度)反演出未公开的停泊轨道倾角,闭环值 23.3°±0.1°;该倾角下模型于实飞点火时刻同时闭合两个历元,到达 10:12:06 与公开值同分钟,近月点高度 197 km(目标 200 km)(第 5 节)。 ## 1. 运行环境 - Python ≥ 3.8(实测 3.8.20)。依赖:numpy、scipy、numba、jplephem。 - 星历文件:当前目录放置 de405.bsp(优先,约 114 MB)或 de421.bsp(约 22 MB)。 - 首次运行需等待 numba 编译(数十秒)。修改编译核常量(r_park、R_PL 等)后须删除 `__pycache__` 再运行。 ## 2. 模型与方法 ### 2.1 时间与历表 内部时间为儒略日(UT 口径)。月球位置与速度由 DE405 星历插值,加 TT−UTC = 69.184 s 换算。发射场位置向量由 GMST 公式(含 J2 长期项)与站址经纬度合成,随地球自转更新。 ### 2.2 转移平面与射向 给定倾角 i,过发射场点的轨道面法向有两解(东南支与东北支),对应发射方位角 az,满足平面约束 sin(az) = cos(i)/cos(φ₀),φ₀ 为发射点纬度。如 i=21.299° 时 az=98.5°(东南支),与 CE-5 实测射向 98.4° 对应。射向限制在 [60°, 150°]。 ### 2.3 停泊轨道与 TLI 脉冲 停泊轨道取圆轨道。TLI 为切向脉冲,脉冲后速度记为 y(km/s),搜索域 [10.70, 11.001];脱离能量 C3 = y² − 2μE/r_park。时序常数(T_UP=738.7 s、T_LI=1676.2 s、T_SEP=2184 s)按长五序列标定,等效脉冲时刻 T_IMP = T_LI + 0.5·(T_SEP−T_LI) ≈ 1930.1 s。 ### 2.4 转移弧闭式解与双钉问题 转移拆为地心椭圆段(TLI → 月球影响球边界,SOI 半径 66200 km)与月心双曲线段(边界 → 近月点)。出口点 S 参数化于 SOI 截面圆(λ∈[0°,135°])。对每组合 (y, λ) 闭式得椭圆历时 t_e、双曲线历时 t_hyp、近月点半径 r_p 与剩余速度 vinf;转移历时 fly = t_e + t_hyp。 “双钉”问题:解 y 使 fly 命中目标历时(能量域 brentq 求根),解 λ 使 r_p 命中目标半径 R_PL(走廊内取根或最小偏差)。等效脉冲时刻 tE 与解之间不动点迭代自洽,收敛阈值 5 s。 口径注意:输出中 fly 为等效脉冲→近月点;公称值 112.46 h 为点火→近月点,相差 T_IMP ≈ 32.2 min。 ### 2.5 滑行段与约束门 TLI 点火前在停泊轨道滑行,点火点到脉冲点的面内角 φ 对应滑行时长。全部硬门:滑行 [300, 1800] s(φ∈[37.5°, 139.0°]);上升弧 [500, 4000] km;射向 [60°, 150°];fly∈[2.5, 5.5] 天;双曲线近月点高于月面 100 km;到达时相对速度须指向月球;粗筛门要求转移平面与 SOI 相交(|n·r_Moon| < 1.08·r_s)。 ### 2.6 求解器结构与自检 两级求解器:`solve_event`(严格路径,能量域全扫描)与 `_probe`(快速路径,暖启动引导的局部搜索,失败回退全局扫描)。每条解经 `verify3` 独立重构校验(位置相对残差 1e-4、时间 0.5 s、近月点相对 1e-5、历时 0.02 h),任一不过即丢弃,对应输出的“自检”列。 ### 2.7 自检行字段 每次运行打印的自检行示例(diyue5): ``` 自检: 月距 383205 km [de405.bsp] | 近月点靶 2137.4km | GMST(JD0)=185.8° | T_UP=738.7s COAST=937.5s TLI@+1676.2s | T_IMP=1930.1s PHI_S=80.63° | 滑行界[5,30]min φ∈[37.5,139.0]° | 引导网格 fr=[0.80,0.90]步0.01 | Y_WIN_LO=10.780 ``` 月距验证星历加载;近月点靶为 R_PL;T_UP/COAST/TLI 为点火→入轨→TLI 时序;PHI_S 为标称滑行角;引导网格为 tE 初值区间(相对 fly 的分数);Y_WIN_LO 为快速路径速度搜索下界。 ## 3. 命令行模式与示例 两种配置共用 8 个模式。ce5 与 diag 内置 CE-5 历元,仅在 diyue5.py 下有意义。tolkm 指 r_p 走廊半宽(km)。 ### 3.1 ce5 —— CE-5 对账(默认模式) ``` python diyue5.py ce5 ``` ``` CE-5 对账: 点火 11-23 20:30:30 UTC | 到达 11-28 12:58:06 UTC 点火[11-24 04:30:30] 入轨[11-24 04:42:49] 滑 15.6min TLI点火[11-24 04:58:27] 脉冲[11-24 05:02:40] | fly=111.92h TLIΔv=3134 LOI1=403 C3=-1.93 λ= 67.1° η= 39.9° 射向= 98.5°(东南支) 倾角=21.30° 上升弧=3171km 入轨星下点(13.21°N,136.88°E) hM= +389km r_p高=400km 自检PASS 模型-实测: Δy=+1.5 m/s | ΔC3=+0.033 | Δ射向=+0.08° | 近月点偏差=+0 km | 上升弧=3171 km (实测量级 1500-2500) ``` 末行为与测量值之差,四项均在测量精度量级。上升弧偏离公开量级的原因见 2.3 节时序简化。 ### 3.2 diag —— 分门诊断 ``` python diyue5.py diag ``` 按门 1~5 逐项打印同一历元的约束满足情况,用于定位无解原因。CE-5 点位实际输出:门 1 历时通过;门 2 东南支射向 98.48°(实测 98.4°);门 3 东南支 min|h_M|=58 km 过门,东北支 115601 km 硬门失败(面与 SOI 不相交);门 4 粗样本近月点偏差 −52 km(2.5° λ 网格分辨率内,严格求解后为 0);门 5 上升弧 3162 km 通过。 ### 3.3 day0 —— 单日窗口(标称历时) ``` python diyue5.py day0 2020-11-24 30 4 # 严格解, 步长30min, 4进程 python diyue5.py day0 2020-11-24 30 4 500 # 末参500=±500km走廊 ``` ``` 标称弧 fly=112.46h tol=±0km | 1 个解, 1 个窗口段 发射窗口(北京时): 11-24 04:06:33 ~ 11-24 04:30:00 ``` 走廊口径为 04:04:41 ~ 04:31:52(宽 27.2 min)。窗口边界自动二分细化至 1 min。严格窗为分钟级属正常(固定 φ 与 r_p 时解带天然狭窄);需实用宽度时传第 4 参数。 ### 3.4 day —— 解曲线追踪 ``` python diyue5.py day 2020-11-24 2 4.5 50 # t0步2min, 种子04:30, ±50km ``` ``` 解曲线: 13 点 | 窗口 11-24 04:06:00 ~ 11-24 04:29:59 (宽 24 min) 点火[11-24 04:06:00] … 上升弧=3763km … r_p高=400km 自检PASS 点火[11-24 04:29:59] … 上升弧=3173km … r_p高=400km 自检PASS ``` 从种子点沿 t0 双向追踪走廊内连续解,展示解带内参数漂移(上升弧 3763→3173 km)。首行"fly 范围 112.460~112.460"为搜索序显示问题,不代表历时恒定。 ### 3.5 span —— 多日速览 ``` python diyue5.py span 2020-11-23 2020-11-26 500 4 ``` ``` 日期 窗起 ~ 窗止 宽min fly*h 族 2020-11-23 11-23 01:25:18 ~ 11-23 01:43:47 18.5 86.0 东北镜像 2020-11-24 11-24 04:28:02 ~ 11-24 04:44:59 17.0 74.0 东南任务 2020-11-25 11-25 04:13:02 ~ 11-25 04:32:05 19.0 74.0 东南任务 2020-11-26 11-26 03:52:51 ~ 11-26 04:16:41 23.8 74.0 东南任务 4/4 天有走廊窗 ``` 每日报一个窗口(单 fly 截面、冷网格、严格解),适合多日普查。11-23 行为镜像族的独立发现。窗口全界与弹道族用 win/auto。 ### 3.6 win —— 单日联合窗口与弹道族 ``` python diyue6.py win 2024-05-03 500 105 118 0.05 ce6_v.csv ``` ``` 解带 1 段 段1: 窗口 05-03 16:56:00 ~ 05-03 17:40:26 (宽 44.4 min) | fly 105.00~118.00h │ 点火05-03 16:56:00 … fly=118.00h … 近月高196km 自检PASS │ 点火05-03 17:07:06 … fly=114.25h … 近月高206km 自检PASS │ 点火05-03 17:18:13 … fly=108.30h … 近月高198km 自检PASS │ 点火05-03 17:29:19 … fly=105.05h … 近月高212km 自检PASS 弹道族 CSV → ce6_v.csv ``` 窗口边界按 0.5 min 细化。本例中实飞点火 17:27 与 fly 112.22 h 均含于段内(第 5.4 节)。"带斜率"为点火时刻随 fly 的变化率(min/h)。 ### 3.7 auto —— 多日全景与 CSV ``` python diyue6.py auto 2024-05-03 2024-05-04 500 95 120 0.2 8 ce6.csv ``` ``` 粗筛: 2/2 天有解 | 无解日: 无 >>> [2024-05-03] 已落盘 ce6_2024-05-03.csv (5 条) >>> [2024-05-04] 已落盘 ce6_2024-05-04.csv (5 条) 2024-05-03 1 49.9 5 05-03 16:59:42 ~ 05-03 17:49:35 ( 49.9 min) 05-07 17:33:42 406.0 2024-05-04 1 93.4 5 05-04 15:43:30 ~ 05-04 17:16:56 ( 93.4 min) 05-08 17:08:46 405.5 弹道族 10 条 → ce6.csv (utf-8-sig, Excel 可直接打开) ``` 流程为逐日冷网格粗筛后并行 win 求解,逐日与汇总 CSV 落盘。auto 暖启动链锁定首个解族,多解族日请逐日 win。 ### 3.8 phi —— 滑行角扫描 ``` python diyue5.py phi 2020-11-24 500 112.46 3 2 8 # ±500km, fly=112.46h, φ步3°, t0步2min, 8进程 ``` ``` 滑min φ° 窗起 ~ 窗止 宽min 15.3 79.5 11-24 04:03:59 ~ 11-24 04:30:59 27 …… 29.4 136.5 11-24 04:03:59 ~ 11-24 04:30:59 27 29.4 136.5 11-24 00:54:59 ~ 11-24 01:21:59 27 可行 φ 簇: 25 | φ 档: 18 / 34 ``` 固定 fly,扫描 φ 与点火时刻的二维可行域,揭示解族结构(第 6 节)。8 进程全程约 20–30 分钟。 ## 4. CE-5 对账(2020-11-24) 输入锚点:点火 2020-11-24 04:30:30(北京时)、近月点 2020-11-28 20:58:06、历时 112.46 h;测量参数 y=10.9124 km/s、C3=−1.961 km²/s²、射向 98.4°;配置为 208 km 停泊、400 km 目标近月点、倾角 21.299°。 同一历元下模型解见 3.1:滑行 15.6 min、TLIΔv 3134 m/s、LOI1 403 m/s、C3 −1.93、λ 67.1°、射向 98.5°、近月高 400.0 km。与测量之差:TLI 速度 +1.5 m/s(相对值 1.4×10⁻⁴)、C3 +0.033、射向 +0.08°、近月点半径 0 km。四项残差均不大于公开参数的有效数字量级,构成物理核标定依据。 ## 5. CE-6 反演与闭环(2024-05-03) ### 5.1 公开输入 点火 2024-05-03 17:27、近月制动开始 2024-05-08 10:12(均分钟精度);点火→近月点 112.75 h,扣 T_IMP 后 fly = 112.22 h。配置为 200 km 停泊、200 km 环月目标;停泊倾角无公开值,即待反演量。 ### 5.2 两点平面反演(ce6_plane.py) 发射场位置向量与到达时刻月球位置向量叉乘得轨道面法向 n,倾角反演 i\* = arccos|n_z|: - i\* = 23.58°;射向 103.4°(取 site_azimuth 输出 −76.6° 的补方向); - 自洽校验:sin(az) = cos(i\*)/cos(φ₀) = 0.973,给 az = 103.35°,与输出一致; - 与 CE-5 标定平面夹角 4.87°、与东北支夹角 21.83°,确认属东南支。 ### 5.3 倾角闭环(ce6_close.py) 固定点火 17:27、fly 在 [112.0, 112.6] h 内自由、每点冷启动,逐档扫描倾角: - i=23.15:fly 112.00 h,近月高 566 km,到达 09:59:06; - i=23.20:近月高 212 km;i=23.25:近月高 204 km(到达均 09:59:06); - **i=23.30:fly 112.22 h,滑行 15.6 min,近月高 197 km,射向 102.8°,到达 05-08 10:12:06**; - i=23.35-23.45:扫描窗内无解(解带在 17:27 处的 fly 抬升至约 113.9 h 以上)。 判读:i ≥ 23.35 为硬上界(到达锚不可闭合);近月高随 i 单调收敛于 200 km(566→212→204→197);i=23.30 时 fly 解恰为公开两历元推算的 112.22 h,到达与公开值同分钟。由于到达 = 点火 + T_IMP + fly 为定义式,两个公开历元在 i=23.3° 下同时闭合,闭合不依赖自由参数。 综合上下界与近月高收敛,**i\* = 23.3° ± 0.1°**。两点法初值 23.58° 与闭环值差 0.28°,与该方法固有偏差(到达方向取月心而非近月点、实际航迹非纯大圆)量级一致。 辅助证据(ce6_incscan.py,win 口径):i=23.30 时解带 16:51:30-17:34:44 覆盖 17:27,含解 17:23:55 @112.50 h(到达 10:26:17,近月高 200 km);i=23.85 时带收缩至 9.0 min;i=23.45 时带整体移至 fly 113.9~114.5 h。 ### 5.4 闭环倾角下的窗口与弹道族 INC_TGT = 23.3 下重跑窗口扫描(3.6、3.7 节即其输出):2024-05-03 单段连续窗口 44.4 min,包含实飞点火 17:27 与 fly 112.22 h;两日共 10 条弹道,走廊中心近月高 196–212 km,射向全部 102.8°。ce6.csv 摘录: ``` 日期,点火,TLI点火,等效脉冲,fly_h,滑行min,射向,分支,入轨纬度,入轨经度,上升弧km,TLIΔv,C3,LOI1,vinf,到达,近月高km,自检 2024-05-03,05-03 17:12:10,05-03 17:41:31,05-03 17:45:45,114.6,17.0,102.8,东南,9.75,140.17,3636.0,3125.9,-2.158,406.1,0.864,05-08 12:21:45,207.7,PASS 2024-05-03,05-03 17:24:38,05-03 17:52:31,05-03 17:56:45,108.55,15.6,102.8,东南,9.52,140.78,3708.0,3128.2,-2.108,406.0,0.864,05-08 06:29:45,207.2,PASS 2024-05-04,05-04 16:30:13,05-04 17:03:01,05-04 17:07:14,100.4,20.5,102.8,东南,8.93,142.29,3886.0,3129.4,-2.082,406.9,0.866,05-08 21:31:14,200.6,PASS ``` ### 5.5 残差预算 到达轴公开精度为分钟,模型闭合在同一分钟内。未闭合到秒的已知来源:其一,tE 约定——公开的 10:12 为制动开始时刻,近月点应位于燃弧中段(LOI Δv 约 406 m/s,燃弧数百秒);其二,模型不含中途修正,实飞含数次 m/s 级轨控。两者均不改变倾角判定。 ### 5.6 与 CE-5 的倾角差及解带后移归因 CE-5 标定倾角 21.299° 与闭环值 23.3° 相差 2.0°。将 diyue6 的 INC_TGT 置回 21.299° 时,2024-05-03 解带整体移出实飞点火小时(带心约提前 1.9 h),即解带后移的主要参数归因为停泊倾角之差。物理背景:2024-05 到达月球赤纬高于 2020-11,发射平面需相应抬高倾角。 ## 6. 2020-11 解族结构 对 2020-11-24、fly=112.46 h 截面(3.8 节)的测量:34 个 φ 档中 18 档可行、共 25 个点火簇;φ∈[37.5°, 76.5°] 不可行(上升弧低于门),φ∈[112.5°, 115.5°] 为可行域内空档。任务族 φ∈[79.5°, 136.5°] 对应 04:03:59~04:30:59 点火窗(实飞 04:30:30 在内),滑行 15.3 min(φ=79.5°)至 29.4 min(顶到 30 min 门)——滑行下沿随几何移动,不是常数。镜像族:φ∈[118.5°, 136.5°] 同时存在 00:54:59-01:21:59 的第二点火窗(东北支),由 span 与 phi 两条独立代码路径互证,auto 不发现该族。窗口宽度:严格口径 [04:06:33, 04:30:00];±500 km 走廊 [04:04:41, 04:31:52];day 走廊 13 点、24 min,近月高全部 400.0 km 精确。 ## 7. 使用注意 - 修改 r_park、R_PL 等编译核常量后须删除 `__pycache__`。 - “到达"时刻 = 等效脉冲 + fly,为定义式;以给定点火与到达反解 fly 时,到达不是独立校验量,独立校验由 verify3 承担。 - win/auto 复用暖启动缓存,个别参数组合下会漏解;对账结论建议用冷启动扫描(写法参考 ce6_close.py)。 - day 模式首行"fly 范围"为搜索序显示问题;模型为二体闭式,不含中途修正、引力损耗、非球形引力与光压。 ## 8. 文件清单 - diyue5.py:CE-5 配置主程序(r_park=6586.14 km、R_PL=2137.4 km、INC_TGT=21.299°),含全部 8 个模式。 - diyue6.py:CE-6 配置主程序(r_park=6578.14 km、R_PL=1937.4 km、INC_TGT=23.3°)。 - ce6_plane.py:两点平面反演(5.2 节)。 - ce6_close.py:固定点火、历时自由、倾角细扫,闭环判决脚本(5.3 节)。 - ce6_incscan.py:倾角开合扫描(5.3 节辅助证据)。 ## 9. 相似项目 - **Queqiao2-visibility**(`https://github.com/Aequatio-Space/Queqiao2-visibility`)。 - **lunarlaunchwindow**(`https://github.com/exoplanet5/lunarlaunchwindow`):同领域的月球发射窗口开源实现。 ## 附录 A:输出字段说明 - 点火 / TLI点火 / 等效脉冲 / 到达:北京时;等效脉冲为 TLI 关机的等效冲量中点(T_IMP)。 - fly_h:等效脉冲→近月点历时(h);滑行min:TLI 点火前滑行时长。 - 射向 / 分支:发射方位角与轨道面支别(东南/东北)。 - 入轨纬度 / 入轨经度:停泊入轨点星下点;上升弧km:发射场→入轨点地面大圆弧长。 - TLIΔv:切向脉冲增量(m/s);C3 = y² − 2μE/r_park(km²/s²)。 - LOI1:近月点一次制动到 8 h 环月轨道的增量(m/s,模型口径);vinf:双曲线剩余速度(km/s)。 - 近月高km:近月点高于月面;自检:verify3 校验结果(PASS/FAIL)。