Réglage PID Quadcopter

13

Dans la continuité de la question que j'ai posée ici: instabilité des quadcoptères avec décollage simple en mode autonome ... Je voudrais poser quelques questions sur l'implémentation d'un PID de base pour un quadrirotor contrôlé par un module APM 2.6. (J'utilise un cadre de 3DRobotics)

J'ai réduit l'ensemble du système de contrôle à seulement deux blocs PID, un pour contrôler le roulis et un autre pour contrôler le tangage (lacet et tout le reste ... j'y penserais plus tard).

Je teste cette configuration sur une plate-forme qui consiste en un faisceau tournant librement, dans lequel j'ai attaché deux des bras du quadrirotor. Les deux autres sont libres de se déplacer. Donc, je teste en fait un degré de liberté (roulis ou tangage) à la fois.

Vérifiez l'image ci-dessous: ici A, B marque le faisceau tournant librement sur lequel l'installation est montée. entrez la description de l'image ici

Avec un réglage minutieux des paramètres P et D, j'ai réussi à atteindre un vol soutenu d'environ 30 secondes.

Mais par «soutenu», je veux simplement dire un test où le drone ne bascule pas d'un côté. Le vol stable n'est encore nulle part en vue, et plus de 30 secondes de vol semblent également assez difficiles. Il vacille depuis le début. Au moment où il atteint 20 à 25 secondes, il commence à s'incliner d'un côté. En 30 secondes, il s'est incliné d'un côté d'une marge inacceptable. Bientôt, je le trouve à l'envers

Quant au code PID lui-même, je calcule l'erreur proportionnelle à partir d'un «filtre complémentaire» de données gyro + accéléromètre. Le terme intégral est mis à zéro. Le terme P s'élève à environ 0,39 et le terme D à 0,0012. (Je n'utilise pas la bibliothèque PID Arduino à dessein, je veux juste implémenter un de mes propres PID ici.)

Regardez cette vidéo, si vous voulez voir comment cela fonctionne.

http://www.youtube.com/watch?v=LpsNBL8ydBA&feature=youtu.be [Ouais, la configuration est assez ancienne! Je suis d'accord. :)]

Veuillez me faire savoir ce que je pourrais éventuellement faire pour améliorer la stabilité à ce stade.

@Ian: Parmi les nombreux tests que j'ai faits avec ma configuration, j'ai tracé des graphiques pour certains des tests en utilisant la lecture du moniteur série. Voici un exemple de lecture de Roll vs 'Motor1 & Motor2 - PWM input' (les deux moteurs contrôlant le rouleau):

Entrée Roll vs Motor PWM

Quant à l'entrée / sortie:

Entrée: valeurs de roulis et de tangage (en degrés), obtenues par une combinaison d'accéléromètre + gyroscope

Sortie: valeurs PWM pour les moteurs, fournies à l'aide de la fonction motor.write () de la bibliothèque de servomoteurs


Résolution

J'ai résolu le problème. Voici comment:

  1. Le nœud du problème résidait dans la façon dont j'ai implémenté le programme Arduino. J'utilisais la fonction write () pour mettre à jour les angles d'asservissement, qui n'acceptent que des étapes entières dans l'argument (ou ne répondent que d'une manière ou d'une autre à une entrée entière, 100 et 100.2 produisent le même résultat). Je l'ai changé en writeMicroseconds () et cela a rendu l'hélicoptère considérablement plus stable.

  2. J'additionnais des RPM sur un moteur tout en maintenant l'autre à une valeur constante. J'ai changé cela pour augmenter le régime d'un moteur tout en diminuant le moteur opposé. Cela garde un peu la poussée horizontale totale inchangée, ce qui pourrait m'aider lorsque j'essaie de maintenir l'altitude verticale sur cette chose.

  3. Je poussais le régime à la limite maximale, c'est pourquoi le quadcopter perdait toujours le contrôle à plein régime. Il n'y avait pas de place pour que le régime augmente quand il détectait une inclinaison.

  4. J'ai observé que l'un des moteurs était intrinsèquement plus faible que l'autre, je ne sais pas pourquoi. J'ai codé en dur un décalage dans l'entrée PWM de ce moteur.

Merci pour tout le support.


Code source:

Si vous êtes intéressé, voici le code source de mon implémentation PID bare-bones: PID Source Code

N'hésitez pas à le tester dans votre matériel. Toute contribution au projet serait la bienvenue.

metsburg
la source
1
Quelle est l'entrée et quelle est la sortie de la boucle?
Guy Sirton
@GuySirton: Mise à jour de ma question
metsburg
Quelles sont ces sections plates dans vos commandes de moteur? On dirait que quelque chose sature. Vous effectuez des changements comme une fonction continue, mais vos commandes semblent très abruptes. Aussi pourquoi les deux commandes PWM du moteur dérivent-elles alors que votre entrée de rouleau reste dans ce qui ressemble à la même plage? Quelle est l'échelle de temps approximative au fait?
Guy Sirton du
1
La raison pour laquelle vous perdez le contrôle après 30 secondes est probablement liée à la dérive de vos deux commandes. Je pense que vous essayez de contrôler la différence entre les commandes, mais vous ne pouvez pas permettre à celles-ci de continuer à dériver.
Guy Sirton du
@GuySirton: Ils ne dérivent pas, je l'incrémente vers le haut à partir de zéro, de sorte qu'il atteigne un état d'équilibre particulier en 3/4 secondes. Cependant, je pense que vous avez raison lorsque vous dites que "la raison pour laquelle vous perdez le contrôle après 30 secondes est probablement liée à la dérive de vos deux commandes". Si je n'utilise pas cet incrément progressif, si je fixe mon entrée PWM à un certain niveau (inférieur à l'entrée maximale indiquée ci-dessus), le problème de la perte de contrôle après 30 secondes disparaît.
metsburg

Réponses:

6
  1. Il semble que votre gain proportionnel soit trop élevé.
  2. Vous semblez augmenter constamment le régime sur un moteur tout en verrouillant l'autre pour faire tourner le système. Ce n'est pas une bonne stratégie de contrôle, car ceux-ci finiront par saturer et vous perdrez le contrôle. De plus, à mesure que le temps augmente, votre capacité à commander le système diminue. Vous avez donc besoin d'un meilleur modèle du système.
  3. Si vous traitez avec # 1 et # 2, vous aurez un système plus stable mais vous ne serez peut-être pas satisfait de la bande passante de contrôle. Pour y faire face, vous devez rendre votre système plus rigide, ce qui comprend l'élimination de tout décalage du côté capteur et du côté contrôle.
Guy Sirton
la source
3

Je commencerais par lire cette question: quelles sont les bonnes stratégies pour régler les boucles PID?

Si je devais deviner, je dirais que vous avez un problème dans la construction de votre filtre complémentaire. Avec les moteurs quadricoptères éteints, vous devez incliner le cadre d'avant en arrière et voir si les valeurs de roulis / tangage qui sont rapportées sont réellement précises.

Pour moi, il semble qu'il y ait un délai entre l'entrée de l'accéléromètre et la sortie de votre filtre - l'oscillation pourrait s'expliquer par des réactions tardives aux données d'entrée. Le retournement éventuel ressemble à une erreur d'intégration possible qui s'accumule au fil du temps - en d'autres termes, alors que votre quadcopter est de son côté, il pense en fait qu'il plane en l'air.

(Mise à jour) En ce qui concerne votre graphique, le fait que les vitesses de votre moteur continuent d'augmenter (au lieu de rester équilibrées) signifie que vous avez une erreur quelque part. Peut-être que votre terme intégral se développe sans limite, et vous devez spécifier un maximum raisonnable pour cela.

Ian
la source
J'ai mis à jour ma question avec les valeurs de roulis, en inclinant d'avant en arrière. J'ai résolu le retournement éventuel en baissant mon entrée PWM max. Il semble que les valeurs de correction ne fonctionnent pas à très haut régime. Je peux facilement tourner la plate-forme avec ma main lorsque je travaille à haut régime. À un régime plus bas, je ressens une résistance considérable et le quadcopter semble revenir à sa position d'origine (ce qui est bien, je suppose). Ainsi, le problème de `` retournement '' est probablement résolu en abaissant le régime (je ne sais pas si le drone décollera du tout ou non, j'espère que oui) Le problème d'oscillation demeure.
metsburg
35±90
Eh bien, le graphique n'est pas exactement pour le test montré dans la vidéo. Comme mentionné ci-dessus, le graphique provient de l'un des nombreux tests que j'ai effectués avec cette configuration et je ne me souviens pas exactement à quoi ressemblait ce cas particulier. Le graphique est juste pour vous donner une idée du comportement de la réponse entrée / sortie, et je voulais également établir qu'il n'y a pas beaucoup de décalage entre l'entrée et la sortie (étant donné que la boucle fonctionne à 150+ Hz). Faire correspondre la vidéo avec le graphique peut ne pas avoir beaucoup de sens. Je n'ai pas l'ensemble de données exact pour le test dans la vidéo.
metsburg
J'ai réalisé que le graphique est un peu trompeur, désolé pour cela. Je vais essayer de mettre à jour le graphique avec un graphique plus précis. En fait, depuis que je traçais les données du port série, quand j'ai créé ce graphique, la carte Arduino était attachée à l'ordinateur portable. Après un certain temps d'oscillation, j'ai dû intervenir et ralentir l'oscillation manuellement. C'est pourquoi vous le voyez s'installer à - 5 degrés, alors qu'en réalité, c'est environ 90 degrés. J'essaierai de mettre à jour un graphique plus précis plus tard.
metsburg
Une autre chose que je vois dans le graphique est que votre poussée combinée augmente toujours . Cela semble faux.
Ian
1

Eh bien, il pourrait y avoir un certain nombre de choses qui se passent ici ...

1) Les angles signalés sont-ils corrects? bruyant? Vous pouvez facilement vérifier cela en inclinant manuellement votre quad et en surveillant les valeurs qui sortent.

2) votre propre implémentation PID a un bug. Vous pouvez utiliser l'implémentation fiable pour vérifier votre code.

3) Accessoires, moteurs montés à l'envers.

4) ...

dm76
la source
1) J'ai incliné et vérifié les angles signalés, presque correct, mais définitivement bruyant. 2) très probable ... en fait, je pense que cela résume tout à fait: P 3) peu probable, deux dans le sens des aiguilles d'une montre, deux dans le sens inverse des aiguilles d'une montre ... J'ai vérifié les accessoires plusieurs fois + je suppose que ce type d'erreur serait ont entraîné des erreurs sauvages, bien au-delà de tout contrôle. 4) ....
metsburg
4) ... un mauvais réglage PID peut aggraver les choses que si vous n'aviez pas du tout de PID!
dm76
Ouais, je vois ça maintenant. Je vais y travailler demain. Mon premier plan est d'utiliser la bibliothèque PID de confiance et le second est de changer la sortie du PID des signaux PWM en correction roll.pitch.
metsburg