See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: autopilot  (Read 2887 times)

0 Members and 1 Guest are viewing this topic.

Offline tofitouf

  • Legend
  • ******
  • Posts: 1380
  • Karma: 0
29 June 2010, 23:35:13
salut à tous,

j'ai besoin de l'aide des scientifique qui lisent ce forum. je réalise un autopilote pour maintenir l'altiude (dans un autre projet d'orbiter) C'est un grand classique. je me disais facile.

mais non mon vaisseau n'arrête pas d'occiler dans tous les sens j'ai du louper un truc

mais en fait pas du tout. j'imagine que certains d'entre vous ont une idée assez précise de comment faire. Dan évidement puisque tu as un superbe module pour faire atterrir du DGIV.

par où commencer ? j'ai tenté de faire une recherche google et les résultat sont obscurs.
qui de vous aurait un lien vers un ptit cours d'automatisme que je révise le B.A BA du sujet.

et si par hasard vous avez un ptit algo en pseudo code ou en n'importe quel language c'est du bonheur. je prends !

merci d'avance



Message modifié ( 30-06-2010 10:44 )

---------------------------------------------

PC en rade, codage en panne.... Nom de Zeus

Online Papyref

  • Legend
  • ******
  • Posts: 5367
  • Country: France fr
  • Karma: 357
  • Je suis dans la Lune ne pas me déranger
Reply #1 - 01 July 2010, 14:17:19
Il ne semble pas que tu déchaines l'enthousiasme !
Je pense que si tu oscilles, c'est que tu utilises les Hovers à puissance constante pour maintenir ton altitude de consigne et tu dois avoir des dépassements quand tu approches de l'altitude désirée. Est ce le cas ?
Sinon il faut moduler ton action de correction en fonction de la grandeur de ton écart d'altitude pour ne pas approcher trop vite du point d'équilibre.

Il est toujours risqué pour la stabilité de faire une régulation en boucle ouverte et le mieux serait de créer une boucle de contre réaction pour "abrutir" le signal de sortie en réinjectant par exemple une partie du signal de sortie en valeur négative dans le comparateur d'entrée.

Dan pourra peut $etre t'éclairer sur le sujet ?

Tu as là un petit cours d'asservissement mais je pense que c'est un peu compliqué !
http://dado59.free.fr/www2/automatique.htm

:sage: Papyref


Offline MartySpaceLines

  • Legend
  • ******
  • Posts: 1096
  • Karma: 0
Reply #2 - 01 July 2010, 14:53:36
Dans le script Lua d'autopilot de la navette, il a l'air d'utiliser une méthode assez bien:

Il met une variable Tol (tolérance, valeur par défaut 1e-4)

lorsque l'écart est en dessous de  Tol * 100, il met les moteurs en * 0.1 pour plus de précision
Ligne d'après, si écart < tol * 10, moteurs * 0.1 (donc en réalité * 0.01 de leur valeur initiale)


@++

MSL  


Offline arnoledingue

  • Hero Member
  • *****
  • Posts: 548
  • Karma: 3
Reply #3 - 02 July 2010, 00:11:50
Si tu me donnes quelques détails, je peux ptet t'aider à établir ta boucle d'asservissement.
Je sors de prepa et donc je me suis bassiné tout ça pendant 2 ans. Pour la stabilité et la precision je pense pouvoir t'aider un peu.
tchou


bon vol

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #4 - 11 October 2010, 16:28:44
Je ressort ce fil parce que j'ai une question au même problème que Tofitouf.

Je tente de créer un pilote automatique de lancement dans lequel je lui fais maintenir une attitude selon l'altitude/periapsis/apoapsis.

J'ai commencé simplo avec :
Ne faites pas attention au ; après les > et <, c'est un bug du fofo.
Code: [Select]
        double power;
VECTOR3 rotLevel;
GetAttitudeRotLevel(rotLevel);
currentPitch = GetPitch();
currentPitch = 180*currentPitch/PI;

if (currentPitch > pitch && rotLevel.x < 1)
SetAttitudeRotLevel (0, 1);

if (currentPitch < pitch && rotLevel.x > -1)
{
SetAttitudeRotLevel (0, -1);
}


if (currentPitch > pitch && rotLevel.x > 1)
{
SetAttitudeRotLevel (0, 0);
}

if (currentPitch < pitch && rotLevel.x < -1)
{
SetAttitudeRotLevel (0, 0);
}

Comme je le pensais, le pilote auto me fait osciller. J'ai cherché un peu et j'ai tombé sur ce fil. Le post de Marty m'a suscité un intérêt, alors j'ai regardé le script d'Atlantis mais je ne vois pas où il gère la puissance des RCS pour contrôler l'attitude.

Any idea pour un code très simple de pilote auto ?



Message modifié ( 11-10-2010 16:29 )

Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #5 - 12 October 2010, 00:56:13
Laisser tomber BOOM ! :badsmile:, j'ai trouvé. Mon pilote auto fonctionne très bien... mais pour le pitch seulement. Je suis en train de faire le bank et le yaw.


Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #6 - 12 October 2010, 08:16:42

Salut !
J'avais commencé plusieurs réponses , mais aucunes n'étaient simples , j'ai donc résolu que le plus simple était de me
taire .
Je vois que c'était bien pensé .
:badsmile:

Félicitation , plus qu'à coder le reste alors !

:top:


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline tofitouf

  • Legend
  • ******
  • Posts: 1380
  • Karma: 0
Reply #7 - 14 October 2010, 22:18:12
coucou, j'ai du code en pagaille pour faire cela, récupéré du MFD attitude dont les sources sont ouvertes.

Si tu le veux je te l'envoie, c'est une partie de mon MFD Lib SDK.
Il sait faire pointer le nez de l'avion dans n'importe quelle direction ou vers n'importe quel objet (vaisseau, dock etc...)
Je me dis en passant que ca serait génial de mettre tout cela en commun et de travailler sur une librairie commune.

Mon SDK est sur sourceforge et je peux vous donner accès en écriture si le besoin se fait sentir


---------------------------------------------

PC en rade, codage en panne.... Nom de Zeus

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #8 - 14 October 2010, 23:23:56
Pas besoin d'attitudeMFD, j'ai trouvé.

Ma technique consiste à calculer la vitesse de rotation à laquelle on doit pitcher, puis, on fait des if pour mettre les RCS dans la bonne direction. J'ai aussi ajouté une variable power qui diminue quand l'attitude est presqu'atteinte. Finalement, je laisse un certain degrés de liberté de 0.1 pitch. Comme ça le pilote auto n'est pas constament en train de donner des coups de RCS.

Pour la lib., je travaille toujours principalement en C. Lorsque je voudrai ce pilote automatique encore une fois, je copie-colle le code que j'ai écrit (technique DanSteph je crois).


Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline tofitouf

  • Legend
  • ******
  • Posts: 1380
  • Karma: 0
Reply #9 - 15 October 2010, 09:31:19
effectivement c'est la bonne méthode générale, impeaccable si tu y est arrivé tout seul :)


« Last Edit: 15 October 2010, 09:31:33 by tofitouf »
---------------------------------------------

PC en rade, codage en panne.... Nom de Zeus

Offline tofitouf

  • Legend
  • ******
  • Posts: 1380
  • Karma: 0
Reply #10 - 15 October 2010, 09:31:33
effectivement c'est la bonne méthode générale, impeccable si tu y est arrivé tout seul :)


« Last Edit: 15 October 2010, 09:31:33 by tofitouf »
---------------------------------------------

PC en rade, codage en panne.... Nom de Zeus