web-dev-qa-db-fra.com

Combinez les données du gyroscope et de l'accéléromètre

Je construis un robot d'équilibrage en utilisant le système NXT de Lego Mindstorm. J'utilise deux capteurs de HiTechnic, le premier étant un accéléromètre et le second un gyroscope. J'ai réussi à filtrer le bruit des deux capteurs et les angles dérivés pour les deux dans une plage comprise entre -90 et 90 degrés, 0 degrés étant parfaitement équilibré.

Mon prochain défi est de combiner les deux valeurs du capteur pour corriger la dérive du gyroscope au fil du temps. Voici un exemple de graphique que j'ai créé à partir de données réelles pour démontrer la dérive du gyroscope:

enter image description here

L'approche la plus couramment utilisée que j'ai vue pour rendre la combinaison de ces capteurs solide comme le roc est d'utiliser un filtre de Kalman. Cependant, je ne suis pas un expert en calcul et je ne comprends vraiment pas les symboles mathématiques, mais je comprends les mathématiques dans le code source.

J'utilise RobotC (qui est comme n'importe quel autre dérivé de C) et j'apprécierais vraiment si quelqu'un peut me donner des exemples de la façon d'accomplir cela en C.

Merci de votre aide!

RÉSULTATS DE LA SOLUTION:

D'accord, kersny a résolu mon problème en me présentant des filtres complémentaires. Voici un graphique illustrant mes résultats:

Résultat # 1

enter image description here

Résultat n ° 2

enter image description here

Comme vous pouvez le voir, le filtre corrige la dérive gyroscopique et combine les deux signaux en un seul signal lisse.

Edit: Puisque je réparais de toute façon les images cassées, j'ai pensé que ce serait amusant de montrer la plate-forme que j'ai utilisée pour générer ces données:

enter image description here

68
Dylan Vester

Les filtres Kalman sont excellents et tout, mais je trouve le filtre complémentaire beaucoup plus facile à mettre en œuvre avec des résultats similaires. Les meilleurs articles que j'ai trouvés pour coder un filtre complémentaire sont ce wiki (avec cet article sur la conversion des capteurs en unités d'ingénierie) et un PDF dans le fichier Zip sur cette page (Sous Documentation technique, je crois que le nom du fichier dans Zip est filter.pdf);

PS. Si vous êtes bloqué sur un filtre de Kalman, ici est un code de syntaxe C pour l'Arduino qui l'implémente.

43
kersny

Gamasutra.com a couru n article sur l'utilisation des filtres Kalman pour le filtrage WiiMote .

Il y a quelques liens vers le code source C++ à la fin de l'article.

5
Vatine