Orbital transfert: consumption minimisation
The orbital transfer consumption minimisation problem consists in minimising
\[ \int_{0}^{tf} \lVert u(t) \rVert \, \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, :consumption)
title = Orbital transfert - consumption minimisation - ∫ ‖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)
∫(norm(u(t))) → min
The (autonomous) optimal control problem is of the form:
minimize J(x, u) = ∫ f⁰(x(t), u(t)) dt, over [0.0, 20.1]
subject to
ẋ(t) = f(x(t), u(t)), t in [0.0, 20.1] a.e.,
ξl ≤ ξ(u(t)) ≤ ξu,
ϕl ≤ ϕ(x(0.0), x(20.1)) ≤ ϕ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)