"1. Ecrire le problème de contrôle optimal sous la forme de Mayer.\n",
"1. Ecrire le problème de contrôle optimal sous la forme de Mayer.\n",
"2. Donner le pseudo-hamiltonien $H(q, p, u)$, où $q = (x, y, \\theta)$ et $p = (p_x, p_y, p_\\theta)$.\n",
"2. Donner le pseudo-hamiltonien $H(q, p, u)$, où $q = (x, y, \\theta)$ et $p = (p_x, p_y, p_\\theta)$.\n",
"3. Calculer l'équation adjointe, c'est-à-dire vérifiée par le vecteur adjoint $p$, donnée par le principe du maximum de Pontryagin.\n",
"3. Calculer l'équation adjointe, c'est-à-dire vérifiée par le vecteur adjoint $p$, donnée par le principe du maximum de Pontryagin.\n",
"4. Calculer le contrôle maximisant en fonction de $p_\\theta$ (on pourra l'écrire comme une [fonction multivaluée](https://fr.wikipedia.org/wiki/Fonction_multivaluée)).\n",
"4. Puisque le temps final $t_f$ est libre, nous avons une condition sur le pseudo-hamiltonien à ce temps-ci. Donner la condition vérifiée par $H(q(t_f), p(t_f), u(t_f))$.\n",
"5. Calculer le contrôle singulier, c'est-à-dire celui permettant de vérifier $p_\\theta(t) = 0$ sur un intervalle de temps non réduit à un singleton."
"5. Calculer le contrôle maximisant en fonction de $p_\\theta$ (on pourra l'écrire comme une [fonction multivaluée](https://fr.wikipedia.org/wiki/Fonction_multivaluée)).\n",
"6. Calculer le contrôle singulier, c'est-à-dire celui permettant de vérifier $p_\\theta(t) = 0$ sur un intervalle de temps non réduit à un singleton. Utiliser le fait que le pseudo-hamiltonien est constant le long de l'extrémale pour conclure."
# Problème de navigation, une approche [MPC](https://en.wikipedia.org/wiki/Model_predictive_control)
# Problème de navigation, une approche [MPC](https://en.wikipedia.org/wiki/Model_predictive_control)
- Date : 2025
- Date : 2025
- Durée approximative : inconnue
- Durée approximative : inconnue
On considère un navire dans un courant constant $w=(w_x,w_y)$, $\|w\|\lt 1$.
On considère un navire dans un courant constant $w=(w_x,w_y)$, $\|w\|\lt 1$.
[L'angle de cap](https://fr.wikipedia.org/wiki/Cap_(navigation)) est contrôlé, amenant aux équations différentielles suivantes :
[L'angle de cap](https://fr.wikipedia.org/wiki/Cap_(navigation)) est contrôlé, amenant aux équations différentielles suivantes :
$$ \begin{array}{rcl}
$$ \begin{array}{rcl}
\dot{x}(t) &=& w_x+\cos\theta(t),\quad t \in [0,t_f]\\
\dot{x}(t) &=& w_x+\cos\theta(t),\quad t \in [0,t_f]\\
\dot{y}(t) &=& w_y+\sin\theta(t),\\
\dot{y}(t) &=& w_y+\sin\theta(t),\\
\dot{\theta}(t) &=& u(t).
\dot{\theta}(t) &=& u(t).
\end{array} $$
\end{array} $$
La vitesse angulaire est limitée et normalisée : $\|u(t)\|\leq 1$. Il y a des conditions aux limites au temps initial $t = 0$ et au temps final $t = t_f$, sur la position $(x,y)$ et sur l'angle $\theta$. L'objectif est de minimiser le temps final. Ce sujet est inspiré de ce [TP](https://github.com/pns-mam/commande/tree/main/tp3) dont le problème vient d'une collaboration entre l'Université Côte d'Azur et l'entreprise française [CGG](https://www.cgg.com) qui s'intéresse aux manoeuvres optimales de très gros navires pour la prospection marine.
La vitesse angulaire est limitée et normalisée : $\|u(t)\|\leq 1$. Il y a des conditions aux limites au temps initial $t = 0$ et au temps final $t = t_f$, sur la position $(x,y)$ et sur l'angle $\theta$. L'objectif est de minimiser le temps final. Ce sujet est inspiré de ce [TP](https://github.com/pns-mam/commande/tree/main/tp3) dont le problème vient d'une collaboration entre l'Université Côte d'Azur et l'entreprise française [CGG](https://www.cgg.com) qui s'intéresse aux manoeuvres optimales de très gros navires pour la prospection marine.
✏️ **Exercice 1.** On supposera $p^0 = -1$, on se place dans le cas normal.
✏️ **Exercice 1.** On supposera $p^0 = -1$, on se place dans le cas normal.
1. Ecrire le problème de contrôle optimal sous la forme de Mayer.
1. Ecrire le problème de contrôle optimal sous la forme de Mayer.
2. Donner le pseudo-hamiltonien $H(q, p, u)$, où $q = (x, y, \theta)$ et $p = (p_x, p_y, p_\theta)$.
2. Donner le pseudo-hamiltonien $H(q, p, u)$, où $q = (x, y, \theta)$ et $p = (p_x, p_y, p_\theta)$.
3. Calculer l'équation adjointe, c'est-à-dire vérifiée par le vecteur adjoint $p$, donnée par le principe du maximum de Pontryagin.
3. Calculer l'équation adjointe, c'est-à-dire vérifiée par le vecteur adjoint $p$, donnée par le principe du maximum de Pontryagin.
4. Calculer le contrôle maximisant en fonction de $p_\theta$ (on pourra l'écrire comme une [fonction multivaluée](https://fr.wikipedia.org/wiki/Fonction_multivaluée)).
4. Puisque le temps final $t_f$ est libre, nous avons une condition sur le pseudo-hamiltonien à ce temps-ci. Donner la condition vérifiée par $H(q(t_f), p(t_f), u(t_f))$.
5. Calculer le contrôle singulier, c'est-à-dire celui permettant de vérifier $p_\theta(t) = 0$ sur un intervalle de temps non réduit à un singleton.
5. Calculer le contrôle maximisant en fonction de $p_\theta$ (on pourra l'écrire comme une [fonction multivaluée](https://fr.wikipedia.org/wiki/Fonction_multivaluée)).
6. Calculer le contrôle singulier, c'est-à-dire celui permettant de vérifier $p_\theta(t) = 0$ sur un intervalle de temps non réduit à un singleton. Utiliser le fait que le pseudo-hamiltonien est constant le long de l'extrémale pour conclure.
✏️ **Exercice 2.** Coder le problème de contrôle optimal ci-dessous.
✏️ **Exercice 2.** Coder le problème de contrôle optimal ci-dessous.
On pourra s'insiprer du problème de la [rame de métro à temps minimal](https://control-toolbox.org/OptimalControl.jl/stable/tutorial-double-integrator-time.html) décrit dans la documentation du package OptimalControl pour définir notre problème de manoeuvre de navire ci-après.
On pourra s'insiprer du problème de la [rame de métro à temps minimal](https://control-toolbox.org/OptimalControl.jl/stable/tutorial-double-integrator-time.html) décrit dans la documentation du package OptimalControl pour définir notre problème de manoeuvre de navire ci-après.
Dans la simulation précédente, nous faisons l'hypothèse que le courant est constant. Cependant, d'un point de vue pratique le courant dépend de la position $(x, y)$. Etant donné un modèle de courant, donné par la fonction `current`, nous pouvons simuler la trajectoire réelle du navire, pourvu que l'on ait la condition initiale et le contrôle au cours du temps.
Dans la simulation précédente, nous faisons l'hypothèse que le courant est constant. Cependant, d'un point de vue pratique le courant dépend de la position $(x, y)$. Etant donné un modèle de courant, donné par la fonction `current`, nous pouvons simuler la trajectoire réelle du navire, pourvu que l'on ait la condition initiale et le contrôle au cours du temps.
%% Cell type:code id:25422e2e tags:
%% Cell type:code id:25422e2e tags:
``` julia
``` julia
function realistic_trajectory(tf,t0,x0,y0,θ0,u,current;abstol=1e-12,reltol=1e-12,saveat=[])
function realistic_trajectory(tf,t0,x0,y0,θ0,u,current;abstol=1e-12,reltol=1e-12,saveat=[])
En pratique, nous n'avons pas à l'avance les données réelles du courant sur l'ensemble du trajet, c'est pourquoi nous allons recalculer régulièrement le contrôle optimal. L'idée est de mettre à jour le contrôle optimal à intervalle de temps régulier en prenant en compte le courant à la position où le navire se trouve. On est donc amener à résoudre un certain nombre de problème à courant constant, avec celui-ci mis réguilièremet à jour. Ceci est une introduction aux méthodes dites MPC, pour "Model Predictive Control" en anglais.
En pratique, nous n'avons pas à l'avance les données réelles du courant sur l'ensemble du trajet, c'est pourquoi nous allons recalculer régulièrement le contrôle optimal. L'idée est de mettre à jour le contrôle optimal à intervalle de temps régulier en prenant en compte le courant à la position où le navire se trouve. On est donc amener à résoudre un certain nombre de problème à courant constant, avec celui-ci mis réguilièremet à jour. Ceci est une introduction aux méthodes dites MPC, pour "Model Predictive Control" en anglais.
%% Cell type:code id:563c73fd tags:
%% Cell type:code id:563c73fd tags:
``` julia
``` julia
Nmax=20# nombre d'itérations max de la méthode MPC
Nmax=20# nombre d'itérations max de la méthode MPC
ε=1e-1# rayon sur la condition finale pour stopper les calculs
ε=1e-1# rayon sur la condition finale pour stopper les calculs
Δt=1.0# pas de temps fixe de la méthode MPC
Δt=1.0# pas de temps fixe de la méthode MPC
P=300# nombre de points de discrétisation pour le solveur
P=300# nombre de points de discrétisation pour le solveur