Table des matières:
- Étape 1: Pourquoi utiliser une centrale inertielle ?
- Étape 2: Comment utiliser BNO055 pour la localisation 2D ?
- Étape 3: Point de vue matériel
- Étape 4: Comment ça marche ?
- Étape 5: L'architecture et le logiciel
- Étape 6: Qu'ai-je appris ?
Vidéo: Une façon d'utiliser une unité de mesure inertielle ? : 6 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:05
Le contexte:
Je construis pour le plaisir un robot que je veux déplacer de manière autonome à l'intérieur d'une maison.
C'est un long travail et je le fais étape par étape.
J'ai déjà publié 2 instructables sur ce sujet:
- un sur la fabrication d'un encodeur de roue
- un sur la connexion wifi
Mon robot est entraîné par 2 moteurs à courant continu à l'aide de mon encodeur de roue fait maison.
J'améliore actuellement le contrôle du mouvement et j'ai passé du temps avec le gyroscope, l'accéléromètre et l'IMU. Je serais ravi de partager cette expérience.
Vous voulez en savoir plus sur la localisation ? Voici un article sur comment combiner intelligence artificielle et ultrasons pour localiser le robot
Étape 1: Pourquoi utiliser une centrale inertielle ?
Alors pourquoi ai-je utilisé un IMU ?
La première raison était que si l'encodeur de roue est suffisamment précis pour contrôler le mouvement rectiligne, même après le réglage, je n'ai pas pu obtenir une précision de rotation inférieure à +- 5 degrés et ce n'est pas suffisant.
J'ai donc essayé 2 capteurs différents. Tout d'abord j'utilise un magnétomètre (LSM303D). Le principe était simple: avant la rotation, obtenez l'orientation nord, calculez la cible et ajustez le mouvement jusqu'à ce que la cible soit atteinte. C'était un peu mieux qu'avec l'encodeur mais avec trop de dispersion. Après cela, j'ai essayé d'utiliser un gyroscope (L3GD20). Le principe était juste d'intégrer la vitesse de rotation fournie par le capteur pour calculer la rotation. Et ça a bien fonctionné. J'ai pu contrôler la rotation à +- 1 degré.
Néanmoins, j'étais curieux d'essayer quelques IMU. Je choisis un composant BNO055. J'ai passé du temps à comprendre et tester cette IMU. J'ai finalement décidé de sélectionner ce capteur pour les raisons suivantes
- Je peux contrôler la rotation aussi bien qu'avec le L3GD20
- Je peux détecter une légère rotation lorsque je me déplace en ligne droite
- J'ai besoin d'obtenir l'orientation nord pour la localisation du robot et l'étalonnage de la boussole du BNO055 est très simple
Étape 2: Comment utiliser BNO055 pour la localisation 2D ?
BNO055 IMU est un capteur intelligent Bosch à 9 axes qui pourrait fournir une orientation absolue.
La fiche technique fournit une documentation complète. C'est un composant de haute technologie, c'est un produit assez complexe et j'ai passé quelques heures à apprendre comment cela fonctionne et à essayer différentes façons de l'utiliser.
Je pense qu'il pourrait être utile de partager cette expérience.
Tout d'abord, j'ai utilisé la bibliothèque Adafruit qui fournit un bon outil pour calibrer et découvrir le capteur.
A la fin et après de nombreux tests j'ai décidé de
- utiliser la bibliothèque Adafruit pour enregistrer l'étalonnage uniquement
- utiliser 3 de tous les modes possibles de BNO055 (NDOF, IMU, Compss)
- dédier un Arduino Nano pour calculer la localisation basée sur les mesures BNO055
Étape 3: Point de vue matériel
BNO055 est un composant I2C. Il a donc besoin d'alimentation, de SDA et de SCL pour communiquer.
Faites juste attention à la tension Vdd en fonction du produit que vous avez acheté. La puce Bosch fonctionne dans la plage: 2,4V à 3,6V et vous pouvez trouver des composants 3,3v et 5v.
Il n'y a aucune difficulté pour connecter le Nano et le BNO055.
- Le BNO055 est alimenté par le Nano
- SDA et SCL sont connectés avec 2 résistances pull-up de 2k.
- 3 LED connectées au Nano pour le diagnostic (avec résistances)
- 2 connecteurs permettant de définir le mode après boot
- 1 connecteur vers le BNO (Gnd, Vdd, Sda, Scl, Int)
- 1 connecteur vers le Robot/Mega (+9V, Gnd, sda, Scl, Pin11, Pin12)
Un peu de soudure et c'est tout !
Étape 4: Comment ça marche ?
Du point de vue communication:
- Le Nano est le maître du bus I2C
- Le Robot/Mega et le BNO055 sont des esclaves I2C
- Le Nano lit en permanence les registres BNO055
- Le Robot/Mega lève un signal numérique pour demander le mot du Nano
Du point de vue du calcul: le Nano combiné avec le BNO055 offre
- Le cap de la boussole (utilisé pour la localisation)
- Un cap relatif (utilisé pour contrôler les rotations)
- Le cap et la position absolus (utilisés pour contrôler les déplacements)
Du point de vue fonctionnel: Le Nano:
- gère la calibration BNO055
- gère les paramètres et les commandes du BNO055
Le sous-système Nano & BNO055:
- calculer pour chaque roue de robot le cap et la localisation absolus (avec un facteur d'échelle)
- calculer le cap relatif lors de la rotation du robot
Étape 5: L'architecture et le logiciel
Le logiciel principal s'exécute sur un Arduino Nano
- L'architecture est basée sur la communication I2C.
- J'ai choisi de dédier un Nano car l'Atmega qui fait tourner le robot était plutôt déjà chargé et cette architecture le rend plus facile à réutiliser ailleurs.
- Le Nano lit les registres BNO055, calcule et stocke l'en-tête et la localisation dans ses propres registres.
- L'Arduino Atmega qui exécute le code du robot, envoie les informations des encodeurs de roues au Nano et lit les en-têtes et la localisation à l'intérieur des registres Nano.
Le code du sous-système (Nano) est disponible ici sur GitHub
L'outil d'étalonnage Adafruit est ici sur GitHub (l'étalonnage sera stocké sur eeproom)
Étape 6: Qu'ai-je appris ?
Concernant I2C
Tout d'abord j'ai essayé d'avoir 2 maîtres (Arduino) et 1 esclave (capteur) sur le même bus mais à la fin il est possible et plus simple de ne définir que le Nano comme maître et d'utiliser la connexion GPIO entre les 2 Arduinos pour "demander le jeton".
Concernant BNO055 pour l'orientation 2D
Je peux me concentrer sur 3 modes de fonctionnement différents: NDOF (combiner gyroscope, accéléromètre et Compas) lorsque le robot est au repos, IMU (combiner gyroscope, accéléromètre) lorsque le robot est en mouvement et Compass pendant la phase de localisation. La commutation entre ces modes est simple et rapide.
Pour réduire la taille du code et garder la possibilité d'utiliser l'interruption BNO055 pour détecter les collisions, je préfère ne pas utiliser la bibliothèque Adafruit et le faire moi-même.
Conseillé:
ActoKids : une nouvelle façon de trouver des activités : 11 étapes
ActoKids : une nouvelle façon de trouver des activités : il est important de garder les enfants de tous âges et de toutes capacités actifs et engagés dans leurs communautés. La participation à des activités aide les enfants à rester en bonne santé, à nouer des amitiés, à développer des compétences et à favoriser la créativité. Cependant, trouver des informations sur un
ARUPI - une unité d'enregistrement automatisée à faible coût/unité d'enregistrement autonome (ARU) pour les écologistes du paysage sonore : 8 étapes (avec photos)
ARUPI - une unité d'enregistrement automatisé à faible coût/unité d'enregistrement autonome (ARU) pour les écologistes du paysage sonore : cette instructable a été écrite par Anthony Turner. Le projet a été développé avec beaucoup d'aide du Shed de la School of Computing, University of Kent (M. Daniel Knox a été d'une grande aide !). Il vous montrera comment construire un Automated Audio Recording U
Découvrez la meilleure façon d'affiner une photo : 8 étapes
Découvrez la meilleure façon d'affiner une photo : utilisez Photoshop Elements pour affiner les détails d'apparence douce tout en gardant les artefacts à distance. Il y a plusieurs raisons pour lesquelles une photo peut sembler un peu douce. Pour commencer, le point de mise au point automatique (AF) de l'appareil photo peut ne pas avoir chevauché la zone d'intérêt clé, cau
Une nouvelle façon d'Arduino de contrôler une voiture RC : 7 étapes (avec photos)
Une nouvelle façon de contrôler Arduino une voiture RC : J'ai travaillé avec des voitures contrôlées par Arduino, mais celles sur lesquelles j'ai travaillé ont toujours été lentes et méthodiques. C'est génial pour apprendre l'arduino, mais je voulais quelque chose d'un peu plus… amusant. Entrez dans la voiture RC. Les voitures RC sont littéralement conçues pour être un
Fabriquer une unité d'exposition PCB appropriée à partir d'une lampe à polymériser les ongles UV bon marché : 12 étapes (avec photos)
Fabriquer une unité d'exposition aux PCB appropriée à partir d'une lampe UV bon marché : qu'est-ce que la production de PCB et les faux ongles ont en commun ? Ils utilisent tous les deux des sources de lumière UV de haute intensité et, par chance, ces sources lumineuses ont exactement la même longueur d'onde. Seuls ceux destinés à la production de PCB sont généralement assez coûteux