Comment utiliser l'accéléromètre pour l'estimation de l'altitude?


9

J'implémente actuellement un quadcopter autonome que j'ai récemment piloté et qui était stable, mais qui ne parvient pas à se corriger en présence de perturbations externes importantes. Je suppose que cela est dû à des gains de PID insuffisamment réglés qui doivent être encore modifiés en vol.

Progrès en cours:

  • J'ai exclu un baromètre car le champ de mes recherches est uniquement en vol intérieur et le baromètre a une déviation de + -5 mètres selon mon collègue.
  • J'utilise actuellement un capteur à ultrasons (HC-SR04) pour l'estimation de l'altitude qui a une résolution de 0,3 cm. Cependant, j'ai trouvé que le taux de rafraîchissement du capteur à ultrasons de 20 Hz est trop lent pour obtenir une réponse suffisamment rapide pour la correction de l'altitude.
  • J'ai essayé d'utiliser les accélérations sur l'axe Z de l'accéléromètre pour obtenir des données de hauteur en intégrant l'accélération pour obtenir la vitesse à utiliser pour le taux PID dans un schéma de contrôleur PID en cascade. La mise en œuvre actuelle du contrôleur PID d'altitude est un contrôleur PID à boucle unique utilisant un contrôleur P avec l'entrée de position du capteur à ultrasons.
  • J'avais pris en compte les mesures d'accélération négatives dues à la gravité mais peu importe combien je calcule le décalage, il existe toujours une accélération négative (par exemple -0,0034). J'ai calculé le décalage gravitationnel en réglant le quadcoptère pour qu'il soit toujours sur une surface plane, puis en collectant 20 000 échantillons de l'axe z de l'accéléromètre à faire la moyenne pour obtenir le «décalage» qui est stocké comme variable constante. Cette variable est ensuite soustraite de la sortie de l'axe z de l'accéléromètre pour supprimer le décalage et le mettre à "zéro" s'il n'accélère pas. Comme indiqué dans la question, il existe toujours une accélération négative (par exemple -0,0034). Mon quad se met alors à monter constamment en altitude. Avec seulement le contrôleur de capteur à ultrasons P, mon quad oscille de 50 cm.

Comment gérer efficacement cette lecture d'accélération négative constante?

Solution possible : Je prévois de faire un contrôleur PID en cascade pour la prise d'altitude avec la boucle intérieure (contrôleur PID) en utilisant l'accéléromètre et la boucle extérieure (contrôleur P) en utilisant le capteur sonar. Mon conseiller a dit que même un seul contrôleur P en boucle suffit pour que le quadcopter conserve son altitude même avec un capteur lent. Est-ce assez? J'ai remarqué qu'avec seulement le gain P, le quadcopter dépasserait son altitude.

entrez la description de l'image ici

  • Leaky Integrator: J'ai trouvé cet article expliquant comment il a géré les accélérations négatives en utilisant un intégrateur qui fuit, mais j'ai un peu de mal à comprendre pourquoi cela fonctionnerait car je pense que l'erreur négative se transformerait en une erreur positive ne résoudrait pas le problème. Je ne suis pas tout à fait sûr. http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it

  • Contrôleur PD à boucle unique avec capteur à ultrasons uniquement: est-ce possible en utilisant la rétroaction d'un capteur lent?

Sources:


Comment calculez-vous le décalage gravitationnel? De quel accéléromètre s'agit-il? Pouvez-vous lier une fiche technique?
Chuck

1
l'oscillation signifie que vous avez besoin d'amortissement !!!
holmeski

1
N'oubliez pas que lors d'un échange de pile, il est préférable de modifier votre question pour ajouter les informations demandées dans les commentaires, plutôt que d'ajouter d'autres commentaires. Les commentaires aident à améliorer les questions et les réponses et sont distrayants, nous essayons donc de les garder au minimum. Si toutes les informations nécessaires pour répondre à la question y figurent, les commentaires peuvent être rangés (supprimés).
Mark Booth

@Chuck J'ai édité le message avec les informations pertinentes :)
user123456098

Je travaille sur le même projet, actuellement, j'implémente un contrôleur PID Cascade pour stabiliser l'attitude du quadcopter en utilisant Arduino, je veux travailler sur l'altitude en ce moment. Est-ce que vous l'implémentez sans estimation de vitesse?, Et j'ai une question, dois-je estimer la transformation du cadre Terre-Corps ou puis-je l'implémenter sans la transformation
SALAM ALBARADIE

Réponses:


10

Le baromètre porté sur le pixhawk a une résolution d'altitude de 10 cm. Si cela ne suffit pas, vous pouvez écrire un filtre kalman qui utilise les données de l'accéléromètre dans l'étape de prédiction et le capteur à ultrasons et / ou le baromètre dans l'étape de correction.

Mais je ne vois pas cela résoudre votre problème. Une mesure précise de l'altitude à 20 Hz devrait être suffisante si tout ce que vous essayez de faire est de maintenir l'altitude.

Quelle est la constante de temps / fréquence naturelle et l'amortissement sur votre contrôleur?

Je suppose que je n'avais pas fini de lire votre question ce matin (c'était avant mon café). L'accélération de l'imu est la mesure de l'accélération plus la gravité. Pour obtenir l'accélération inertielle de l'imu, soustrayez le vecteur de gravité de la mesure. Vous ne pourrez jamais contrôler les mesures d'accélération intégrées. Les mesures sont corrompues par le bruit et vous n'avez aucun moyen de corriger cela.

--- réponse à la partie contrôle de la question

Supposons que tout ce que vous essayez de faire est de maintenir une altitude et que vous ne soyez pas préoccupé par le maintien d'une position pour l'instant (bien que cette approche fonctionne également pour cela). Et en supposant que vous pouvez commander la poussée que vous voulez (dans des limites raisonnables), cela devient un problème facile.

Un premier passage à la dynamique du système ressemble

z¨=umg

où positif est en hausse. Ajoutons un composant de vol stationnaire à notre accélérateur qui traite de la gravité. Doncz

u=ufb+uhover

Notre nouvelle dynamique ressemble à

z¨=ufb+uhovermg=ufbm

Cool! Maintenant, nous concevons une loi de contrôle afin que nous puissions virer à une altitude souhaitée.

Notre système de contrôle va être un ressort virtuel et un amortisseur entre notre quad et l'altitude souhaitée (il s'agit d'un contrôleur pd).

z¨=kp(zdesz)+kd(z˙desz˙)

Le système devrait maintenant se comporter comme un système de second ordre. et peuvent être choisis pour obtenir le rapport d'amortissement et la fréquence naturelle que vous recherchez.kpkd

À ce stade, je voudrais réitérer que l'intégration des données de l'accéléromètre n'est pas un bon moyen de générer des estimations d'état. Si vous voulez vraiment pirater quelque chose ensemble rapidement, alimentez les mesures du sonar à travers un filtre passe-bas avec une fréquence de coupure appropriée. Votre véhicule n'oscillera pas à 20 Hz, donc contrôler uniquement les données du sonar sera bien.


1
Merci, je viens de terminer l'implémentation de cela il y a 4 jours et cela a fonctionné avec de très petites oscillations + -2cm
user123456098

content de l'entendre! vous devriez pouvoir tuer les oscillations en augmentant kd en supposant que vous avez une bonne estimation de la vitesse :)
holmeski
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.