小推力转移

基于 7D 增广状态 [r, v, m] 的小推力最优控制转移设计。通过 transfer_orbit() 编排器路由,内部调用 LowThrustShootingLowThrustCollocation 完成 Q-law 初猜 + SLSQP 打磨闭环。

基本原理

小推力转移在 7D 增广状态空间中建模:

\[\dot{\mathbf{r}} = \mathbf{v}, \quad \dot{\mathbf{v}} = \mathbf{a}_{\text{grav}} + \frac{T \cdot \delta}{m} \hat{\mathbf{u}}, \quad \dot{m} = -\frac{T \cdot \delta}{I_{sp} \, g_0}\]

其中:

  • \(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\)

求解流程(两级):

  1. Q-law 初猜:Lyapunov 反馈律前向积分,生成次优控制历史

  2. 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 – 50

  • solver_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}")