Nouveau: Le Yocto-3D-V2

Nouveau: Le Yocto-3D-V2

Le Yocto-3D est dans le top 10 des produits que nous vendons le plus. Pourtant, il nous pose un problème: il ne permet pas de calibrer une compensation pour les perturbations magnétiques, et son firmware est plein comme un œuf, ce qui nous empêche de l'améliorer. Nous avons donc empoigné le problème différemment, et vous proposons aujourd'hui un nouveau produit similaire, mais basé sur un capteur plus performant et qui inclut la compensation magnétique hard iron. Bienvenue au Yocto-3D-V2...


Similitudes


Le Yocto-3D-V2 a été conçu pour pouvoir remplacer un Yocto-3D sans difficulté. Ses dimensions physiques sont exactement identiques et le point de mesure est exactement le même. La correspondances des axes X/Y/Z et les unités de mesures sont aussi identiques. Le capteur effectue comme précédemment une fusion des mesures de l'accéléromètre, du magnétomètre et du gyroscope, pour obtenir une estimation en temps réel de la position du module.

L'interface de programmation pour lire les mesures est aussi la même. Si votre programme ne fait pas de test explicite du nom du module ou du numéro de série, il y a toutes les chances pour qu'il puisse fonctionner aussi bien avec un Yocto-3D-V2 qu'avec un Yocto-3D, sans même devoir le recompiler.

Le nouveau Yocto-3D-V2, aux côtés de son prédécesseur
Le nouveau Yocto-3D-V2, aux côtés de son prédécesseur



Différences


La principale différence dans la librairie de programmation est l'ajout de nouvelles méthodes permettant de surveiller le mécanisme d'auto-calibration, qui permet la compensation des perturbations magnétiques. Ce mécanisme est propre au capteur du Yocto-3D-V2, le chip BNO055 de Bosch. En effet, contrairement à la précédente version, où la calibration et la fusion des capteurs était faite dans le processeur Yoctopuce, c'est directement le chip du capteur qui effectue la calibration et la fusions des capteurs.

Auto-calibration


A la mise sous tension du Yocto-3D-V2, le chip sera initialisé avec la dernière calibration sauvegardée explicitement, par exemple la calibration faite en usine par Yoctopuce. La puce est donc immédiatement opérationnelle pour donner une estimation d'orientation. Ensuite, en fonctionnement, la calibration est constamment mise à jour par le chip BNO055, sur la base des mesures effectuées en temps réel. Si le chip détecte un champ magnétique constant ajouté au champ magnétique terrestre, il s'auto-calibrera pour annuler ce champ et estimer correctement le nord magnétique. Au niveau de l'interface de programmation, on pourra détecter cela par le fait que le niveau de calibration du capteur magnétique va baisser lors de la détection de l'interférence, puis remonter une fois que quelques mouvements auront permis de quantifier le champ parasite et de le soustraire. Les méthodes correspondantes sont:

refFrame.get_calibrationState()// retourne l'état de calibration des 3 capteurs
refFrame.get_measureQuality()  // retourne la qualité de l'estimation de position


La méthode get_calibrationState retourne un entier représentant l'état de calibration des trois capteurs inertiels: les centaines indiquent l'état de calibration de l'accéléromètre, les dizaines indiquent l'état de calibration du magnétomètre, et les unités indiquent l'état de calibration du gyroscope. Pour chaque capteur, la valeur 0 indique l'absence de calibration tandis que la valeur 3 indique une calibration complète.

La méthode get_measureQuality retourne un entier entre 0 et 3 représentant le degré de confiance de l'estimation de position. Lorsque la valeur est 3, l'estimation est fiable. En dessous de 3, il faut s'attendre à des corrections d'orientations ultérieures, en particulier sur la boussole (fonction compass). Les causes les plus fréquentes pour une qualité inférieure à 3 sont les interférences magnétiques et les accélérations ou rotations en delà des capacités du capteur.

Procédure de calibration explicite


Il est toujours possible, comme avec le Yocto-3D, d'effectuer une calibration explicite du Yocto-3D-V2. Cela aura pour effet de réinitialiser tous les paramètres de calibration du BNO055, pours lui demander de les recalculer entièrement. A l'issue de la procédure, si les réglages sont sauvegardés avec la méthode save3DCalibration, ils seront utilisés comme point de départ à chaque redémarrage du module.

Les mouvements à effectuer pour recalibrer explicitement le capteur sont différents de la première version. Alors qu'il fallait avant le laisser à l'arrêt pendant quelques dizaines de secondes dans six directions orthogonales, il faut maintenant:
- le laisser quelques secondes à l'arrêt pour calibrer le gyroscope
- lui faire décrire un ou deux '8' dans l'espace pour calibrer le magnétomètre
- le faire tourner très lentement sur les 3 axes, avec des arrêts aux angles droits, pour calibrer l'accéléromètre

Fréquence de rafraîchissement


Autre amélioration notable de la nouvelle version: une fréquence de rafraîchissement rapide pour toutes les mesures. Dans la première version, pour des raisons techniques, seul le quaternion décrivant l'orientation du module était rafraîchi à 95 Hz. Toutes les autres mesures étaient lues à plus faible fréquence puis filtrées pour être stabilisées. Grâce au fait que le BNO055 fasse beaucoup de calculs en interne, le nouveau Yocto-3D-V2 est capable de retourner à haute fréquence aussi toutes les estimations d'angle, ainsi que la norme du vecteur d'accélération et du vecteur de champ magnétique. Seul la boussole est limitée à 20 Hz. Mais le risque est que votre hub USB ou votre ordinateur ne suive pas, si vous utilisez un Raspberry Pi ou autre mini-PC similaire avec des capacités USB limitées. Pour éviter que cela pose problème, nous avons donc ajouté un réglage permettant de configurer le taux de rafraîchissement maximal des notifications de changement de valeur. Par exemple, avec les réglages

roll.set_bandwidth(7);
pitch.set_bandwidth(7);


l'inclinomètre du Yocto-3D-V2 retourne les valeurs à 7 Hz, soit la même fréquence que le Yocto-3D. C'est d'ailleurs le réglage standard que nous avons mis d'usine, pour maintenir la compatibilité. Mais vous pouvez si vous le voulez monter cette valeur jusqu'à 100 Hz.

Un exemple


Pour conclure, voici un petit exemple réalisé à l'aide d'un Yocto-3D-V2, d'un Yocto-Color-V2, d'un Micro-USB-Hub-V2 et de quelques LEDs NeoPixel:

Notre testeur de Yocto-3D-V2: boussole, niveau d'eau et détecteur de chocs
Notre testeur de Yocto-3D-V2: boussole, niveau d'eau et détecteur de chocs


L'idée est très simple: sur le mini-PC Intel Edison, un petit script python mesure l'orientation de la roue à l'aide du Yocto-3D-V2 et affiche un motif correspondant sur l'anneau de LEDs NeoPixel à l'aide du Yocto-Color-V2. Comme l'Edison n'a qu'un seul port USB, on a utilisé un Micro-USB-Hub-V2 pour connecter les deux modules.

Le diagramme de connection
Le diagramme de connection


  • Lorsque l'anneau est à plat, on allume la LED en direction du Nord magnétique.
  • Lorsque l'anneau est vertical, on allume deux LEDs pour indiquer le niveau horizontal.
  • Lorsqu'on perçoit une accélération d'au moins 2g, on affiche un court flash sur l'anneau pour signaler la détection d'un choc.

Grâce à ce petit exemple, on a pu vérifier que la boussole s'auto-calibrait correctement pour compenser les perturbations magnétiques hard iron. Le même système réalisé avec un ancien Yocto-3D ne marche simplement pas: la boussole tourne avec le disque, en raison des perturbations magnétiques générées par le système. On a aussi pu vérifier la compensation en inclinaison, les comportements sur les angles critiques et la bonne réactivité du capteur. Jugez plutôt:

  


Nous allons vendre les deux versions en parallèle pendant quelque temps, mais la production de la version 1 sera bientôt arrêtée.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.