Nous publions aujourd'hui un nouveau firmware pour le Yocto-3D-V2 avec quelques améliorations et surtout un correctif pour un bug sur l'orientation magnétique. C'est l'occasion de vous rappeler quelques informations essentielles pour tirer le meilleur parti de ce module.
Mesures à haute fréquence
Pour effectuer des mesures en temps réel, de sorte à pouvoir suivre les détails d'un mouvement par exemple, il est indispensable d'utiliser la bonne méthode pour lire le capteur, comme nous l'avons déjà indiqué précédemment dans plusieurs articles: la méthode par callback, où le capteur envoie ses mesures instantanément et spontanément.
Ceci a un impact sur les valeurs qu'il est possible d'obtenir à haute fréquence. En effet, seule la valeur principale de chaque mesure peut être obtenue de cette manière. Pour l'accéléromètre, le gyroscope et le magnétomètre, la valeur principale est la norme du vecteur.
Accès rapide aux composantes x, y et z des vecteurs
Ainsi, les versions du firmware antérieures à la version 26635 n'offrent pas la possibilité de lire les composantes x, y et z de ces vecteurs à haute fréquence. Cela n'empêchait pas d'obtenir l'orientation du module, puisque les composantes du quaternion étaient, elles, disponibles mais compliquait un peu son utilisation pour certaines applications.
Avec le nouveau firmware, il est possible de changer l'affectation des fonctions qt1, qt2, qt3 et qt4 pour leur affecter non plus les composantes du quaternion mais n'importe quelle autre composante des vecteurs d'accélération, du magnétomètre ou du gyroscope. Cela se fait simplement en changeant le nom logique de ces fonctions à l'aide de la méthode set_logicalName(). Leur nom logique à la sortie d'usine est respectivement w, x, y et z, selon la convention des quaternions. Mais elles reconnaissent désormais les noms ax, ay et az pour devenir composantes du vecteur d'accélération, mx, my et mz pour devenir composantes du vecteur de champ magnétique et gx, gy et gz pour devenir composantes du vecteur de vitesse de rotation. Il est ainsi possible d'utiliser les 4 fonctions qt pour obtenir par exemple les composantes ax, ay, gx et gy.
Attention: les valeurs qt étant des nombres entiers, l'unité utilisée est le milli-g (mg) pour les composantes ax, ay et az, le milli-Tesla pour les composantes mx, my et mz et le milli-degré par seconde pour les composantes gx, gy et gz.
Notez aussi que si vous utilisez cette possibilité de redéfinir les fonctions qt, vous ne pourrez naturellement plus obtenir le quaternion par callback. Cela signifie aussi que la visualisation en 3D de l'estimation de position par le quaternion dans le VirtualHub ne fonctionnera plus.
Accès rapide aux autres attributs
Si vous avez besoin d'accéder rapidement à d'autres attributs, ou si vous ne voulez pas sacrifier le callback pour le quaternion, vous avez aussi la possibilité d'utiliser la méthode loadAttribute() décrite dans un article précédent. Elle est un peu moins efficace que la méthode par callback, néanmoins beaucoup plus performante que l'utilisation des fonctions get_ lorsqu'on n'a besoin que de quelques attributs.
Augmentation de la bande passante de l'inclinomètre et de la boussole
Pour ne pas surcharger les machines de faible puissance, dans sa configuration standard, le Yocto-3D-V2 ne publie à 100 Hz que les valeurs du quaternion. Les inclinomètres et la boussole sont moyennés et ne sont envoyés qu'à 7 Hz. Si vous avez besoin d'une fréquence de rafraîchissement plus élevée, vous pouvez utiliser la méthode set_bandwidth() pour augmenter cette fréquence jusqu'à 20 Hz pour la boussole, et 100 Hz pour les accéléromètres. Attendez-vous toutefois à des mesures plus bruitées, car le moyennage n'est pas superflu sur ce type de capteurs...
Orientation magnétique
L'estimation de l'orientation absolue faite par le BNO055 est basée sur les accéléromètres et la boussole. L'inclinaison peut être déterminée sans boussole, mais il est impossible de connaître une orientation absolue sans une boussole qui fonctionne.
Perturbations magnétiques
Une boussole est très sensible aux
- métaux ferromagnétiques environnants
- champs magnétiques environnants, y compris ceux générés par des courants électriques
Le BNO055 peut s'auto-calibrer pour annuler l'effet des champs magnétiques constants par rapport au capteur (c'est-à-dire dont les sources sont constantes et se déplacent solidairement avec le capteur). Par contre, la présence de métaux ferromagnétiques, même solidaires du capteur, entrave le bon fonctionnement du capteur car ils déforment les lignes de champ magnétique, comme illustré ci-dessous.
Déformation des lignes de champ magnétique
Voici une petite expérience en vidéo qui montre la différence entre une utilisation correcte et incorrecte du Yocto-3D-V2. Notez en particulier que, comme indiqué dans la documentation, le connecteur Picoflex doit être réservé aux applications qui utilisent uniquement l'inclinomètre, car le métal du connecteur altère le bon fonctionnement de la boussole. Pour que la boussole fonctionne bien, il faut absolument éviter l'utilisation de fer, nickel et acier. Vous pouvez par contre utiliser de la visserie en aluminium, en cuivre, en zinc, en laiton ou en plastique...
... et bugs
En faisant ces tests, nous nous sommes rendus compte que contrairement au Yocto-3D et à ce qui est indiqué dans la documentation, le firmware original du Yocto-3D-V2 vise le Nord magnétique avec l'axe Y et non l'axe X comme prévu. Ce défaut d'orientation affecte de manière identique le quaternion décrivant la position du module.
A partir de ce nouveau firmware 26635, nous rétablissons le comportement attendu: le nord magnétique sera désormais pointé par l'axe X, et le quaternion [1,0,0,0] indique une position horizontale avec l'axe X pointant vers le nord. Ce changement pouvant entraîner un changement significatif pour certaines applications, nous avertirons individuellement tous nos clients ayant acheté un Yocto-3D-V2 de ce changement, afin qu'ils puissent en tenir compte avant de mettre à jour leur firmware.
La calibration du BNO055
Comme tous les capteurs inertiels MEMS, le capteur BNO055 utilisé par le Yocto-3D-V2 utilise un mécanisme de calibration pour retourner des mesures correctes:
- Le zéro du gyroscope est recalé lorsqu'une position à l'arrêt est détectée par les accéléromètres
- Le zéro de magnétomètre est recentré par le calcul de la valeur médiane du champ magnétique lors d'une rotation dans l'espace
- Le zéro de l'accéléromètre et son amplitude sont calibrés par la mesure de l'accélération terrestre, lorsque le capteur est stable à l'arrêt dans une position orthogonale avec le vecteur de gravité.
Lorsqu'il n'est pas calibré, le capteur BNO055 n'est pas capable de retourner une estimation de son orientation. Pour éviter ce problème, Yoctopuce effectue une calibration en usine du capteur, et le Yocto-3D-V2 va automatiquement appliquer les derniers paramètres de calibration connus à chaque démarrage du module. Si nécessaire, la calibration sera adaptée de manière transparente par le BNO055, qui effectue une calibration continuelle lorsqu'il fonctionne en mode fusion NDOF.
Surveillance de l'état de calibration
Ce comportement adaptatif en continu peut toutefois présenter un défaut: si le BNO055 détecte un stimulus dépassant la plage attendue sur l'un des capteurs, tel qu'un choc dur dépassant la plage de l'accéléromètre, une perturbation magnétique dépassant la plage du magnétomètre ou une rotation à une vitesse supérieure à la plage du gyroscope le BNO055 peut automatiquement se remettre en mode décalibré, et donc cesser temporairement certaines estimations d'orientation, plutôt que de retourner une estimation incorrecte.
Ce comportement peut être détecté à l'aide de deux méthodes de la fonction refFrame:
- L'état de calibration des capteurs peut être obtenu par la méthode get_calibrationState(), qui retourne un entier entre 0 et 333. Le digit des centaines représente l'état de calibration de l'accéléromètre (0=non calibré, 3=bien calibré). Le digit des dizaines représente l'état de calibration du magnétomètre, et les unités représentent l'état de calibration du gyroscope.
- L'état général de la calibration peut être obtenu avec la méthode get_measureQuality()
Si vous désirez obtenir ces informations à haute fréquence, vous pouvez les retrouver dans la chaîne retournée par refFrame.load_attribute("calibrationParam") en ignorant la partie précédant l'espace.
Effectuer une calibration manuelle
Si vous désirez refaire une calibration complète (pour compenser une perturbation magnétique par exemple) et la sauvegarder dans la mémoire flash du Yocto-3D-V2 pour qu'elle soit appliquée au démarrage, c'est possible. La procédure de calibration peut être lancée par la librairie Yoctopuce, par la ligne de commande ou par le VirtualHub: elle va remettre le BNO055 en état non calibré, et attendre que celui-ci repasse en mode entièrement calibré en indiquant quels mouvements effectuer. Une fois la calibration terminée, les paramètres seront sauvés dans la mémoire flash du Yocto-3D-V2.
La calibration de l'accéléromètre du BNO055 exige un peu de patience: nous n'avons jamais pu effectuer une calibration aussi rapidement que montré sur la vidéo postée par Bosch Sensortec, que nous soupçonnons d'avoir été un peu raccourcie... Voici donc notre vidéo montrant une calibration de bout en bout, sans tricher:
Autres réglages particuliers du BNO055
On nous demande parfois s'il est possible d'accéder à d'autres réglages internes du capteur Bosch BNO055 utilisé par le Yocto-3D-V2, par exemple pour changer de mode de fonctionnement ou changer la plage de mesures (range) des capteurs.
Le Yocto-3D-V2 utilise toujours le mode NDOF, qui correspond au mode de fonctionnement le plus avancé du capteur BNO055 (mode fusion avec calibration rapide). Il n'est pas possible de changer ce mode, car tout le fonctionnement du module en dépend. Par ailleurs, lorsque le capteur travaille en mode fusion, toutes les plages de mesures sont gérées automatiquement par le BNO055, et il n'est donc pas possible de les configurer manuellement.
L'orientation du capteur peut, elle, être configurée via le VirtualHub ou la librairie de programmation Yoctopuce, comme décrit dans le manuel à la section 3.4.
Conclusion
Si vous comptiez sur le Yocto-3D-V2 et son capteur Bosch BNO055 pour vous affranchir magiquement des lois de la physique, vous serez forcément un peu déçu... mais une fois qu'on connaît les précautions à prendre, il reste bien des applications réelles et qui fonctionnent :-)