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)