Guide de gyroscope et accéléromètre avec Arduino, y compris le filtrage de Kalman

ce guide a été publié tout d’abord lors du forum de l’Arduino et peut être trouvé ici : http://arduino.cc/forum/index.php/topic, 58048.0.html

J’ai juste elle publiée, donc encore plus obtiendrez utilisation de celui-ci. Le code peut être trouvé ici :
https://github.com/TKJElectronics/example-Sketch-for-IMU-including-Kalman-Filter

Bonjour tout le monde
J’ai récemment acheté cette planche IMU 6DDL analogiques (six degrés de liberté) (http://www.sparkfun.com/products/10010) de watterott.com. Il utilise trois gyroscopes et trois accéléromètres pour calculer les angles en trois dimensions.

J’ai regardé un certain temps pour peu de code en ligne et comment communiquer avec eux. Après de nombreuses heures de recherche j’ai réussi de faire une mesure précise des angles af dans deux directions. J’ai décidé d’écrire un petit guide pour les collègues amateurs électroniques.
L’objectif principal de ce guide est d’enseigner aux autres comment obtenir des données utiles de leur IMU ou juste un gyroscope ou l’accéléromètre. Le code pour Arduino se trouvent sur github : https://github.com/TKJElectronics/Example-Sketch-for-IMU-including-Kalman-filter. Il devrait être assez facile à mettre en œuvre mon code pour votre propre capteur. Je ne décrirai pas tous les détails sur la théorie sous-jacente, au lieu de cela, vous pouvez regarder les sources pour plus d’informations.

Avant de commencer il faut connecter le Mio comme suit :

Acc_Gyro Arduino
3.3V <> — 3.3V
GND <> — GND
Gx4 X <> — AN0
Gx4 Y <> — AN1
Gx4 Z <> — AN2
ACC X <> — AN3
AN4 Y <> — ACC
CAC Z <> — AN5

Connectez également 3.3V sur la broche AREF sur l’Arduino pour plus de précision.
Il est très important que vous ne connectez pas le capteur à 5V - Cela détruira le capteur.

Maintenant vous êtes prêt pour la lecture des données du capteur.

Pour communiquer avec le capteur est simple :
Le gyroscope mesures degrés par seconde, tandis que l’accéléromètre mesure l’accélération (g) en trois dimensions. Les deux sorties les mesures sous forme d’un signal analogique.
Pour obtenir ces traduite en degrés que vous devez faire un codage :

Le gyroscope
Tout d’abord, il faut traduire les chiques (un nombre entre 0-1023) en quelque chose d’utile (il s’agit d’une ADC avec une résolution de 10 bits, par exemple, ce doit être 4095 (2 ^ 12-1 = 4095) pour 12 bit ADC). Pour ce faire je viens d’utiliser cette simple équation :
gyroRate = (gyroAdc-gyroZero) / sensibilité - où gyroAdc sont la valeur lues de notre capteur, gyroZero est la valeur lorsqu’elle est stationnaire (cela dans le code - Regardez dans la section « Installation ») tandis que la sensibilité est la sensibilité trouvées dans la feuille de données, mais traduit en liquides.

Si vous regardez dans les fiches techniques de deux gyroscopes (http://www.sparkfun.com/datasheets/Sensors/IMU/lpr530al.pdf et http://www.sparkfun.com/datasheets/Sensors/IMU/LY530ALH.pdf), vous verrez que la sensibilité est 3.33mV/deg/s pour la 4xOUT. À traduire en contreparties est assez facile : sensibilité / 3.3 * 1023.
Donc dans cet exemple, j’obtiens :
0.00333/3.3*1023=1.0323.

NB: pour traduire mV à V simple diviser simplement par mille.

L’équation finale ressemblera à ceci :
gyroRate = (gyroAdc-gryoZero) / 1.0323

Le résultat va sortir comme degrés par seconde. Pour traduire cela en degrés, il faut connaître l’heure exacte depuis la dernière boucle. Heureusement, l’Arduino a obtenu une commande simple de le faire : millis(). Grâce à qui, on peut calculer la différence de temps (temps de delta) et ainsi de calculer l’angle du gyroscope. L’équation finale ressemblera à ceci :
gyroAngle += gyroRate * dtime/1000

Malheureusement, le gyroscope dérive au fil du temps. Cela signifie qu’il ne peut pas faire confiance une période plus longue, mais c’est très précis pour une courte période. C’est lorsque l’accéléromètre est très pratique. Il n’a pas toute dérive, mais il est trop instable pour timespan plus courte. Je vais décrire comment combiner ces mesures dans un certain temps, mais tout d’abord, je vais décrire comment traduire les lectures de l’accéléromètre en quelque chose d’utile.

L’accéléromètre
L’accéléromètre mesure l’accélération (g) en trois dimensions. Pour traduire l’analogique lectures en degrés, qu'il suffit de lire l’axe et à soustraire le décalage du zéro comme suit :
accVal = accAdc-accZero

Où accAdc est la lecture analogique et accZero est la valeur quand il lit g 0 - ont été calculés dans le début du code, regardez dans la section « Installation ». La valeur zéro se retrouve dans la fiche technique : http://www.sparkfun.com/datasheets/Components/SMD/adxl335.pdf. Vous verrez que la zéro tension à 0g est environ 1.5V, de traduire cela dans les liquides, vous devez encore utiliser cette équation : zeroVoltage / 3.3 * 1023.
Donc dans cet exemple, j’obtiens :
1.5/3.3*1023=465.

Vous pouvez ensuite calculer la hauteur tonale et rouler à l’aide des équations suivantes :
hauteur = atan2 (accYval, accZval) + PI
rouleau = atan2 (accXval, accZval) + PI

Atan2 a une plage de sortie entre - π et π (voir http://en.wikipedia.org/wiki/Atan2), j’ajoute simplement π, la gamme il converti en 0 à 2π.
Pour convertir des radians en degrés nous il suffit de multiplier le résultat par 57.295779513082320876798154814105 - ceci est prédéfinie dans l’IDE Arduino comme RAD_TO_DEG.

Filtre de Kalman
Comme je l’ai expliqué plus tôt le gyroscope est très précis, mais tendent à dériver. L’accéléromètre est un peu instable, mais ne pas dériver. Vous pouvez calculer l’angle précis en utilisant ce qu’on appelle un filtre de Kalman. Un guide détaillé sur la façon dont elle est mise en œuvre peut être trouvé à mon blog : http://blog.tkjelectronics.dk/2012/09/a-practical-approach-to-kalman-filter-and-how-to-implement-it/.

Si vous voulez utiliser quelque chose d’un peu plus simple, vous pouvez utiliser ce qu’on appelle un filtre complémentaire. Il est assez facile à comprendre et le calcul est beaucoup plus simple, car il ne fonctionne qu’en une seule étape.
Par exemple, l’équation pourrait ressembler à ceci :
angle = 0,98 *(angle+gyro*dt) + 0,02 * acc - vous pouvez affiner les chiffres à ce que vous voulez. N’oubliez pas que la somme doit être 1.
Pour moi, le résultat du filtre complémentaire était très fin (ou presque la même chose) que celle calculée par le filtre de Kalman.

Vous avez maintenant appris (on l’espère) Comment obtenir des données analogiques d’IMU et le traduire en quelque chose d’utile. J’ai joint mon propre code pour mon 6DDL IMU (http://www.sparkfun.com/products/10010), mais avec quelques modifications un peu, je suis assez sûr qu’il est possible de l’utiliser avec n’importe quel gyroscope/accéléromètre analogique.

Si vous avez des questions, hésitez pas à poster un commentaire ci-dessous.

Sources :

http://www.Arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1284738418
http://www.x-Firm.com/?page_id=148
http://Web.mit.edu/First/Segway/

Mise à jour
Je viens de terminer un code de traitement qui imprime les données de l’Arduino sur un graphique agréable. Comme vous pouvez le voir dans la vidéo ci-dessous le filtrage est quitté efficace. La ligne bleu clair est l’accéléromètre, la ligne violette est le gyroscope, la ligne noire représente l’angle calculé par le filtre complémentaire et la ligne rouge est l’angle calculé par le filtre de Kalman. Comme vous pouvez voir le filtre de Kalman est juste un peu plus précis (je sais c’est difficile de voir dans la vidéo) que le filtre complémentaire, surtout quand je le secouer.
J’ai joint mon code, le code de mise à jour pour l’Arduino et le code de traitement. Il est également possible de consulter les données de l’axe y. Décommentez simplement drawAxisY() ; dans le code.

Nouveau firmware
J’ai décidé de mettre tout le code source sur github, car il est beaucoup plus facile à entretenir.
Le code plus récent se trouve maintenant à github : https://github.com/TKJElectronics/Example-Sketch-for-IMU-including-Kalman-filter

Mon robot d’équilibrage
Voici une vidéo de mon robot d’équilibrage. Il utilise les mêmes IMU et algorithme tel que décrit dans le post ci-dessus.

Kickstarter
J’ai mon robot équilibrage sur Kickstarter vient de sortir : http://www.kickstarter.com/projects/tkjelectronics/balanduino-balancing-robot-kit
Pensez à soutenir le projet.

Articles Liés

GY-521 MPU6050 3 axes Gyroscope et accéléromètre avec Arduino

GY-521 MPU6050 3 axes Gyroscope et accéléromètre avec Arduino

Ce tutoriel vidéo va sur l'installation et la mise en place d'un Conseil de GY-521 MPU6050 Gyroscope à 3 axes et un accéléromètre avec un Arduino. Après quelques dépannage initial avec, j'ai été en mesure d'obtenir le composant. Dans un premier temps
Mesure d’angle à l’aide de gyroscope, accéléromètre et Arduino

Mesure d’angle à l’aide de gyroscope, accéléromètre et Arduino

le dispositif est un prototype rugueux de ce qui finira par devenir un robot auto balance, il s'agit de la deuxième partie de la chose de trou (lu accéléromètre et commander un moteur à l'équilibre). La première partie avec seulement le gyroscope peu
Contrôleur de jeu Bluetooth avec accéléromètre et Arduino

Contrôleur de jeu Bluetooth avec accéléromètre et Arduino

Tout le monde aime jouer à des jeux sur PC:) Consoles de jeux les prennent au prochain niveau et quoi de plus amusant que de faire un vous-même ? Ici, nous avons construit une console de jeu avec l'accéléromètre, Arduino et Bluetooth. L'accéléromètre
Arduino Nano : Sonde d’I2C accéléromètre Gyroscope boussole MPU9250 avec Visuino

Arduino Nano : Sonde d’I2C accéléromètre Gyroscope boussole MPU9250 avec Visuino

MPU9250est l'un des plus avancés combiné accéléromètre, Gyroscope et boussole capteurs de petite taille actuellement disponibles. Ils ont de nombreuses fonctionnalités avancées, y compris le filtrage passe-bas, détection de mouvement et même un proce
GEO Data Logger : Arduino + GPS + SD + accéléromètre pour enregistrer, horodatage et les données des capteurs géo-tag

GEO Data Logger : Arduino + GPS + SD + accéléromètre pour enregistrer, horodatage et les données des capteurs géo-tag

mises à jour17 octobre 2013: J'ai publié un guide sur l'utilisation de votre téléphone Android pour accomplir une tâche similaire en s'appuyant sur votre Android appareil construit dans le GPS et les capteurs.6 février 2013: En vedette sur GeoAwesome
Comment utiliser le RFduino avec un accéléromètre axe 6

Comment utiliser le RFduino avec un accéléromètre axe 6

Taille de Check-out bout de la RFduino du doigt, Arduino compatible, sans fil activé micro contrôleur :http://www.rfduino.com/Product/rfd90101-rfduino-2p...Cette instructable va vous montrer comment s'interfacent avec l'accéléromètre/gyroscope avec l
Contrôler toutes les pièces avec un accéléromètre

Contrôler toutes les pièces avec un accéléromètre

environnement de programmation le Scratch est très populaire auprès des enfants. À l'aide de l'Arduino, nous pouvons introduire contrôle accéléromètre pour vos jeux peut réagir à l'inclinaison de l'accéléromètre.J'ai couvert les principes fondamentau
Projet Arduino : Gyroscope/accéléromètre MPU-6050 et Adafruit moteur pilote bouclier

Projet Arduino : Gyroscope/accéléromètre MPU-6050 et Adafruit moteur pilote bouclier

Bonjour les gars, si vous envisagez d'utiliser le module MPU 6050 gyroscope/accéléromètre ou L329D adafruit moter pilote pare-avec Arduino pour votre prochain projet puis vous sont sur le bon endroit, parce que dans l'article je partage une vidéo ave
Utiliser un accéléromètre et un Gyroscope avec Arduino

Utiliser un accéléromètre et un Gyroscope avec Arduino

j'ai acheté récemment une combinaison 3 axes accéléromètre et le gyroscope 2 axes de Sparkfun et je voulais mettre du code j'ai utilisé pour le faire marche.  Je suis décidé de l'utiliser dans un Arduino base contrôleur MIDI que je vais poster bientô
Bluetooth/Gyroscope/Accéléromètre contrôlée Lightball (avec individuels LED réglable de chaque côté)

Bluetooth/Gyroscope/Accéléromètre contrôlée Lightball (avec individuels LED réglable de chaque côté)

Enfin (presque topique), j'ai fait mon lightball personnelle.(Alias: un autre jour dans FabLab Aachen)Chaque côté est éclairés individuellement avec une LED intelligent (WS2812b, sur une petite maquette) derrière. Un microcontrôleur (MSP430G2553, PDI
Exploration d’accéléromètre et magnétomètre LSM303DLHC

Exploration d’accéléromètre et magnétomètre LSM303DLHC

Le LSM303 combine les lectures de champ électromagnétique de la terre comme un magnétomètre avec des lectures de la force de gravitation de la terre comme un accéléromètre triple-axe. Cette information fait un système de navigation compact.Comme il e
Accéléromètre & Gyro tutoriel

Accéléromètre & Gyro tutoriel

IntroductionCe guide est destiné à tous ceux intéressés à utiliser des accéléromètres et Gyroscopes ainsi que dispositifs combinés d'IMU (Unité de mesure inertielle) dans leurs projets d'électroniqueNous allons aborder :Que mesure un accéléromètre ?Q
ACCÉLÉROMÈTRE & enregistreur + MAKE & utilisation

ACCÉLÉROMÈTRE & enregistreur + MAKE & utilisation

Contexte et butIl y a quelques semaines, un ami a brisé son avant-bras : elle était dans un autobus dont le chauffeur a violemment tiré les freins, et elle est tombée. Cela m'a rappelé les quelques fois où j'ai eu (poliment) rappelle le chauffeur de
Accéléromètre bluetooth contrôlée Mini voiture

Accéléromètre bluetooth contrôlée Mini voiture

Salut les gens,Tout récemment, je suis entré dans le monde de l'arduino et son incroyable open source, programmation et développement. Alors j'ai décidé de faire une accéléromètre cool contrôlée Bluetooth mini voiture. Sons ce étonnant mais le concep