Question:
Recherche de la vitesse et de la position à petite distance des capteurs IMU
TheLazy
2020-07-13 12:22:12 UTC
view on stackexchange narkive permalink

Je travaille sur la recherche de la vitesse et du déplacement à partir d'un capteur IMU (MPU9250). J'ai une configuration Navio2 RPi4, qui me donne des données brutes (accélération, gyroscope, magnétique).

Selon mes recherches, cela peut être fait avec la méthode suivante;

  1. Trouver l'attitude à partir des données brutes. (En utilisant la méthode quaternion ou la matrice de transformation)

  2. Une fois les données d'attitude disponibles, calculez la force de gravité agissant sur les données d'accélération et éliminez la gravité de l'accélération pour trouver l'accélération linéaire

  3. Intégrez l'accélération linéaire calculée pour trouver la vitesse et la position.

En suivant les étapes ci-dessus, j'ai pu calculer le Attitude du capteur IMU en suivant l ' exemple fourni par Navio2. L'exemple utilise la méthode Quaternion (filtre Mahony) pour fusionner les données brutes et donner les quaternions.

La sortie est vérifiée et fonctionne parfaitement. Maintenant, je dois passer à l'étape 2, c'est-à-dire trouver la gravité agissant sur l'accélération.

Utiliser les quaternions pour trouver la gravité:

  gx = (2 * (q1 * q3 - q0 * q2)); gy = (2 * (q0 * q1 + q2 * q3)); gz = ((q0 * q0) - (q1 * q1) - (q2 * q2) + (q3 * q3) );  

Ces valeurs de gravité sont soustraites des données d'accélération pour trouver l'accélération linéaire. Une fois l'accélération linéaire disponible, son intégration avec le temps donne la vitesse et la position. La mise en œuvre est expérimentée en déplaçant le capteur IMU à 100 cm. Cependant, la sortie de position n'est pas celle attendue. Les unités des données brutes ont été prises juste pour avoir un contrôle de cohérence avec l'implémentation.

J'ai déménagé pour reconvertir les quaternions en matrice de rotation et calculer les données de vitesse et de position.

Ma question est de savoir comment trouver la gravité agissant sur l'accélération à l'aide de la matrice de rotation convertie à partir de Quaternion.

Je demande à la communauté de m'aider avec ses précieuses contributions et références .

Merci.

Essayez peut-être de poser cette question dans Electronics.SE si vous ne recevez aucune réponse ici. Vous aurez besoin de la partie gyroscope de ce capteur en plus des données d'accélération. Vous devez ensuite calculer votre rotation actuelle par rapport au vecteur de gravitation terrestre, puis vous devez l'éloigner de votre accélération mesurée. Puisqu'il n'y a aucun moyen de mesurer directement la vitesse, la position ou la rotation actuelle, vous pouvez seulement supposer que lorsque l'accélération totale est de 9,81 +/- 2%, elle est probablement immobile et tournée vers le bas, vous pouvez donc l'étalonner de cette façon.
Un répondre:
Kenn Sebesta
2020-08-01 01:16:11 UTC
view on stackexchange narkive permalink

Voici la meilleure référence sur les rotations: Représenter Attitude: Angles d'Euler, Quaternions d'unité et Rotation par James Diebel de l'Université de Stanford (daté du 20/10/2006).

Vous n'avez pas spécifié, mais vous utilisez presque certainement la convention Tait-Bryan - qui est d'abord lacet, puis tangage, puis roulis - pour les axes de rotation. Vous utilisez peut-être aussi NED pour les axes de traduction, mais c'est moins clair.

Vous pouvez voir tous les mappages dans Sec. 5.6.1 dans le lien ci-dessus. Vous pouvez vérifier que vous avez correctement mappé vos quaternions à la matrice de rotation. Il est très facile de gâcher une valeur de signe. Faites particulièrement attention au fait que l'inverse d'une matrice de rotation est sa transposition, il est donc très facile d'avoir les bonnes valeurs de matrice de rotation mais dans l'ordre transposé.

Pour arriver à votre question spécifique, en utilisant eqn . 35, vous pouvez voir comment mapper une accélération du cadre inertiel dans le cadre du corps, à l'aide de la matrice de rotation. C'est une simple multiplication matricielle, et dans votre cas, et en supposant NED, le vecteur z est [0;0;9.805 ].

Enfin, Je suggérerais de faire fonctionner cela d'abord en simulation, avant d'essayer empirique. Les rotations sont délicates car elles sont si pédantes et il est facile de les aborder à l'envers.

Voici la [version pdf de l'article que vous avez cité] (https://www.astro.rug.nl/software/kapteyn/_downloads/fa29752e4cd69adcfa2fc03b1c020f4e/attitude.pdf) de l'Université de Groningen.
Ça a l'air bien, même si je préfère le lien CiteSeer (qui a également le PDF) car je pense, sans preuves empiriques, qu'il est plus susceptible d'être opérationnel dans 10 ou 20 ans.
C'est suffisant. J'ai suggéré une modification pour que le lien affiche le titre de l'article - juste au cas où CiteSeer tomberait également en panne!
C'est un excellent ajout, merci!


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...