Orbital transfert: energy minimisation
The energy minimisation orbital transfer problem consists in minimising
\[ 0.5\int_{0}^{tf} {\lVert u(t) \rVert}^2 \, \mathrm{d}t\]
subject to the constraints
\[ \dot x_1(t) = x_3(t) \\ \dot x_2(t) = x_4(t) \\ \dot x_3(t) = -\frac{\mu*x_1(t)}{r(t)^3} + u_1(t) \\ \dot x_4(t) = -\frac{\mu*x_2(t)}{r(t)^3} + u_2(t) \\ \lVert u(t) \rVert \leq \gamma_{max} \\ r(t) = \sqrt{x_1(t)^2 + x_2(t)^2}\]
and the limit conditions
\[ x_1(0) = x_{0,1}, \quad x_2(0) = x_{0,2}, \quad x_3(0) = x_{0,3}, \quad x_4(0) = x_{0,4} \\ r(tf) = r_f, \quad x_3(t_f) = -\sqrt{\frac{\mu}{{r_f}^3}}*x_2(t_f), \quad x_4(t_f) = -\sqrt{\frac{\mu}{{r_f}^3}}*x_1(t_f) \\\]
with the constants
\[t_0 = 0 \\ t_f = 20 \\ x0 = [-42272.67, 0, 0, -5796.72] \\ μ = 5.1658620912*1e12 \\ rf = 42165 \\ m_0 = 2000 \\ F_{max} = 100 \\ γ_{max} = \frac{F_{max}*3600.0^2}{m_0*10^3} \\\]
using CTProblems
using DifferentialEquations
using Plots
You can access the problem in the CTProblems package:
prob = Problem(:orbital_transfert, :energy)
title = Orbital transfert - energy minimisation - min ∫ ‖u‖² dt
model (Type) = OptimalControlModel{Autonomous, Fixed}
solution (Type) = OptimalControlSolution
Then, the model is given by
prob.model
The (autonomous) optimal control problem is given by:
t ∈ [t0, tf], time
x ∈ R⁴, state
u ∈ R², control
x(t0) == x0, initial_con
[norm((x(tf))[1:2]) - rf, x₃(tf) + α * x₂(tf), x₄(tf) - α * x₁(tf)] == [0, 0, 0], boundary_con
0 ≤ norm(u(t)) ≤ 1, u_con
ẋ(t) == A * [(-μ * x₁(t)) / sqrt(x₁(t) ^ 2 + x₂(t) ^ 2) ^ 3; (-μ * x₂(t)) / sqrt(x₁(t) ^ 2 + x₂(t) ^ 2) ^ 3; x₃(t); x₄(t)] + B * u(t)
∫(0.5 * (u₁(t) ^ 2 + u₂(t) ^ 2)) → min
The (autonomous) optimal control problem is of the form:
minimize J(x, u) = ∫ f⁰(x(t), u(t)) dt, over [0.0, 20.0]
subject to
ẋ(t) = f(x(t), u(t)), t in [0.0, 20.0] a.e.,
ξl ≤ ξ(u(t)) ≤ ξu,
ϕl ≤ ϕ(x(0.0), x(20.0)) ≤ ϕu,
where x(t) ∈ R⁴ and u(t) ∈ R².
Declarations (* required):
╭────────┬────────┬──────────┬──────────┬───────────┬────────────┬─────────────╮
│ times* │ state* │ control* │ variable │ dynamics* │ objective* │ constraints │
├────────┼────────┼──────────┼──────────┼───────────┼────────────┼─────────────┤
│ V │ V │ V │ X │ V │ V │ V │
╰────────┴────────┴──────────┴──────────┴───────────┴────────────┴─────────────╯
You can plot the solution.
plot(prob.solution)