多阶段两级火箭¶
背景¶
火箭级间分离是一个混杂事件:高度和速度在分离瞬间保持连续,但抛弃空级结构会使飞行器质量瞬时变化。将每个动力级表示为独立阶段,可以明确区分这两类转换,也不需要用人为设置的极快连续过程来近似质量跳变。
本示例优化竖直上升轨迹,使火箭到达给定远地点。所有量均经过无量纲化,以保持动力学和非线性规划问题的数值尺度均衡。
问题定义¶
对于第 \(i\in\{1,2\}\) 级,状态为高度 \(h_i\)、竖直速度 \(v_i\) 和质量 \(m_i\),控制 \(\alpha_i\) 为节流比例。动力学为
其中
第一阶段的时间区间为 \([0,t_s]\),第二阶段为 \([t_s,t_f]\)。目标函数权衡终止时间和控制消耗:
任务从单位质量、静止状态开始,并在给定远地点结束:
质量构成包括 \(0.06\) 的一级推进剂、\(0.20\) 的一级抛弃结构、\(0.12\) 的二级推进剂和 \(0.62\) 的二级干质量。一级在推进剂耗尽时分离,因此
在共享的分离时刻,高度和速度连续,质量则按照上述关系离散重置:
路径边界为
其余系统边界为
变量与单位¶
所有数值均为无量纲量,因此单位栏中的短横线表示经过缩放的模型量。
| 符号 | 含义 | 单位 |
|---|---|---|
| \(h_i\) | 第 \(i\) 级的高度 | - |
| \(v_i\) | 第 \(i\) 级的竖直速度 | - |
| \(m_i\) | 第 \(i\) 级的飞行器质量 | - |
| \(\alpha_i\) | 第 \(i\) 级的节流比例 | - |
| \(T_i\) | 满节流推力系数 | - |
| \(\beta_i\) | 满节流质量流率系数 | - |
| \(t_s,t_f\) | 分离时刻和终止时刻 | - |
| \(m_s^-,m_s^+\) | 分离前和分离后的瞬时质量 | - |
建模选择¶
共享静态参数 \(h_s\)、\(v_s\) 和 \(t_s\) 精确连接两个 Radau 阶段。分离前后的质量分别使用静态参数 \(m_s^-\) 和 \(m_s^+\),再由系统等式连接,从而表示真实的质量重置,而不会错误地强制质量连续。
一级燃尽质量和二级干质量来自上述推进剂构成。一级自身的推进剂不足以到达目标远地点,因此两个动力级会自然参与任务,无需人为设置二级节流下限。目标中的小权重节流平方项对最短时间目标起正则化作用。
每个阶段采用 96 个 Radau 网格区间,每个区间使用一个配点,从而得到分段常值节流和分段线性状态重构。因此,节点处的边界也在节点之间成立,不会受到高阶插值过冲的影响。初始猜测包含精确的 0.20 质量跳变,并保持高度和速度连续。优化完成后,程序还会在每个阶段的 2,001 个均匀时间点上独立检查全部路径边界。
运行示例¶
在仓库根目录运行:
如需保存图片且不打开窗口:
关键实现¶
阶段端点使用共享系统符号连接连续状态,并在分离前后使用不同的质量符号:
system = System(
[
"h_separation", "v_separation",
"m_before_drop", "m_after_drop",
"t_separation", "m_final", "t_final",
]
)
h_s, v_s, m_before, m_after, t_s, m_f, t_f = system.s
first_stage.set_boundary_condition(
[0.0, 0.0, 1.0], [h_s, v_s, m_before], 0.0, t_s
)
second_stage.set_boundary_condition(
[h_s, v_s, m_after], [2.0, 0.0, m_f], t_s, t_f
)
system.set_phase([first_stage, second_stage])
燃尽质量和离散重置写成系统级等式,终端质量下界表示二级干质量:
system.set_system_constraint(
[m_before, m_after - m_before, m_f, t_f - t_s],
[0.94, -0.20, 0.62, 0.40],
[0.94, -0.20, 0.74, 5.00],
)
system.set_objective(
t_f + 0.04 * (first_stage.I[0] + second_stage.I[0])
)
完整源码还包括全部路径和静态变量边界、具有动力学合理性的初始猜测、求解器状态检查,以及对阶段连续性、推进剂限制和质量重置的数值验证。
已验证结果¶
经过验证的解得到目标函数值 \(2.64500359\)、分离时刻 \(t_s=0.750000\) 和终止时刻 \(t_f=2.601708\)。分离高度为 \(h_s=0.403132\),分离速度为 \(v_s=1.105664\)。二级使用 \(0.015374\) 个质量单位的推进剂,随后滑行至目标远地点,终端质量为 \(m_f=0.724626\)。
分离前后的高度和速度在所列精度下完全一致,计算得到的质量跳变为 \(0.200000\)。密集重构在所列精度下没有路径边界超限;最大速度为 \(1.495408<3\),二级最小质量比干质量下界高 \(0.104626\)。图中的竖直虚线表示分离时刻,质量图中的点线段表示瞬时质量重置。

源码¶
完整可运行示例见 examples/multiphase_two_stage_rocket.py。