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 (r,\theta).

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 \theta_L=\pi/2 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:

m(\ddot{r}-r\dot{\theta}^2) = -P_1-P_2\cos(\zeta)+(F_d-F_t)\sin(\gamma_e)+F_l\cos(\gamma_e)\\
m(r\ddot{\theta}+2\dot{r}\dot{\theta}) = -P_2\sin(\zeta)+(F_t-F_d)\cos(\gamma_e)+F_l\sin(\gamma_e)

Notations: P1: Force gravitationel du corps principale (N). P2: Force gravitationel du corps secondaire (N). F_t: Poussée (N) F_d: Trainée (N). F_l: Portance (N). \gamma_e: Angle entre le vecteur vitesse (/CP) et le vecteur e_\theta. \omega Angle de manoeuvre. \Delta U Différentiel de vitesse de la manoeuvre.

Le corps princpal possède généralement une atmosphère simple de type:

\rho(z)=\rho_0\exp(-z/Z_0)

Lors de la rentrée atmosphérique, le repère lanceur est le suivant:

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

Indices and tables