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: Pilote automatique  (Read 5919 times)

0 Members and 1 Guest are viewing this topic.

Offline Capenoules

  • Jr. Member
  • **
  • Posts: 31
  • Karma: 0
30 March 2007, 13:25:50
Bonjour,

Je suis actuellement en train de réaliser un programme de commande de vol pour appareil de type Airbus (Fly By Wire
pour ceux qui connaissent) en C++.

Le Delta Glider III ou encore AutoFCS pour la Navette ont des pilotes automatiques ma foi assez performants. Les
personnes qui connaissent la conception de ces pilotes automatiques pourraient-elles m'indiquer la ligne directrice
sur laquelle ils ont été conçus ?

En ce qui me concerne, je me base sur des modestes correcteurs PID pour commencer, mais j'envisage des méthodes
un peu plus sophistiquées. Avez-vous des conseils à me donner ? En sachant que mon expérience acquise pourra
sûrement servir dans Orbiter un jour ...  :)

Merci d'avance !


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #1 - 30 March 2007, 15:50:16
Pour Orbiter ?
Si oui c'est la merde, on a pas accès au surfaces de controles (ailerons etc etc)
On doit donc tricher...

Concernant les correcteurs PID, connait pas, moi c'est a l'instinct... :)
(ptetre que je fait comme jourdain: du correcteur PID sans le savoir ? :wonder: )

Dan



Message modifié ( 30-03-2007 15:50 )


Offline tompouce

  • Legend
  • ******
  • Posts: 1214
  • Karma: 0
Reply #2 - 30 March 2007, 18:38:43
Quote
DanSteph a écrit:

Concernant les correcteurs PID, connait pas, moi c'est a l'instinct... :)
(ptetre que je fait comme jourdain: du correcteur PID sans le savoir ? :wonder: )

Dan

Prose n'est point ver et ver n'est point prose enfin un truc comme sa je l'ai étudié en 5ème et bien je me suis un oeu ennuyé
mais sa reste :)


___________________________________________________
electro ... orbiter... FAN



Offline astro_seb

  • Legend
  • ******
  • Posts: 1444
  • Country: France fr
  • Karma: 2
Reply #3 - 30 March 2007, 20:11:11
Est-ce que le "correcteur PID" dont tu parles correspond à ce qui se fait en régulation / asservissement (Proportionnel
Intégral Dérivé)? Ou bien ça n'a rien à voir?


Bons vols à tous!
Vive l'astro en Provence

http://www.centre-astro.fr

Offline Capenoules

  • Jr. Member
  • **
  • Posts: 31
  • Karma: 0
Reply #4 - 02 April 2007, 08:24:49
Oui tout à fait, le PID dont je parle est bien du Proportionnel Intégral Dérivé :)


Offline Apofis

  • Sr. Member
  • ****
  • Posts: 349
  • Karma: 0
Reply #5 - 02 April 2007, 11:55:40
tant qu'il y as po d'equation différentiel sa va :P

j'ai jamais rien compris au équa diff :lol:


"Oups c quoi se bruit" Fred Haise, apollo 13 :P

Offline yoann

  • Legend
  • ******
  • Posts: 1914
  • Country: France fr
  • Karma: 9
Reply #6 - 02 April 2007, 12:02:53
Quote
Capenouilles a écrit:
le PID ... est ... Proportionnel Intégral Dérivé


Quote
Apofis a écrit:
d'equation différentiel


escusé moi, mais c'est un truc de oeuf comment que je comprend rein, la je pedale dans la farine, je comprend rien,
ecuser mon ignorance mais ca sert a quoi un "PID" ???


edit:

 PT1 !!!:
Capenouilles , truc de oeuf , je pedale dans la farine

je l'ai pas fait expres !!! (en fait si, ca faisai un moment j'avai envie de sortir ca !!! :lol:



Message modifié ( 02-04-2007 12:06 )

__________________________________
    Luke, je suis ton pere            kchuuu  pchiiiii

Offline Capenoules

  • Jr. Member
  • **
  • Posts: 31
  • Karma: 0
Reply #7 - 02 April 2007, 13:12:01
Alors en fait un correcteur PID est un outil assez basique pour asservir un paramètre sur une consigne. Tu te bases
sur l'écart entre la consigne et la valeur courante du paramètre pour donner un ordre aux commandes d'un système.
Par exemple pour un moteur, le paramètre peut être une vitesse de rotation, la consigne de 3 rad/s et l'ordre une
tension à appliquer au moteur.

Comme on le disait, PID pour Proportionnel, Intégral, Dérivé : l'ordre envoyé à la commande comporte trois termes

- Proportionnel : ce terme est directement proportionnel à l'écart entre consigne et valeur courante du paramètre.
Logique, plus on est loin de la consigne, plus on veut mettre du peps pour la rejoindre.

- Dérivé : terme proportionnel à la variation de l'écart. Encore logique : si on s'écarte de la consigne, il faut là aussi
augmenter l'ordre donné à la commande.

- Intégral : terme proportionnel à l'intégrale de l'écart, c'est à dire l'écart mais cumulé sur le temps. Toujours logique.
Si on reste de façon durable éloigné de la consigne, il faut encore augmenter les ordres donnés à la commande.

Voilà le principe. Ca reste bien sûr basique, ça marche pas mal généralement.

->> Apofis : tu sais, il y a des équations différentielles cachées derrière les PID. Donc si tu manges du PID, fais
attention aux arrêtes :sick:

Sinon pour en revenir à Orbiter plus particulièrement, j'aimerais savoir comment est fait par exemple la
programmation du maintient d'un angle d'attaque (sur le DG III au hasard ...). Je vais regarder dans le code du SDK,
mais si on pouvait me dire directement où ça se trouve ou comment c'est fait ce serait cool.


Offline yoann

  • Legend
  • ******
  • Posts: 1914
  • Country: France fr
  • Karma: 9
Reply #8 - 02 April 2007, 14:00:27
ahhh okkkkeeyyy, merci j'ai tout comprit :p


__________________________________
    Luke, je suis ton pere            kchuuu  pchiiiii

Offline Apofis

  • Sr. Member
  • ****
  • Posts: 349
  • Karma: 0
Reply #9 - 02 April 2007, 21:26:19
Quote
Capenoules a écrit:

-&gt&gt Apofis : tu sais, il y a des équations différentielles cachées derrière les PID. Donc si tu manges du PID, fais
attention aux arrêtes :sick:

powwwwa :sick: po bon les arrêtes(ne po oublier le petit accent a la taz :P) :lol:

pour etre franc je saurai po résoudre une équa diff mais bon je pense que s'est du connu donc il dois y avoir un algo qui
traine par ci ou par la et sa je comprend bien mieux ;)


"Oups c quoi se bruit" Fred Haise, apollo 13 :P

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #10 - 02 April 2007, 22:38:30
Quote
Capenoules a écrit:
Comme on le disait, PID pour Proportionnel, Intégral, Dérivé : l'ordre envoyé à la commande comporte trois termes


C'est bien ca, je fais comme jourdain... je trouve ce terme un peu pédant toutefois considérant que
c'est vraiment générique et n'explique pas grand chose... (la marche aussi c'est du PID donc ;) )

Pour l'autopilote le principe est simple, tu regarde l'angle et tu pousse pour le rejoindre.
Après il faut controller la vitesse angulaire et ralentir (donc contre poussée) avant
d'atteindre le point et bidouiller pour maintenir. Chacun à un peut sa methode mais
programmer les autopilotes sont un des truc les plus intteressant, un peu casse tête
des fois dans la pratique.

Si tu veux un truc ultra simple dans orbiter c'est :

double dPitch = pitch actuel en rad
double dReqPitch = Pitch demandé en rad

VECTOR3 Angle={0};
GetAngularVel(Angle);
Angle.x=min(0.05,max(-0.05,(dReqPitch-dPitch)));
SetAngularVel(Angle);


C'est triché évidemment mais hyper précis et ca fait que 4 lignes ;)
Pour du vessel IA en tout cas ca le fait très bien... Tu peu le "smoother" un peu
avec une dizaine de ligne suplémentaire. (sinon ca démarre sec, pas très réaliste,
par contre ca s'arrete doucement et précisement)

Pour toi c'est différent de l'habituel, tu va pas t'emm avec des thruster en zéro gravité.
Vu que tu n'a pas accès au ailerons (ca a pas changé ca non ?) tu a soit "addforce"
qui "pousse" ou "SetAngularVel" qui agit directement sur l'angle (moins "doux" et réaliste
que addforce mais plus simple a maitriser) sinon des thrusters, c'est un peu des addforce
finalement.

Dans la pratique il te faut des routines de controles séparée de l'IA principale qui ne fera
que leur donner des commandes. les wires commandes sont hyper intteressant à faire
j'espere que tu y mettra des alpha prot aussi... (IA "maitre")

A++

Dan



Message modifié ( 02-04-2007 22:50 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #11 - 03 April 2007, 01:30:21
Autant pour moi,

ca marche:
SetControlSurfaceLevel (AIRCTRL_ELEVATOR,0.3);
SetControlSurfaceLevel (AIRCTRL_AILERON,0.4);

Voir creation avec: CreateControlSurface

Donc on peut controller les ailerons, rudder etc etc...

Mais faut desactiver le controle par joystique sinon overide.

Dan


Offline Capenoules

  • Jr. Member
  • **
  • Posts: 31
  • Karma: 0
Reply #12 - 03 April 2007, 23:25:17
Qu'est-ce qui est pédant ? Le terme PID ? :(

En tout cas, c'est vrai que les correcteurs PID utilisent des notions simples, mais ils ont le méritent de s'appuyer sur
une science rigoureuse : on peut faire des calculs qui permettent d'obtenir des asservissement ayant des
caractéristiques très précises en terme de temps de réponse, d'amortissement, etc. On peut étudier, calculer et
prévoir les réponses temporelles ou fréquentielles des signaux du système. C'est très maniable et ça peut être
performant.

Le seul problème c'est que ça ne s'applique en théorie que sur des systèmes linéaires et qu'il faut commencer à être
astucieux quand ce n'est plus le cas.

Pour les fonctions "AddForce" ou "SetAngularValue" je ne vois pas trop à quoi ça correspond ... Ca touche
directement au vaisseau sans passez par les commandes ? C'est ça que tu entends par "tricher" ?

En tout cas merci pour les infos !

« Last Edit: 04 April 2007, 00:16:15 by Capenoules »

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #13 - 04 April 2007, 00:16:15
Ben j'ai fait des tonnes d'autopilotes à l'instinct, c'est tout des trucs franchement basique
a base de feedback et calcules très simple. Au pire y a un ou deux cosinus la dedans
mais même pas dans le dernier que j'ai fait aujourd'hui.
Je vois pas en quoi le PID peut être appliqué concrètement et aide dans notre cas... Mais bon ...
Quand je vais voir les forums C++ je comprend rien à ce qu'ils racontent, la différence
c'est que j'ai releasé pas mal de trucs et eux le plus souvent rien du tout à part
quelques bout de codes ici et la, chui un peu hermétique à la langue "theorique" ... ;)

Addforce cest comme un doigt qui appuie sur ton vessel, choisi le vecteur, le point de poussée, la puissance
et hop, ca pousse, ca sert au parachutes et divers chose mais ca peut aussi faire tourner.
(un doigt dans un sens a l'avant un autre dans le.. a l'arrière dans l'autre sens c'est appliqué
a la next frame seulement)

SetAngular tu controle directement la vitesse angulaire (rotation)

VECTOR3 Angle={0};
GetAngularVel(Angle);
Angle.x+=0.05;
SetAngularVel(Angle);

Et hop il tourne lentement cul par dessus tête... (plus vite avec + FSP tu doit tenir compte de delta time de la loop)

C'est de la triche, tu n'obeis plus aux lois de la physique (masse inertie) tu doigt donc bidouiller.
Avantage c'est très précis. Pour du IA ca le fait bien.

Mais le mieux dans ton cas c'est "SetControlSurfaceLevel " tu pilote directement en utilisant les elevons
comme les vrais, très sympa à faire.

Dan



Message modifié ( 04-04-2007 00:21 )

« Last Edit: 04 April 2007, 00:16:15 by DanSteph »