Comment utiliser les quaternions pour alimenter une boucle de stabilisation quadricoptère PID?


9

Je fais un quadcopter. J'ai mis en place une boucle PID pour la stabiliser à un angle d'Euler donné (tangage et roulis). Le problème se pose lorsque le roulis approche à 90 degrés (45 degrés et plus). Les valeurs n'ont plus de sens à l'approche du verrouillage du cardan. J'ai l'intention de lui faire faire des manœuvres complexes comme le bouclage, etc., qui dépasse la limite de roulis de 45 degrés.

Comment puis-je utiliser des quaternions pour surmonter ce problème? (Je reçois des quaternions du MPU-9150.) J'ai lu de nombreux articles sur la question des quaternions, mais ils parlent tous de rotations dans un logiciel 3D et d'interpolation entre deux points de rotation. Cela n'a pas de sens car je ne connais pas les nombres et matrices imaginaires.


Avez-vous résolu votre problème? Sinon, veuillez nous faire savoir comment cela se passe, sinon vous voudrez peut-être accepter l'une des réponses.
marcv81

1
@ marcv81 Oui, ça fonctionne plutôt bien maintenant :) Merci de me rappeler d'accepter une réponse :)
Ami de Kim

Je suis content que ça marche. Cela m'a fait penser à mon propre code et a aussi
corrigé

Réponses:


6

Un quadcopter contient (entre autres) deux algorithmes distincts et indépendants: un algorithme d'estimation d'attitude et un algorithme de contrôle.

L'algorithme d'estimation d'attitude calcule des informations sur l'orientation du quadcoptère: les angles de roulis, de tangage et de lacet.

L'algorithme de contrôle est chargé de piloter les moteurs afin que l'orientation du quadcoptère corresponde à ce que le pilote (ou le logiciel du pilote automatique) attend. Cet algorithme est ce qui lirait les angles quadricoptères estimés (à partir de l'algorithme d'estimation d'attitude) et modifierait la vitesse des moteurs pour tenter de correspondre aux angles souhaités. Les PID sont un algorithme de contrôle bien adapté et courant pour les quadcoptères.

Le verrouillage du cardan est un phénomène qui peut se produire dans l'algorithme d'estimation d'attitude. Cela n'a rien à voir avec l'algorithme de contrôle. En tant que tel, vous n'avez pas besoin d'ESC, de moteurs ou d'hélices pour tester le verrouillage du cardan: vous pouvez modifier votre code pour afficher vos angles de roulis, de tangage et de lacet, et tester que les valeurs correctes sont calculées lorsque vous déplacez manuellement votre quadcopter. Vous pourrez peut-être le faire avec le quadricoptère attaché à votre ordinateur, via Bluetooth ou en utilisant d'autres méthodes en fonction de votre plate-forme.

Si les angles sont calculés correctement, vous n'avez pas à vous soucier des quaternions. S'ils ne sont pas calculés correctement, les quaternions peuventT'aider. L'algorithme d'estimation d'attitude doit produire 3 angles pour l'algorithme de contrôle à utiliser, mais il peut utiliser une représentation interne différente telle que des quaternions ou des matrices 3x3. Dans ce cas, il convertirait toujours les informations d'attitude en angles afin de fournir des données utilisables à l'algorithme de contrôle. D'une manière générale, les quaternions ne sont pas intuitifs mais efficaces en termes de calcul. Cela les rend bien adaptés aux plates-formes lentes telles que Arduino. Les matrices ou les angles peuvent être un choix plus facile pour un matériel plus rapide. Si vous avez besoin de moi pour élaborer une solution ou l'autre, veuillez me le faire savoir, mais il serait assez prématuré pour moi de donner des détails à ce stade car je ne suis pas convaincu que vous ayez besoin de mettre en œuvre des quaternions.

Enfin, si les angles sont calculés correctement, la façon de faire votre boucle quadcopter est de contrôler la vitesse angulaire plutôt que l'angle. Si vos bâtons représentent l'angle du quadcoptère, il n'y a aucun moyen de le faire faire une boucle complète: essayez de visualiser la position des bâtons pendant que le quadcoptère boucle et vous devez comprendre pourquoi. Cependant, si les bâtons contrôlent la vitesse angulaire, vous pouvez contrôler la vitesse à laquelle il boucle.

Bonne chance pour votre projet!

Remarque: Par souci de simplicité, je n'ai pas mentionné l'option théorique de manipuler les données sous forme de matrices ou de quaternions à la fois dans l'algorithme d'estimation d'attitude et l'algorithme de contrôle. Je n'ai jamais vu un quadricoptère implémenter de tels algorithmes.


Merci pour votre réponse complète! Une personne travaillant chez InvenSense a déclaré que, dans la plupart des applications, les quaternions étaient plus faciles et meilleurs que les angles d'Euler. En regardant les données attachées, il semble qu'il soit possible de corriger un axe pour arrêter le verrouillage du cardan lorsque cela est sur le point de se produire.
Ami de Kim

1
Les angles d'Euler sont un mauvais choix pour la représentation interne de l'orientation. Ils sont simples à visualiser, mais très difficiles à manipuler correctement pour éviter le verrouillage du cardan. Les quaternions sont meilleurs parce que vous ne rencontreriez pas de verrouillage de cardan, mais ils sont difficiles à visualiser. Les matrices sont en quelque sorte plus faciles à visualiser que les quaternions, mais pas aussi efficaces si votre plate-forme est lente. Mon quadcopter utilise des quaternions en interne, mais se convertit en angles d'Euler pour les PID à utiliser.
marcv81

3

Tout d'abord, je pense que vous devez revenir en arrière et regarder votre code. Le verrouillage du cardan n'est un problème que lorsque vous vous approchez très près (à quelques degrés près) de 90. Si vous voyez un comportement étrange à 45 degrés, quelque chose d'autre en est la cause.

Quant à votre question, les quaternions ne sont généralement pas utilisés directement dans le contrôle PID de base car ils ont un comportement compliqué entraînant des résultats non intuitifs. Habituellement, ils sont soit convertis en angles d'Euler, puis utilisés dans le contrôleur PID normal, soit des contrôleurs non linéaires spéciaux sont conçus pour les utiliser.

Notez que pour vos manœuvres en boucle, le PID n'est généralement pas un très bon contrôleur: les gains qui fonctionnent bien près du vol stationnaire ne fonctionnent plus bien à grands angles. Habituellement, lorsque quelqu'un veut faire une boucle, il passe en "boucle ouverte", c'est-à-dire qu'il démarre la manœuvre sous contrôle, puis une fois qu'il a dépassé un certain angle, il suffit d'appliquer une série fixe de commandes jusqu'à ce qu'il ait terminé la boucle. Déterminer quelle série fixe de commandes utiliser est la partie délicate et utilise souvent l'apprentissage par renforcement (un peu comme une façon formelle de faire des essais et des erreurs).


Merci pour votre perspicacité. Je suis complètement nouveau dans la programmation bare metal. Je n'ai fait que de la programmation de haut niveau. Je m'intéresse aussi beaucoup à la physique et aux mathématiques, même si je viens de terminer le lycée, donc je ne sais pas encore grand chose ...
Ami de Kim

Je fais ça avec un ami, et nous avons "inventé" la boucle PID nous-mêmes. Étant habitués à une réponse «correcte», il nous a été très difficile de l'utiliser sans savoir que c'était un moyen courant de résoudre notre problème. Et lorsque nous avons découvert la boucle PID sur Wikipedia, notre propre boucle PID inventée a été "approuvée".
Ami de Kim

J'apprécie donc vraiment votre compréhension de la façon dont cela se fait couramment dans les projets de travail. Le comportement étrange dont je parle s'est révélé en regardant le graphique dans Serial Chart( code.google.com/p/serialchart ) L'entrée est la sortie Euler directe de l'I2CDevLib (MPU-9150). Je vais tester un peu plus. L '"erreur" pourrait avoir été causée par des mouvements imprécis de ma part.
Ami de Kim

Le rouleau est la ligne bleue. Le rouge est le lacet, le vert est le tangage, le bleu est le roulis. Comme vous pouvez le voir, les problèmes commencent à partir de pi / 4 environ et vers l'extérieur. Est-ce un problème avec I2CDevLib, ou est-ce "supposé" être comme ça? screencast.com/t/svPV3C8B Je tourne le gyroscope à 360 degrés autour de l'axe de roulis.
Ami de Kim

J'ai vu AeroQuad être capable de se stabiliser même après avoir été projeté en l'air. Est-ce parce qu'il s'occupe d'abord du roulis, puis du tangage, puis du lacet?
Ami de Kim

3

Cet article, Full Quaternion Based Attitude Control for a Quadrotor par Emil Fresk et George Nikolakopoulos, montre ce que vous essayez de réaliser.

Résumé - Le but de cet article est de présenter un nouveau schéma de contrôle basé sur le quaternion pour le problème de contrôle d'attitude d'un quadrirotor. Un quaternion est un nombre hyper complexe de rang 4 qui peut être utilisé pour éviter la singularité géométrique inhérente lors de la représentation d'une dynamique de corps rigide avec des angles d'Euler ou la complexité d'avoir couplé des équations différentielles avec la matrice de cosinus directionnelle (DCM). Dans l'approche présentée, le modèle d'attitude du quadrotor et le carré proportionnel non linéaire proposé ( P 2), un algorithme de contrôle a été implémenté dans l'espace quaternion, sans aucune transformation ni calcul dans l'espace angulaire d'Euler ou DCM. Tout au long de l'article, les mérites de la nouvelle approche proposée sont analysés et discutés, tandis que l'efficacité du nouveau contrôleur à base de quaternion suggéré est évaluée par des résultats de simulation étendus.


2
Merci pour le document pertinent @ jgkim2020. Mais pouvez-vous nous en dire plus? Peut-être résumer les conclusions du document? (Les liens peuvent devenir périmés après tout). Vous pouvez également consulter Comment répondre
Ben

1
Je suis d'accord avec Ben - Un résumé du document serait formidable, car la mort de lien survient généralement après un certain temps.
Greenonline

2

Ce cours MOOC gratuit, Bienvenue sur AUTONAVx de TUMx! La navigation autonome pour les robots volants peut être utile. Cela couvre:

  • Théorie de l'apprentissage
  • Exercice de programmation Quadcoptor qui s'exécute à la fois sur le stimulateur et le matériel réel

Le lien ne fonctionne pas.
Ami de Kim

Le lien fonctionne si vous êtes connecté.
Ami de Kim

La vidéo 1.4 présente une démonstration de nombreux quadrirotors, effectuant des actions incroyables. J'espère que vous vous intéressez au sujet.
EEd

Peut vérifier le logiciel FreeIMU, qui fournit a) les données fusionnées de plusieurs capteurs (gyroscope, boussole, accéléromètre), donnant des données plus stables, à plus faible dérive et précises que la simple lecture des données brutes de la puce b) à condition de fournir plusieurs formats de sortie, y compris la hauteur, roulis et lacet, qui peuvent être plus simples à visualiser, à comprendre et à utiliser.
EEd

Merci de votre aide. J'utilise le MPU-9150 qui dispose d'un DMP (fusion de capteurs) intégré à la fois du gyroscope et d'un accéléromètre. La fusion avec le magnétomètre doit être effectuée manuellement.
Ami de Kim
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.