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.
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:
Fiche technique LSM303DLHC: http://www.st.com/web/en/resource/technical/document/datasheet/DM00027543.pdf
Intégrateur Leaky: http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it
Boucle PID ArduPilot: http://copter.ardupilot.com/wp-content/uploads/sites/2/2012/12/Alt-Hold-PID-version-3.0.1.jpg
la source
Réponses:
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
où positif est en hausse. Ajoutons un composant de vol stationnaire à notre accélérateur qui traite de la gravité. Doncz
Notre nouvelle dynamique ressemble à
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).
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.kp kd
À 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.
la source