小推力转移
基于 7D 增广状态 [r, v, m] 的小推力最优控制转移设计。通过
transfer_orbit() 编排器路由,内部调用
LowThrustShooting 或
LowThrustCollocation
完成 Q-law 初猜 + SLSQP 打磨闭环。
基本原理
小推力转移在 7D 增广状态空间中建模:
其中:
\(T\) 为最大推力(N),\(\delta \in [0, 1]\) 为节流系数
\(\hat{\mathbf{u}}\) 为推力方向,用球面角度参数化 \(\alpha(\theta_1, \theta_2)\)
\(I_{sp}\) 为比冲(s),\(g_0 = 9.81 \, \text{m/s}^2\)
求解流程(两级):
Q-law 初猜:Lyapunov 反馈律前向积分,生成次优控制历史
SLSQP 打磨:min-fuel NLP,决策变量为各段常量控制
(throttle, θ₁, θ₂), 约束为终端位置速度匹配目标
使用方法
from e2m2e.algorithm.transfer import transfer_orbit, EngineConfig
from e2m2e.data.templates import ConvergenceState
result = transfer_orbit(
"low_thrust",
engine_config=EngineConfig(t_max=0.5, isp=3000.0),
initial_mass=1000.0,
n_segments=10,
target_oe=(7200.0, 0.0, 0.0),
solver_method="shooting",
duration_days=30.0,
departure_state=departure_6d,
target_state=target_6d,
)
# 结果访问
print(f"等效 Δv = {result.details.equivalent_delta_v:.4f} km/s")
print(f"燃料消耗 = {result.details.fuel_consumed:.2f} kg")
print(f"收敛 = {result.details.status == ConvergenceState.CONVERGED}")
配点法求解器(大规模更鲁棒):
result = transfer_orbit(
"low_thrust",
engine_config=EngineConfig(t_max=0.5, isp=3000.0),
initial_mass=1000.0,
n_segments=20,
target_oe=(42164.0, 0.0, 0.0),
solver_method="collocation",
duration_days=200.0,
departure_state=departure_6d,
target_state=target_6d,
)
与脉冲转移的 Δv 对比
脉冲转移和小推力转移的 Δv 口径不同:
脉冲 Δv:\(\Delta v = \sum |\Delta v_i|\),瞬时速度增量之和
小推力等效 Δv:\(\Delta v_{\text{eq}} = I_{sp} \cdot g_0 \cdot \ln(m_0 / m_f) / 1000\), Tsiolkovsky 方程反算(km/s)
小推力因持续推力(gravity loss),等效 Δv 通常 ≥ 脉冲 Δv。在短弧小轨道改变 场景下差异较小;在大能量转移(如 LEO→GEO)中差异显著。
from e2m2e.algorithm.transfer import transfer_orbit, EngineConfig
from e2m2e.algorithm.transfer.hohmann import hohmann_delta_v
# 脉冲 Δv
dv1, dv2 = hohmann_delta_v(7000.0, 42164.0)
dv_impulsive = dv1 + dv2
# 小推力等效 Δv(从 result.details.equivalent_delta_v 获取)
推进参数说明
EngineConfig 字段:
t_max: 最大推力(N)。典型值域:电推进(Hall thruster): 0.01 – 1.0 N
电推进(ion thruster): 0.0001 – 0.1 N
化学低推力: 1 – 100 N
isp: 比冲(s)。典型值域:电推进(Hall thruster): 1500 – 3000 s
电推进(ion thruster): 2000 – 5000 s
化学推进: 300 – 450 s
其他关键参数:
initial_mass: 航天器初始质量(kg)n_segments: 求解器段数。越多精度越高但计算越慢。典型值 5 – 50solver_method:"shooting"(直接打靶,解析雅可比快 5-24x)或"collocation"(Hermite-Simpson 配点,大规模更鲁棒)duration_days: 飞行时间(天)。LEO→GEO 约 100–300 天;LEO→月球约 3–180 天target_oe: Q-law 目标(a_T, e_T, i_T)(km, 无量纲, 无量纲)
质量演化与推力历史
求解结果包含完整的 7D 状态历史和各段控制参数:
import numpy as np
# 质量剖面
masses = result.details.states_7d[:, 6]
print(f"初始质量: {masses[0]:.2f} kg")
print(f"末态质量: {masses[-1]:.2f} kg")
# 各段控制
for i, seg in enumerate(result.details.segments):
print(f"段 {i}: throttle={seg.throttle:.3f}, "
f"方向={seg.direction}")