Optimisation de trajectoire pour une mission Ariane 5
Ludovic Gouden`ege
Janvier 2015
Je n’ai malheureusement pas la possibilit´e d’ˆetre pr´esent pour cette s´eance et j’esp`ere que vous
pourrez travailler en autonomie avec les informations suppl´ementaires que je vais vous donner via
ce document.
De plus, afin d’´evaluer votre travail, je vous demanderai de r´ediger un compte-rendu de la s´eance
`a me rendre en fin de s´eance. Il s’agit de r´epondre aux questions de cette feuille et de r´ediger les
codes MATLAB correspondants. Envoyez moi l’ensemble de vos codes sous forme d’une archive
par mail `a cette adresse : [email protected]
Il est recommand´e de travailler en binˆome, mais vous pouvez aussi travailler seul ou mˆeme `a
trois suivant la parit´e des ´el`eves pr´esents. Les absents `a cette s´eance ne seront pas p´enalis´es et ce
compte-rendu me permettra surtout de v´erifier que vous avez acquis les comp´etences n´ecessaires
avant la v´eritable s´eance d’examen.
Ce document reprenant essentiellement les diff´erentes ´etapes cl´es du projet, vous pouvez ´egalement
profiter de cette s´eance pour commencer `a r´ediger votre pr´esentation pour l’examen en vous inspi-
rant du plan propos´e ici.
1 Coder les fonctions de bases
1.1 Calculer la force
En d´ebut de projet, vous avez ´et´e amen´es `a r´ediger des fonctions diverses et vari´ees. Certaines se
r´ev`elent sans doute inutiles maintenant, ou bien leur code n’est sans doute pas tr`es optimis´e pour
la vitesse. Je vous propose donc de trouver un moyen d’´ecrire une fonction (qui soit un minimum
optimis´ee) pour calculer la trajectoire. Lors des premi`eres s´eances, vous avez cod´e les fonctions de
base suivantes : masse,beta,isp,poids et poussee. Elles ont pour prototype la forme suivante :
function m = masse(t)
% t est un scalaire, et m est un scalaire.
function b = beta(t)
% t est un scalaire, et b est un scalaire.
function i = isp(t)
% t est un scalaire, et i est un scalaire.
function W = poids(m,r)
% m est un scalaire (la masse), et r est un vecteur colonne 2D (la position).
% W est un vecteur colonne 2D qui contient la force ‘‘poids’’.
function T = poussee(bi,u)
% bi est un scalaire (le produit beta * isp), et u est un angle dans [0, pi].
% T est un vecteur colonne 2D qui contient la force ‘‘poussee’’.
Malheureusement dans ces fonctions il existe des redondances. Par exemple dans les trois
premi`eres il y a les mˆemes tests if else pour d´ecider si on est dans la phase 1, 2 ou 3. IL faudrait
trouver un moyen d’´eviter de faire plusieurs fois les mˆemes tests. Pour cela, il suffit de coder une
1
seule fonction qui rassemble les pr´ec´edentes.
Question 1 : Coder une seule fonction force globale selon le prototype suivant :
function F = force_globale(t,r,u)
% t est un scalaire, r est un vecteur colonne 2D (la position)
% et u est un angle dans [0, pi].
% F est un vecteur colonne 2D qui contient
% la somme du ‘‘poids’’ et de la ‘‘poussee’’.
Dans les fonctions de base, on a appris `a utiliser des variables globales, afin d’´eviter de les passer
en param`etres, mais les variables globales ont tendance `a ralentir l’ex´ecution d’un programme. Dans
votre fonction force globale, vous avez certainement encore fait appel aux variables globales du
probl`eme.
Question 2 : Coder une deuxi`eme fonction force selon le prototype suivant :
function F = force(t,r,u)
% t est un scalaire, r est un vecteur colonne 2D (la position)
% et u est un angle dans [0, pi].
% F est un vecteur colonne 2D qui contient
% la somme du ‘‘poids’’ et de la ‘‘poussee’’.
mais sans utiliser de variables globales (i.e. mettre toutes les constantes du probl`eme (masse-
Booster, debitEtage1, etc avec leur valeur explicite)).
Question 3 : Comment savoir quelle fonction est la plus efficace ? Quel test mettriez-vous en
place pour tester la rapidit´e des deux fonctions ? Quelle fonction vous semble alors la plus rapide
entre force globale et force ?
On veut ensuite coder la fonction fqui repr´esente l’´equation diff´erentielle de la dynamique
y0=f(t, y),
o`u yest un vecteur colonne 4D (2 dimensions pour rla position et deux dimensions pour vla
vitesse). Elle s’´ecrit sous la forme
f:R×R4R4
(t, y) = (t, y1, y2, y3, y4)7→ (y3, y4,force(t,[y(1);y(2)])/masse(t)).
La fonction dynamic suivante :
function y = dynamic(t, x, u )
% t est un scalaire, x est un vecteur colonne 4D (position et vitesse)
% et u est un angle entre 0 et pi.
m=masse(t);
F=force(t, x(1:2,1), u);
y=[x(3:4,1);F/m];
qui code la fonction fen MATLAB n’est pas optimis´ee car elle fait appel `a masse et force et donc
encore une fois, il y a doublement des tests pour le choix des phases 1, 2 ou 3.
Question 4 : ´
Ecrivez une version optimis´ee de dynamic en gardant le mˆeme prototype.
function y = dynamic(t, x, u )
% t est un scalaire, x est un vecteur colonne 4D (position et vitesse)
% et u est un angle entre 0 et pi.
2
0 500 1000 1500
0
0.5
1
1.5
2
2.5
3
(a) Commande `a 12 valeurs
0 500 1000 1500
0
0.5
1
1.5
2
2.5
3
(b) Commande `a 6 valeurs
Figure 1: Deux commandes upossibles.
1.2 La commande de la fus´ee
Le troisi`eme param`etre de la fonction dynamic est ul’angle de la commande. On supposera que
cet angle reste entre 0 et π. Sur la figure 1, vous pouvez voir le trac´e de deux commandes possibles
sur la p´eriode de pouss´ee [0,1500].
La commande est constante par morceaux. On peut imaginer en effet que les ing´enieurs ori-
entent les moteurs dans une certaine direction et ne modifie cette direction qu’`a certains instants
donn´es. Ici les ing´enieurs ont d´ecid´e de donner une valeur `a la commande toutes les 125 secondes,
ce qui donne 12 valeurs au cours du temps. Le deuxi`eme exemple de commande ne prend que 6
valeurs changeantes toutes les 250 secondes.
On dit que la commande peut ˆetre encod´ee sur 6 (ou 12) valeurs. C’est-`a-dire qu’on se repr´esente
la commande par un vecteur uvect de taille 6 (ou 12, disons Ncom dans le cas g´en´eral). Mais la
commande est en r´ealit´e une fonction du temps.
Question 5 : Coder une fonction commande qui a le prototype suivant :
function u=commande(t,uvect)
% t est un scalaire, uvect est un vecteur de taille Ncom.
% u est la valeur de la commande au temps t obtenue par uvect.
Ncom=length(uvect);
permettant de calculer la valeur de la commande (encod´ee par uvect) a n’importe quel instant t.
Remarque 1.1 Attention cette fonction doit ˆetre capable de s’adapter `a la taille de uvect. En
particulier si uvect est de taille 1, la commande est une fonction constante. Si uvect est de taille
3, alors la commande ne change de valeurs que toutes les 500 secondes.
Remarque 1.2 Attention pour ´eviter les effet de bords, on dira que si t0on a u=uvect(1) et
si t1500 on a u=uvect(Ncom).
1.3 R´esoudre l’´equation de la dynamique
Lors des s´eances pr´ec´edentes, vous avez du coder un sch´ema d’Euler pour r´esoudre les ´equations
diff´erentielles du premier ordre de la forme
y0=f(t, y).
Afin que tout le monde poss`ede le mˆeme type de fonction, je vous propose de coder de nouveau ce
scema en utilisant un prototype donn´e.
Question 6 : Coder une fonction euler (qui permet de r´esoudre l’´equation de la dynamique en
utilisant le sch´ema d’Euler et la fonction dynamique) avec le prototype suivant :
3
function Traj = euler(Y0, ti, tf, N, uvect)
% Schema d’Euler pour l’equation y’ = strf(y)
% Y0 est la donnee initiale, c’est un vecteur colonne de dimension 4.
% ti et tf sont les instants de debut et de fin.
% N est le nombre de pas de temps : [Y0, Y1, Y2] represente 3 pas de temps.
% uvect est un vecteur de taille Ncom qui represente la commande.
% Traj est une matrice de taille 4 x N qui contient toute la trajectoire
% c’est-a-dire la position r et la vitesse v pour les N instants entre ti et tf.
A ce stade du TP, vous devriez pouvoir appeler les deux commandes suivantes dans la console
MATLAB :
> Traj = euler([RTerre;0;0;(2*pi*RTerre/TTerre)], 0, 1500, 100, [0.98,3.14,1.62]);
> plot(Traj(1,:),Traj(2,:))
qui utilise une commande uvect de 3 valeurs [0.98,3.14,1.62] et qui r´esoud la dynamique avec un
scema d’Euler utilisant 100 pas de temps entre 0 et 1500 secondes. Vous devriez obtenir le dessin
suivant
4 4.5 5 5.5 6 6.5 7
x 106
0
1
2
3
4
5
6
7
8
9
10
x 106
Figure 2: Trajectoire obtenue avec la commande uvect=[0.98,3.14,1.62].
2 Optimisation de trajectoire
Afin de visualiser ce r´esultat, je vous propose de tracer sur la figure 3 la Terre (courbe bleue), la tra-
jectoire elliptique des satellites obtenue par la simulation (courbe rouge), l’orbite GEO finalement
atteinte (courbe magenta) ainsi que les trajectoires optimales (courbe verte et cyan). J’indique
´egalement les instants terminaux des trois phases lorsqu’il y a largage de moteurs. Vous trouverez
en annexe de cette feuille la fonction trace courbes qui permet de tracer tout ceci.
Remarquez que souvent les satellites reviennent s’´ecraser sur Terre. Ce n’est pas vraiment un
probl`eme, car un fois `a leur p´erig´ee, ils sont envoy´es sur l’orbite GEO. Il peut aussi arriver que la
commande envoie les satellites sur des trajectoires paraboliques ou hyperboliques. Ces cas doivent
ˆetre ´ecart´es par le programme. Je vous propose d’´ecrire maintenat la fonction qui va mesurer la
qualit´e de la trajectoire bleue obtenue. Remarquez que la commande n’a pas besoin d’ˆetre tr`es
complexe pour obtenir une trajectoire assez satisfaisante. La commande qui n’a que 6 valeurs est
tout `a fait acceptable.
Question 7 : Coder une fonction quality ellipse qui va mesurer la qualit´e d’une trajectoire
elliptique avec le prototype suivant :
function Q = quality_ellipse(uvect)
% uvect est un vecteur de taille Ncom qui represente la commande.
4
−5 −4 −3 −2 −1 0 1 2 3 4 5
x 107
−4
−3
−2
−1
0
1
2
3
4
x 107
Terre
Trajectoire numerique
Largage Booster
Largage Etage 1
Largage Etage 2 et Satellites
Ellipse numerique
Orbite GEO numérique
Ellipse optimale
Orbite GEO optimale
(a) Commande `a 12 valeurs
−5 −4 −3 −2 −1 0 1 2 3 4 5
x 107
−4
−3
−2
−1
0
1
2
3
4
x 107
Terre
Trajectoire numerique
Largage Booster
Largage Etage 1
Largage Etage 2 et Satellites
Ellipse numerique
Orbite GEO numérique
Ellipse optimale
Orbite GEO optimale
(b) Commande `a 6 valeurs
−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1
x 108
−6
−4
−2
0
2
4
6
x 107
Terre
Trajectoire numerique
Largage Booster
Largage Etage 1
Largage Etage 2 et Satellites
Ellipse numerique
Orbite GEO numérique
Ellipse optimale
Orbite GEO optimale
(c) Commande `a 3 valeurs
Figure 3: Trajectoires obtenues avec les commandes uvect de la figure 1 et uvect=
[0.98,3.14,1.62].
5
1 / 10 100%