Documentation du Module Orbiter¶
Contents:
Présentation générale¶
Le module Orbiter basé sur le language Python, permet l’intégration numérique de la trajectoire d’un astronef dans le champs gravitationel de 2 corps: Un corps principal (fixe), et un corps secondaire (en mouvement de rotation uniforme autour du corps principal).
La class Launcher permet de modéliser un lanceur à partir de plusieurs éléments Stage.
La class Stage modélise un étage et son moteur grace à son ISP et son débit.
La class Capsule est une modélisation simple permettant de spécifier directement le delta_v d’une manoeuvre.
Ces trois class sont équivalentes en terme d’intégration numérique mais ne présentent pas le même niveau de
modélisation. Elles sont basées sur
l’intégration des lois de Newton dans le repère du corps principal (CP) en coordonnées
polaire .
![https://hpp.education/Lessons/MecaSpace/SystemOrbite.jpg](https://hpp.education/Lessons/MecaSpace/SystemOrbite.jpg)
Le système représenté est basé sur l’influence gravitationelle d’un corps
principal et d’un corps secondaire (généralement le satellite le plus massif).
Le corps secondaire est placé initialement en et se déplace sur son orbite
circulaire dans le sens anti-horaire. Le corps principal peut être changé en utilisant
la fonction planet(nom) ou body=nom dans l’initialisation. Le corps secondaire
peut être modifié en utilisant la fonction setmoon(nom).
Les équations du mouvement intégrées dans la méthode integtraj() sont les suivantes:
Notations:
: Force gravitationel du corps principale (N).
: Force gravitationel du corps secondaire (N).
: Poussée (N)
: Trainée (N).
: Portance (N).
: Angle entre le vecteur vitesse (/CP) et le vecteur
.
Angle de manoeuvre.
Différentiel de vitesse de la manoeuvre.
Le corps princpal possède généralement une atmosphère simple de type:
Lors de la rentrée atmosphérique, le repère lanceur est le suivant:
![https://hpp.education/Lessons/MecaSpace/RepereLanceur.jpg](https://hpp.education/Lessons/MecaSpace/RepereLanceur.jpg)
La Class SpaceDevice¶
- class Orbiter.Spacedevice(Diameter=1.0, Heigh=5.0, z0=0.0, u0=0.0, gamma0=0.0, fin=0.0, body='Terre', name='Trajectoire_default')¶
Bases :
object
Class Spacedevice
Cette Class est la plus generique, elle inclu les methodes d integration et les constantes universelles.
Pour changer de planete, il faut mettre a jour les donnee de l’instance. Exemple: cap=Capsule(….) cap.Rt => affiche le rayon de la terre cap.Rt=3390 => Rayon de Mars
- G = 6.67408e-11¶
- Ms = 1.9884e+30¶
- P2S()¶
Converti les coordonees par rapport au corps principal (CP) en coordonnees par rapport au corps secondaire (CS) Retours: * r2 : Position / CS * theta2 : Azimute / CS
- RK2()¶
Integration d’ordre 2 avec le schéma Runge-Kutta met a jour tp,rp,z et theta
- RK4()¶
Integration d’ordre 1 avec le schéma d’euler met a jour tp,rp,z et theta
- RK4p()¶
Integration d’ordre 4 avec le schéma RK4 vect met a jour tp,rp,z et theta
- S2P(r2, theta2)¶
Converti les coordonnées par rapport au corps secondaire (CS) en coordonnees par rapport au corps principale (CP) Retours: * r : Position / CP * theta : Azimute / CP
- Sec2days(seconds)¶
- __dict__ = mappingproxy({'__module__': 'Orbiter', '__doc__': "\n Class Spacedevice \n \n Cette Class est la plus generique, elle inclu les methodes d integration et\n les constantes universelles.\n\n Pour changer de planete, il faut mettre a jour les donnee de l'instance.\n Exemple:\n cap=Capsule(....)\n cap.Rt => affiche le rayon de la terre\n cap.Rt=3390 => Rayon de Mars\n\n ", 'G': 6.67408e-11, 'Ms': 1.9884e+30, 'thetaL': 1.5707963267948966, '__init__': <function Spacedevice.__init__>, 'get_planet': <function Spacedevice.get_planet>, 'planet': <function Spacedevice.planet>, 'setmoon': <function Spacedevice.setmoon>, 'linkal': <function Spacedevice.linkal>, 'atmosphere': <function Spacedevice.atmosphere>, 'S2P': <function Spacedevice.S2P>, 'P2S': <function Spacedevice.P2S>, 'cart2pol': <function Spacedevice.cart2pol>, 'pol2cart': <function Spacedevice.pol2cart>, 'e2m': <function Spacedevice.e2m>, 'm2e': <function Spacedevice.m2e>, '__repr__': <function Spacedevice.__repr__>, 'getgravity': <function Spacedevice.getgravity>, 'rhs': <function Spacedevice.rhs>, 'rhsp': <function Spacedevice.rhsp>, 'rhs_old': <function Spacedevice.rhs_old>, 'euler': <function Spacedevice.euler>, 'RK2': <function Spacedevice.RK2>, 'RK4p': <function Spacedevice.RK4p>, 'RK4': <function Spacedevice.RK4>, 'trajint': <function Spacedevice.trajint>, 'update_udyn': <function Spacedevice.update_udyn>, 'run': <function Spacedevice.run>, 'write': <function Spacedevice.write>, 'load': <function Spacedevice.load>, 'update_wind': <function Spacedevice.update_wind>, 'rho': <function Spacedevice.rho>, 'plotraj': <function Spacedevice.plotraj>, 'anim': <function Spacedevice.anim>, 'Sec2days': <function Spacedevice.Sec2days>, 'monit': <function Spacedevice.monit>, '__dict__': <attribute '__dict__' of 'Spacedevice' objects>, '__weakref__': <attribute '__weakref__' of 'Spacedevice' objects>, '__annotations__': {}})¶
- __init__(Diameter=1.0, Heigh=5.0, z0=0.0, u0=0.0, gamma0=0.0, fin=0.0, body='Terre', name='Trajectoire_default')¶
- __module__ = 'Orbiter'¶
- __repr__()¶
Affichage des parametres de l’astronef
- __weakref__¶
list of weak references to the object
- anim(kind='polar', skip=500, ref=0)¶
Anim la trajectoire.
- atmosphere()¶
Trace l’evolution de la masse volumique de l’atmosphere en fonction de l’altitude.
- cart2pol(ux, uy, theta)¶
Coordonnées cart vers corrd polaires
- e2m()¶
Converti les vitesses par rapport au corps principal (CP) en vitesse par rapport au corps secondaire (CS) Retours: * u_r : Vitesse radiale / CS * u_theta : Vitesse angulaire / CS
- euler()¶
Integration d’ordre 1 avec le schéma d’euler met a jour tp,rp,z et theta
- get_planet(name='Terre')¶
Base des charactéristiques physique et orbitale des corps celestes:
Soleil Mercure Venus Terre Lune Mars Phobos Ceres Jupiter Ganymede Saturne Titan Uranus Titania Neptune Triton Pluton Charon Eris Dysnomie
- getgravity()¶
Calcul des zones d influences des differents astres locaux et met a jour la force de gravite en fonction.
- linkal()¶
- load()¶
Chargement des resultats:
- m2e(ur, ut)¶
Converti les vitesses par rapport au corps secondaire (CS) en vitesse par rapport au corps principal (CP) Retours: * u_r : Vitesse radiale / CP * u_theta : Vitesse angulaire / CP
- monit(fig)¶
Represente l evolution des donnees trajectoire. Cette methode necessite un objet matplolib (fig) en input. * 11 :U(t) 12 :Z(U) * 21 :G(Z) 22 :Phi(Z) * 31 :P(t) 32 :gamma(Z)
- planet(name='Terre')¶
- Change les caractéristiques du corps principal:
self.Mt self.Rt self.rho0 self.Z0 self.Ml self.Rl self.al self.at self.TL self.earth_lim1 self.moon_inf
Corps possibles: Soleil Mercure Venus Terre Mars Jupiter Ceres Saturne Uranus Neptune Pluton Eris
- plotraj(kind='rect', impref=0)¶
Represente la trajectoire a partir des resultat de l integration de la trajectoire. * kind=”rect” (default) => Dans le plan (x,z) * kind=”polar” => Dans le plan (r,theta)
- pol2cart(ur, ut, theta)¶
Coordonnées polaires vers corrd cart.
- rho()¶
Modele d atmosphere
- rhs(state, t)¶
Terme de droite de la conservation qdm
- rhs_old(u, t)¶
Terme de droite de la conservation qdm
- rhsp(state, statep, t)¶
Terme de droite de la conservation qdm
- run(ntmax=1000000.0, dt=0.01)¶
Avance la trajectoire de ntmax iterations ou jusqu a z=0
- setmoon(name='Terre')¶
- Change les caractéristiques du corps secondaire:
self.Ml self.Rl self.al self.at self.TL self.earth_lim1 self.moon_inf
Corps possibles: Mercure Venus Terre Mars Jupiter Saturne Uranus Neptune
- thetaL = 1.5707963267948966¶
- trajint()¶
Permet d integrer les equations du mouvement dans un repere geocentrique polaire 2D (er,etheta) Le schéma d’intégration est donné par self.integ Schemas dispo: Euler RK2 RK4 RK4 simplectique
- update_udyn()¶
Mise a jour de la vitesse relative de l’air Cela permet de prendre en compte la vitesse de rotation de la terre En considerant que l’atmosphere tourne avec.
- update_wind()¶
* Ajoute du vent et modifie l’incidence *
- write()¶
Ecriture de la trajectoire
« 0-time | 1-r | 2-theta | 3-U | 4-Gamma | 5-Pdyn | 6-phi | 7-Acc | 8-Fl | 9-Alpha | 10-ref | 11-thetaL | 12-Ft | 13-Engine | 14-r2 | 15-theta2 | 16-Moon «
La Class Stage¶
- class Orbiter.Stage(ISP=350.0, IC=0.1, H=4, D=1, qm=10.0, mc=10.0, z0=0.0, u0=0, gamma0=-90, body='Terre', moteur='none', name='Trajectoire')¶
Bases :
Spacedevice
Class Stage - CNAM IAS
Simon Marie - fev.2018
La Class Stage permet la creation d un objet Python modelisant un etage de Lanceur spatial. Differentes characteristiques peuvent etre saisies a l initialisation
ISP : Impulsion specifique (default= 350.)
IC : Indice constructif ms/me (default=0.1)
z0 : altitude initiale (default=0 m)
u : vitesse initiale (default=0 m/s)
gi : angle gamma initial (default=-90)
fin : finesse de la capsule (default=0)
name : nom du fichier resultats (default=Launch.dat)
- __add__(other)¶
- __annotations__ = {}¶
- __init__(ISP=350.0, IC=0.1, H=4, D=1, qm=10.0, mc=10.0, z0=0.0, u0=0, gamma0=-90, body='Terre', moteur='none', name='Trajectoire')¶
- __module__ = 'Orbiter'¶
- __repr__()¶
modu=Stage() Permet d afficher l instance en faisant print(modu)
- boost(tTime=1, dt=0.1, tangle=-90)¶
Allumage des moteurs pendant une durée tTime(s) avec un angle tAngle(deg)
- check_thrust()¶
Verification poussee necessaire
- engine_start()¶
- engine_stop()¶
- get_thrust()¶
Calcul de la pousse local au point courant
- run(ntmax=1000000.0, dt=0.01)¶
Avance la trajectoire de ntmax iterations ou jusqu a z=0
- update()¶
Mise a jour des parametres propulsifs. Si un parametre de base est modifie, cette methode permet de mettre a jour les parametres qui en dependent.
- update_atm()¶
- update_m()¶
Mise a jour de la masse et des parametres d Inertie.
- update_reserv()¶
Mise a jour du volume carburant disponible
- update_rot()¶
Met a jour l’incidence de l etage due au moments lacet/tangage
La Class Launcher¶
- class Orbiter.Launcher(stages, name='Launch_base')¶
Bases :
Stage
Class Launcher (somme de Stage) Un lanceur peut etrte obtenu en faisant:
A=Stage(ISP=420,IC=0.08) B=Stage(ISP=320,IC=0.12) Lanceur=A+B
- __annotations__ = {}¶
- __init__(stages, name='Launch_base')¶
- __module__ = 'Orbiter'¶
- __repr__()¶
modu=Stage() Permet d afficher l instance en faisant print(modu) Pour desactiver l affichage il faut mettre la variable self.display false
- drop(ind=0)¶
Largage de l etage inferieur si vide
- update_stages()¶
Met a jour les donnees du lanceur en fonction de la forme de la liste stages
La Class Capsule¶
- class Orbiter.Capsule(beta=0.005, u=7910, z0=100000.0, gi=0.0, fin=0.0, body='Terre', name='Rentree')¶
Bases :
Spacedevice
Class Capsule - CNAM IAS
Simon Marie - nov.2018
La Class Capsule permet la creation d un objet Python modelisant une capsule de rentree. Differentes characteristiques peuvent etre saisies a l initialisation
beta : parametre balistique de la capsule (default= 5e-3)
z0 : altitude initiale (default=1e5 m)
u : vitesse initiale (default=7910 m/s)
gi : angle gamma initial (default=0)
fin : finesse de la capsule (default=0)
body : Corp principal
moon : Corp secondaire
name : nom du fichier resultats (default=Rentree)
L instanciation se fait de la facon suivante:
exemple=Capsule()
On pourra modifier les parametres par defaut impose a l initialisation en passant des arguments lors de la creation:
exemple=Capsule(u=12000,z0=400e3)
- __annotations__ = {}¶
- __init__(beta=0.005, u=7910, z0=100000.0, gi=0.0, fin=0.0, body='Terre', name='Rentree')¶
- __module__ = 'Orbiter'¶
- __repr__()¶
caps=Capsule() Permet d afficher l instance en faisant print(caps) Peut etre desactiver avec self.display=False
- mvr(dv, omega, ref=0)¶
Effectue une manoeuvre en imposant:
dv: differentielle de vitesse
omega: angle du delta V
ref=0 : Manoeuvre par rapport au corps principal
ref=1 : Manoeuvre par rapport au corps secondaire