Orbital transfert: time minimisation
The time minimisation orbital transfer problem consists in minimising
\[ t_f\]
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 \\ 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, :time)
title = Orbital transfert - time minimisation
model (Type) = OptimalControlModel{Autonomous, NonFixed}
solution (Type) = OptimalControlSolution
Then, the model is given by
prob.model
The (autonomous) optimal control problem is given by:
tf ∈ R, variable
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)) ≤ γ_max, 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)
tf → min
The (autonomous) optimal control problem is of the form:
minimize J(x, u, tf) = g(x(0.0), x(tf), tf)
subject to
ẋ(t) = f(x(t), u(t), tf), t in [0.0, tf] a.e.,
ξl ≤ ξ(u(t), tf) ≤ ξu,
ϕl ≤ ϕ(x(0.0), x(tf), tf) ≤ ϕu,
where x(t) ∈ R⁴, u(t) ∈ R² and tf ∈ R.
Declarations (* required):
╭────────┬────────┬──────────┬──────────┬───────────┬────────────┬─────────────╮
│ times* │ state* │ control* │ variable │ dynamics* │ objective* │ constraints │
├────────┼────────┼──────────┼──────────┼───────────┼────────────┼─────────────┤
│ V │ V │ V │ V │ V │ V │ V │
╰────────┴────────┴──────────┴──────────┴───────────┴────────────┴─────────────╯
You can plot the solution.
plot(prob.solution)