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