Question

  

Double possible:
   Combiner les données relatives au gyroscope et à l'accéléromètre

J'ai lu un certain nombre d'articles sur les filtres de Kalman , mais il semble y avoir peu de bons exemples concrets accessibles au public qui permettent de passer d'un document mathématique à un code de travail réel.

J'ai un système contenant un accéléromètre à trois axes et un seul gyromètre mesurant la rotation autour d'un des axes de l'accéléromètre. Le système est conçu pour être tenu par un être humain, et le gyroscope mesurera la rotation autour du vecteur de gravité ou à proximité de celui-ci. (Les personnes travaillant dans le même secteur reconnaîtront probablement ce dont je parle;)) Je réalise que cela est sous-contrainte.

Les gyroscopes semblent présenter un biais presque constant légèrement différent pour chaque instance du système. Comment puis-je coder un filtre pour utiliser les lectures de l'accéléromètre pour calibrer le gyroscope lorsque le système est incliné afin que l'axe du gyroscope ne soit pas colinéaire avec la gravité et qu'il soit en rotation autour de l'axe du gyroscope? Il semble qu'il devrait y avoir suffisamment d'informations pour le faire, mais se faire dire qu'il n'y en a pas et pourquoi serait aussi une réponse:)

Était-ce utile?

La solution

nBot, un robot d'équilibrage à deux roues
Beaucoup d'informations et de liens sur la façon dont cet auteur a choisi de résoudre le problème de l'équilibre de son robot à deux roues.

Autres conseils

Vous semblez avoir deux (ou trois) problèmes distincts ici.

1. Vous ne comprenez pas vraiment les filtres de Kalman et / ou les mathématiques qui les sous-tendent. Cela rendra très difficile la mise en œuvre et l’utilisation correctes d’un logiciel.

2. Vous ne semblez pas comprendre la physique de base impliquée dans le problème. (La physique de base signifie la physique sous-jacente, pas la physique simple, car ce n'est pas simple.)

Je vous suggérerais d'utiliser un intégrateur beaucoup plus simple, tel que Runga-Kutta 4, pour lequel vous pouvez trouver de nombreux ouvrages avec des exemples de mise en oeuvre et d'utilisation. Cela devrait suffire à résoudre ce problème. (Si le client a spécifié Kalman, demandez pourquoi.)

Quant à savoir pourquoi le problème est limité, il me semble qu’il n’ya aucun moyen de s’assurer que le périphérique est maintenu verticalement et aucun moyen de mesurer l’orientation réelle. Oubliez le gyroscope pour le moment et supposez que l’appareil ne peut pas pivoter autour d’un axe vertical. Vous avez trois accéléromètres, probablement pour estimer la position en 3D. Donc, si vous voyez une accélération dans la direction X, vous augmentez l’estimation de votre position dans la direction X. De même, si vous constatez une accélération dans la direction Z (ce qui, je suppose, est "ascendant"), vous augmentez l'estimation de votre position dans la direction Z. Maintenant, faites légèrement pivoter l'appareil, par exemple de 30 degrés autour de l'axe des ordonnées. Désormais, lorsque le périphérique pense que vous accélérez dans la direction X, il accélère un peu moins que ce qui est indiqué dans X et , il accélère également dans la direction Z. Donc, votre estimation de position est maintenant incorrecte.

Les rotations sont beaucoup plus difficiles à intégrer (les équations sont plus "rigides", nécessitant un pas de temps plus petit pour maintenir la précision). Mais ils subiront des problèmes similaires de calcul de mauvaises réponses si le périphérique est basculé (car le périphérique ne peut pas dire qu'il est basculé). Il pensera que la rotation autour de l'axe vertical est plus grande ou plus petite qu'elle ne l'est en réalité, car une partie de la rotation concerne en fait un axe différent (tout comme la partie de la partie accélération suivait un axe différent).

< p>

Peut-être devez-vous engager un consultant (non, je ne cherche pas d'emploi) pour vous aider à formuler les mathématiques.

Compte tenu de votre intérêt pour le filtre kalman, vous avez peut-être l’intention d’augmenter les données GPS avec des mesures inertielles. A propos de votre question:

  

"Comment puis-je coder un filtre?   d'utiliser les lectures de l'accéléromètre pour   calibrer le gyroscope à des moments où le   le système est incliné de sorte que l'axe du gyroscope est   pas collinéaire avec la gravité, et est   être tourné autour de l'axe du gyroscope? Il   semble qu'il devrait y avoir assez   informations pour le faire "

Cela ressemble à un alignement gyroscopique. En supposant que vous effectuiez un étalonnage en usine et que l'unité soit sur un banc, vous pourrez mesurer indépendamment l'alignement. Ensuite, exécutez le code de mise à niveau que vous écrivez et annulez l’erreur de biais de gyroscope de la différence entre les alignements de mesure et gyroscopique.

Si vous souhaitez mettre à jour la dérive gyroscopique à la volée, vous aurez besoin du filtre kalman.

Pour ce qui est de la mise en oeuvre, je recommande le chapitre 7, Intégration GPS et inertielle de Théorie et applications du système de positionnement global, vol. 2 , possède une excellente connaissance du sujet. Il a la théorie et les mathématiques, mais pas de code source.

J'ai trouvé de bons articles sur l'utilisation des accéléromètres et des gyroscopes dans la navigation sur ceci blog . La partie sur le filtrage de Kalman est un peu floue, mais il semble y avoir des exemples de code.

Vous trouverez également des ressources générales sur le filtrage de Kalman à l'adresse http://academic.csuohio.edu. /simond/publications.html . L'article mentionné dans (8) est une bonne introduction, mais pas trop effrayante. aux mathématiques derrière les filtres de Kalman.

Un homme au Danemark vient de publier exemple concret de la dérivation d’un filtre de Kalman permettant de résoudre presque exactement ce problème.

Si vous développez pour Propeller uController, alors l'échange d'objets Parallax a du code. Excellente question ;-)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top