Calibrer le gyroscope

S’applique à : Robot réel

Le robot porte un gyroscope, dans sa centrale inertielle, qui mesure ses rotations indépendamment des roues. Il sert à la sécurité (le robot qui patine) et à la navigation : l’EKF le fusionne avec l’odométrie des roues.

Comme les roues, il faut le calibrer. Sinon, au lieu d’améliorer l’odométrie, il la dégrade. Mesuré sur RatBot : avec un gyroscope mal réglé, la position estimée après un carré de 1,3 m était fausse de 30 cm, contre 7 cm une fois réglé.

Un gyroscope a deux défauts possibles.

Le zéro : automatique

Immobile, un gyroscope ne lit jamais exactement zéro : il « dérive » lentement, comme si le robot tournait de quelques degrés par minute. Cette dérive change d’un jour à l’autre, et même d’un démarrage à l’autre.

Vous n’avez rien à faire. La carte du robot remesure ce zéro toute seule, chaque fois que le robot est vraiment immobile : roues arrêtées et aucun mouvement pendant deux secondes et demie. Pendant un trajet, le zéro ne change pas ; il se remet à jour au premier arrêt prolongé.

Astuce

Laissez le robot immobile quelques secondes après l’avoir posé, avant de le faire rouler. C’est ce qui lui permet de mesurer son zéro.

Pour vérifier qu’il le fait, deux compteurs du bloc imu des diagnostics (voir Diagnostics) : gyro_zero_updates augmente à chaque remesure, et gyro_zero_z_urads donne la dérive retirée en ce moment.

L’échelle : à mesurer une fois par robot

Le second défaut est l”échelle : un gyroscope peut compter un tour complet comme 357° ou 363° au lieu de 360°. Cette erreur est propre à chaque puce : elle se mesure une fois par robot, comme le diamètre de ses roues.

Le test est simple : le robot tourne sur place jusqu’à ce que son gyroscope ait compté dix tours, et vous regardez de combien il dépasse sa position de départ, ou s’arrête avant. Sur dix tours, une erreur de 1 % fait 36° d’écart : elle se voit à l’œil.

Le même test mesure aussi l’échelle des roues en rotation, ce qui vérifie au passage l’entraxe trouvé par la calibration de l’odométrie (Calibrer l’odométrie).

La correction s’écrit ensuite dans la carte, dans le réglage gyro_scale (voir Les paramètres du robot), et y reste, même robot éteint.

Ce qu’elle apporte, mesuré sur RatBot : le gyroscope comptait 1,007 tour pour un vrai tour. Une fois corrigé, la position estimée par la fusion roues + gyroscope, après un carré de 1,3 m, est passée de 4,3 cm d’erreur à 2,3 cm — contre 4,2 cm pour les roues seules.

Ce qu’il vous faut

  • environ 50 cm × 50 cm de sol dégagé ;

  • une ligne de référence au sol : une latte de parquet, un joint de carrelage, ou un morceau de ruban adhésif ;

  • le robot allumé et prêt (voyant bleu), le ST-Link débranché ;

  • un terminal sur le Raspberry Pi du robot.

La façon simple : la calibration guidée

Depuis la racine du dépôt :

./scripts/ratbot-calibrate 1 gyro

Le script vérifie que le robot répond et que rien d’autre ne le pilote (navigation, exploration ou cartographie de ce robot : il refuse de démarrer), sauvegarde les réglages de la carte, enchaîne le test dans les deux sens, puis affiche les deux échelles, leur écart et la valeur proposée (leur moyenne). Il ne l’écrit dans la carte qu’après votre accord, puis sauvegarde les nouveaux réglages dans cahier_de_labo/config/. Les mesures sont rangées dans cahier_de_labo/campagnes/. Le robot ne tourne qu’après un « o » tapé par vous.

Avertissement

Pendant les tours, le bouton PS de la manette n’arrête pas le robot : l’outil commande les roues directement, sans passer par la chaîne de commande habituelle. Pour l’arrêter, utilisez le bouton d’arrêt du robot.

./scripts/ratbot-calibrate 1 stats affiche ensuite l’échelle mesurée et sa date. Pour vérifier que le gyroscope améliore bien la position du robot, chaque mesure UMBmark compare les roues seules à robot_localization (roues + IMU) : voir compare dans Calibrer l’odométrie. apply réécrit plus tard les réglages d’une campagne (voir Calibrer l’odométrie, Consulter et décider).

Les sections suivantes détaillent le test, sa lecture et la correction ; elles donnent aussi les commandes pour le faire à la main.

Faire le test

  1. Posez le robot par terre, pas sur sa boîte : il doit vraiment tourner.

  2. Alignez un bord du robot sur la ligne de référence. Ici, une croix de ruban adhésif : le robot est posé dessus, ses bords parallèles aux deux bandes.

    _images/position-initiale.jpg

    La position de départ, sur une croix de ruban adhésif.

  3. Lancez :

    ros2 run ratbot_calibration gyro-scale-run --robot 1 --direction ccw \
        --out ~/calibration_gyro
    
  4. Appuyez sur Entrée. Le robot reste immobile 3 secondes — ne le touchez pas, il mesure son zéro — puis tourne dix fois sur place, vers la gauche, pendant environ 80 secondes.

  5. À l’arrêt, regardez le bord du robot par rapport à la ligne, et répondez à la question : de combien de degrés a-t-il dépassé la ligne, dans son sens de rotation ?

    • positif s’il est allé trop loin ;

    • négatif s’il s’est arrêté avant.

    Une estimation à 2 ou 3° près suffit. L’outil vous relit votre réponse en clair : confirmez.

    Pour la lire, tracez au crayon, sur le ruban, la direction du bord du robot à l’arrêt, puis mesurez l’angle avec la ligne de départ à l’aide d’un rapporteur.

    _images/mesure-depassement.jpg

    Après les dix tours : les traits au crayon, un par sens de rotation, et le rapporteur qui mesure leur écart à la ligne de départ.

  6. Recommencez dans l’autre sens, avec --direction cw.

Lire le résultat

gyro scale   1.00540   (1 real turn counted 361.94 deg)
wheels scale 0.99881   (1 real turn counted 359.57 deg)

gyro_scale on the board: 1.00000 -> to set: 1.00540
Average the ccw and cw values, then:
  ros2 param set /ratbot_1/ratbot_controller gyro_scale <average>
wheelbase implied by the wheels: 0.141475 m (set: 0.141643)

ligne

ce qu’elle veut dire

gyro scale

l’échelle du gyroscope. 1,000 = parfait. 1,008 veut dire qu’il compte 362,9° pour un vrai tour : 0,8 % de trop

wheels scale

la même chose pour les roues. Un écart à 1 veut dire que l’entraxe réglé n’est pas le vrai

to set

la valeur de gyro_scale à écrire dans la carte, en tenant compte de celle déjà en place : refaire le test après une correction l’affine

wheelbase implied

l’entraxe qui rendrait les roues justes en rotation. Il doit être proche de celui trouvé par la calibration de l’odométrie

Les deux sens doivent donner presque la même échelle. S’ils diffèrent de plus de quelques millièmes, refaites le test : le robot a peut-être glissé, ou la mesure du dépassement est douteuse.

Chaque test écrit un fichier …_gyro_scale_ccw.yaml ou …_cw.yaml dans le dossier donné par --out. Gardez-les : ils disent d’où vient la valeur réglée.

Astuce

Si les deux sens donnent des échelles un peu différentes, regardez aussi l’échelle des roues : si elle bouge dans le même sens, c’est votre estimation du dépassement qui varie, pas le capteur. Le rapport gyro scale ÷ wheels scale ne dépend pas de cette estimation ; si vos roues ont été calibrées par UMBmark, c’est la valeur la plus sûre. Sur RatBot : 1,0054 et 1,0087 selon le sens, mais 1,0066 et 1,0076 en rapport — d’où 1,007.

Appliquer la correction

Faites la moyenne des deux sens, puis :

cd ~/ratbot_ws
./scripts/ratbot config 1 save cahier_de_labo/config/ratbot1_avant_gyro.yaml
ros2 param set /ratbot_1/ratbot_controller gyro_scale 1.007
./scripts/ratbot config 1 save cahier_de_labo/config/ratbot1.yaml \
    --origin "echelle gyroscope $(date +%F)"

Pour vérifier, refaites un test : l’échelle mesurée doit maintenant être très proche de 1,000.

Le diagnostic gyro_scale_ppm, dans le bloc imu (voir Diagnostics), montre la valeur appliquée : 1007000 pour 1,007.

En cas de souci

« the robot was not still during the bias measurement »

Quelqu’un a touché le robot, ou la table a bougé, pendant les 3 secondes d’immobilité. Relancez.

Le robot s’arrête en orange avant la fin

Une sécurité s’est déclenchée — le plus souvent le patinage, si le sol est glissant. Réarmez (5 appuis sur SW1, voir Arrêter et relancer le robot), et essayez une vitesse plus faible : --speed 0.5.

« FAILED: no IMU or odometry »

La pile du robot ne tourne pas, ou le robot vient juste de démarrer. Attendez le voyant bleu.