J'ai une carte Arduino avec un capteur de 9 degrés de liberté, à partir duquel je dois déterminer le tangage, le lacet et le roulis de la carte.
Voici un exemple d'un ensemble de données du capteur 9-DOF:
Accéléromètre (m / s)
- = -5,85
- = 1,46
- = 17,98
Gyroscope (RPM)
- = 35,14
- = -40,22
- = -9,86
Magnétomètre (Gauss)
- = 0,18
- = -0,04
- = -0,15
Comment puis-je calculer le tangage, le lacet et le roulis à partir de ces données?
Réponses:
Le tangage, le roulis et le lacet sont définis comme la rotation autour des axes X, Y et Z. Ci-dessous comme image pour illustrer la définition.
Dans un projet précédent, j'ai utilisé un accéléromètre ADXL345 d'Analog Devices pour calculer le roulis et la hauteur. Voici les équations utilisées pour calculer le roulis et le tangage. J'ai mis du code source à la disposition du public.
Le code source complet peut être trouvé ici .
Base sur les définitions ci-dessus
Remarque: M_PI = 3,14159265358979323846 c'est une constante définie dans math.h
Voici quelques références, y compris le code source de base Arduino, qui pourraient vous aider.
Les références:
la source
Donc, ma réponse plus longue ci-dessous suppose que la planche subira une accélération et pendant ce temps, vous devez toujours être en mesure de mesurer votre tangage, roulis et lacet dans un court laps de temps. Si la carte est immobile pour toutes les mesures, la réponse de Mahendra Gunawardena fonctionnera parfaitement pour vous. Si cela va dans un appareil comme un segway ou un avion modèle ou un multirotor ou tout ce qui se déplace, vous voudrez peut-être continuer à lire. Cet article explique comment utiliser les trois capteurs grâce à une méthode appelée fusion de capteurs. La fusion des capteurs vous permet d'obtenir les points forts de chaque capteur et de minimiser les effets des faiblesses de chaque capteur.
Caractéristiques et arrière-plan du capteur
Comprenez d'abord qu'un accéléromètre mesure toutes les forces qui lui sont appliquées, pas seulement la force de gravité. Donc, dans un monde parfait avec l'accéléromètre dans une position stationnaire sans aucune vibration, vous pouvez parfaitement déterminer la direction vers le haut en utilisant une trigonométrie de base comme le montre la réponse de Mahendra Gunawardena. Cependant, comme un accéléromètre captera toutes les forces, toute vibration entraînera du bruit. Il convient également de noter que si la planche accélère, vous ne pouvez pas simplement utiliser la trigonométrie simple car la force rapportée par l'accéléromètre n'est pas seulement la force de gravité terrestre, mais aussi la force qui vous fait accélérer.
Un magnétomètre est plus simple qu'un accéléromètre. Le mouvement ne causera pas de problèmes, mais des choses comme le fer et d'autres aimants finiront par affecter votre sortie. Si les sources provoquant ces interférences sont constantes, il n'est pas difficile de les gérer, mais si ces sources ne sont pas constantes, cela créera des tonnes de bruit qu'il sera difficile d'éliminer.
Des trois capteurs, le gyroscope est sans doute le plus fiable et ils sont normalement très très bons pour mesurer la vitesse de rotation. Il n'est pas affecté par des éléments comme les sources de fer et les accélérations n'ont pratiquement aucun impact sur leur capacité à mesurer la vitesse de rotation. Ils font un très bon travail pour signaler la vitesse à laquelle l'appareil tourne, mais comme vous recherchez un angle absolu, vous devez intégrer la vitesse pour obtenir la position. Cela ajoutera l'erreur de la dernière mesure à l'erreur des nouvelles mesures, car l'intégration est essentiellement une somme de valeurs sur une plage, même si l'erreur pour une mesure n'est que de 0,01 degré par seconde, sur 100 mesures, votre position peut être désactivé de 1 degré, par 1000 mesures, vous pouvez désactiver de 10 degrés. Si vous prenez des centaines de mesures par seconde, vous pouvez voir que cela cause des problèmes. Ceci est communément appelé dérive gyroscopique.
Fusion de capteurs
Maintenant, la beauté de tous ces capteurs fonctionne ensemble, c'est que vous pouvez utiliser les informations de l'accéléromètre et du magnétomètre pour annuler la dérive gyroscopique. Cela vous permet de vous donner la précision et la vitesse du gyroscope sans le défaut fatal de la dérive du gyroscope.
La combinaison des données de ces trois capteurs peut se faire de plus d'une manière, je parlerai de l'utilisation d'un filtre complémentaire car c'est beaucoup plus simple qu'un filtre kalman et des filtres kalman consommeront beaucoup plus de ressources sur les systèmes embarqués. Souvent, un filtre complémentaire est assez bon, plus simple à implémenter (en supposant que vous n'utilisez pas de bibliothèque pré-construite) et vous permet de traiter les données plus rapidement.
Passons maintenant au processus. Les premières étapes que vous devez faire sont d'intégrer la sortie du gyroscope pour convertir la vitesse angulaire en position angulaire. Vous devrez également très probablement appliquer un filtre passe-bas sur l'accéléromètre et le magnétomètre pour faire face au bruit dans la sortie. Un simple filtre FIR comme celui illustré ci-dessous fonctionne ici. Avec une trigonométrie, vous pouvez trouver le tangage et le roulis avec l'accéléromètre et le lacet avec le magnétomètre.
Le poids est juste une constante qui peut être ajustée en fonction de la quantité de bruit à traiter, plus le bruit est élevé, plus la valeur de poids sera petite. Désormais, la combinaison des données des capteurs peut être effectuée par la ligne de code suivante.
Il convient de noter que les données sont un vecteur de tangage, de roulis et de lacet. Vous pouvez simplement utiliser trois variables pour le faire également au lieu de tableaux si vous le souhaitez. Pour ce calcul, le gyroscope fournit une position en degrés en tangage, roulis et lacet, le magnétomètre fournit un angle pour le lacet tandis que l'accéléromètre fournit ses propres nombres pour le tangage et le roulis.
Si vous voulez toujours plus d'informations, vous pouvez google "fusion de capteurs avec filtre complémentaire", il y a beaucoup d'articles à ce sujet.
la source
À partir des données du capteur d'accélérateur, vous ne pouvez calculer que le tangage et le roulis. Le document ci-dessous de Freescale explique avec beaucoup d'informations ce dont vous avez besoin:
AN3461 - Détection d'inclinaison à l'aide d'un accéléromètre à trois axes
Sur la base des paroles du document,
ce qui équivaut à:
Bien sûr, le résultat n'est que lorsque les rotations se produisent sur un ordre spécifique (Rxyz):
la source