Suivi de la Position dans l'espace 3d à l'aide de 10 degrés de liberté de l'IMU
J'ai besoin de suivre la position et l'orientation d'une arme à feu dans l'espace 3d. J'ai acheté un 10-dof IMU capteur (GY-87) pour apprendre correctement la façon de mettre en œuvre la solution de mon problème. Je suis incapable de trouver le bon guide, en raison du manque de mes connaissances dans le domaine de l'électronique et des Capteurs.
J'ai trouvé quelques bons exemples, mais incapable de le mettre en œuvre dans les cartes arduino.
La démarche de Suivi-Avec-x-IMU
Je suis actuellement en mesure de détecter de Lacet, Tangage et Roulis de la Sonde, à partir de laquelle je peux détecter la bonne orientation de mon fusil. Mais je ne peux pas trouver un moyen de calculer la position(x,y,z).
Je serais reconnaissant à vous si someonce peut m'aider à ce sujet.
Merci
P. S: je ne peux pas trouver beaucoup de ressources pour GY-87, il est peut être obsolète. Mais en raison de l'indisponibilité de ressources dans mon pays, j'ai eu à utiliser ce capteur. Je suis un étudiant en science informatique et de nouveau vers l'électronique, de sorte s'il vous plaît corrigez-moi si je ne suis pas à l'aide de tout bon terme.
OriginalL'auteur svhr | 2014-10-16
Vous devez vous connecter pour publier un commentaire.
Un accéléromètre ne sera jamais vous donner une position, il vous donnera... l'accélération.
Mais l'accélération est liée à la vitesse qui est liée à la position.
Si vous regardez les unités, vous voyez cette relation. L'accélération est exprimée en mètre par seconde au carré (m/s2) alors que la vitesse est en mètre par seconde (m/s) et la position en mètres (m).
Si
t est le temps écoulé depuis la dernière calculé la position (dans une boucle par exemple),
une accélération de vous lire à partir du capteur
s le vieux de la vitesse, de s’ la nouvelle vitesse,
p l'ancienne position et p’ la nouvelle position,
s’ = s + a * t
p’ = p + s * t
Vous devez faire le même calcul dans les 3 axes (x, y, z).
En supposant que vous connaissez la position de départ et la vitesse de démarrage est à zéro, vous pouvez suivre votre objet en temps réel.
OriginalL'auteur Franck Jeannin
L'intégration, c'est comme le calcul de l'aire sous une courbe. Considérons une seule direction X. Si vous imaginez un graphique de l'accélération au cours du temps, vous avez le temps comme axe des abscisses (horizontal) et l'accélération en ordonnée (axe vertical).
Si vous avez deux valeurs scalaires a1 et a2 représente l'accélération au temps t1 et t2 et d'imaginer une transition linéaire entre les deux dans le milieu (au moment
(t1+t2)/2
accélération est(a1+a2)/2
...) la forme permet de dessiner cette courbe est un angle droit trapèze de bases de a1 et a2 et d'un côté (rectangulaire avec des angles), de la durée t2-t1 (qui est aussi la hauteur).La région est
(base1+base2)*height/2
=(a1+a2)*(t2-t1)/2
ou(a1+a2)/2 * delta_t
où delta_t est, (t2-t1), l'intervalle de temps entre les capteurs
et (a1+a2)/2 est la moyenne de la dernière lecture, deux valeurs.
Faire ce que vous pourriez obtenir la vitesse approximative de différence à partir de à partir d'une vitesse initiale s0 (que vous pouvez supposer que zéro si vous commencez toujours)
s(n) = (a(n-1)+a(n))/2 * delta_t + s0
L'intégration de nouveau de la même manière, vous pouvez obtenir un "espace" x ou à distance à partir d'un point de départ x0
x(n) = (s(n-1)+s(n))/2 * delta_t + s0x + x0
Si vous commencez toujours à partir du point 0, vous pouvez supposer que s0=0 et x0=0
s(n) = (a(n-1)+a(n))/2 * delta_t
x(n) = (s(n-1)+s(n))/2 * delta_t
Ou par programme, enregistrant uniquement les dernières valeurs:
Veuillez prendre en compte que ce qui suppose un fixe encore (vitesse=0) connu (x=0) position de départ, la capacité d'aller sur le suivi de l'une des composantes de l'accélération (peu importe la façon dont le capteur est mis en rotation dans l'espace), et il sera inévitablement plus et plus d'erreur après un certain temps, comme un minimum les erreurs s'additionnent, donc, il est idéal pour les postes qui peuvent être testés après un certain temps avec d'autres méthodes.
P. S. si vous effectuez des opérations sur un microcontrôleur (Arduino) dans C attention à la façon dont vous vous exprimez, des formules: si old_a et a sont des nombres entiers, /2 va tronquer le résultat de la division de la jeter décimales (mauvaise idée), alors que /2.0 va générer un flotteur. (old_a+un)/2*delta_t n'est pire que d' (old_a+a)*delta_t/2. Le dernier a moins d'erreur de, mais attention qu'il ne déborde pas. Juste pour dire que chaque erreur se résumer, donc attention à la façon dont vous le calculer.
OriginalL'auteur FrancescoMM