Bonjour !
Voilà, je suis programmeur mais totalement novice sur en automatique. Actuellement, je me diverti en programmant sur codingame le problème de Mars Lander Fuel. Le but était de faire atterir un vaisseau spatial sur une zone horizontale.
Voici une image du puzzle.
Le jeu modélise une chute libre sans atmosphère. La gravité sur Mars est de 3,711 m/s². Pour une puissance des fusées de X, on génère une poussée équivalente à X m/s² et on consomme X litres de fuel. Il faut donc une poussée de 4 quasi verticale pour compenser la gravité de Mars.
En sortie, nous donnons l'orientation du vaisseau suivant un angle de -90 à +90° et sa puissance qui varie de 0 à 4.
Chaque tour le jeu nous envoi une liste d'informations :
X,Y sont les coordonnées en mètres de la capsule.
hSpeed et vSpeed sont respectivement la vitesse horizontale et la vitesse verticale de Mars Lander (en m/s). Suivant le déplacement de Mars Lander, les vitesses peuvent être négatives.
fuel est la quantité de fuel restant en litre. Quand le fuel vient à manquer, la puissance des fusées tombe à zéro.
rotate est l’angle de rotation de Mars Lander en degré.
power est la puissance des fusées de la capsule.
Pour qu’un atterrissage soit réussi, la capsule doit :
atterrir sur un sol plat
atterrir dans une position verticale (angle = 0°)
la vitesse verticale doit être limitée ( ≤ 40 m/s en valeur absolue)
la vitesse horizontale doit être limitée ( ≤ 20 m/s en valeur absolue)
J'aimerai pour ce problème utiliser un correcteur afin d'apprendre quelque chose de nouveau plutôt que de faire une correction un peu bête et méchant (si je suis dans cette range, je fais ca, si je suis dans cette range, je fais ca, etc....)
Pour information je programme en python. Pour l'instant, j'arrive à récupérer les coordonnées x de la zone d'atterissage possible, et de sa position en y. J'ai aussi calculé le milieu de la zone (en coordonnée X) afin d'avoir une marge d'erreur possible lors de l'atterissage qui sera donc le point visé en X.
Pour commencer, je souhaite utiliser un correcteur pour gérer l'angle de rotation de mon vaisseau.
Donc mes entrées utiles pour calculer ma consigne en X sont :
- la coordonnée X visée pour atterir
- la coordonnée X actuelle du vaisseau
- la vitesse horizontale
- auxquelles je peux rajouter la puissance du vaisseau actuelle
Je suis donc parti sur l'utilisation d'un correcteur. Ne voulant pas trop complexifier, je me suis dit que je commencerai déjà par réaliser un correcteur P même si celui si risque d'être insuffisant dans mon cas.
Malheureusement, je bloque vite. Puisque je n'ai pas de fonction de transfert de mon système... Je ne vois pas comment je peux corriger sa position et commencer mes calculs.
C'est pourquoi je vous solicite !
Merci d'avance
-----