Calibrer l’odométrie
S’applique à : Robot réel
Votre robot sait en permanence où il se trouve, en comptant ce que font ses roues. C’est l”odométrie, et c’est sur elle que reposent la cartographie et la navigation. Mais elle se trompe toujours un peu, et toujours dans le même sens : cette page vous explique comment mesurer cette erreur, puis la corriger.
Comptez une heure pour une campagne complète.
Pourquoi c’est nécessaire
Deux défauts se glissent dans tout robot à deux roues motrices, quelle que soit la qualité de la fabrication.
Les roues n’ont pas exactement le même diamètre. Même modèle, même série : un pneu légèrement plus écrasé, un moyeu un peu décentré, et l’écart est de l’ordre du pour cent. Le robot dérive alors en ligne droite sans le savoir.
L’entraxe réel n’est pas la cote du plan. La distance entre les points de contact au sol dépend de la largeur de la gomme et de son écrasement. Toutes les rotations tombent légèrement à côté.
Ces deux erreurs sont systématiques : elles se répètent à l’identique, donc elles s’accumulent, et donc elles se corrigent. C’est ce que fait la méthode UMBmark (Borenstein et Feng, 1996).
Note
La méthode ne corrige pas les erreurs accidentelles — un patinage, une bosse, un obstacle. Celles-là se lisent dans la dispersion des essais, pas dans leur moyenne.
Le principe
On demande au robot de tracer un carré et de revenir à son point de départ. Il est piloté sur sa propre odométrie : il croit sincèrement refermer un carré parfait.
Vous, vous mesurez où il est vraiment arrivé. L’écart entre sa croyance et votre mètre ruban, c’est la mesure.
Important
Il faut faire le carré dans les deux sens. Les deux erreurs s’additionnent dans un sens et se compensent dans l’autre : avec un seul sens, on constate qu’il y a un problème, mais on ne peut pas savoir lequel des deux.
Ce qu’il vous faut
2 m × 2 m de sol dégagé, plat et uniforme ;
un L collé au sol : son coin est l’origine, une branche donne la direction de départ. Du ruban de masquage suffit ;
un mètre ruban ;
de quoi marquer des positions au sol (gommettes, ruban) ;
une batterie chargée : une campagne complète la sollicite une heure.
Astuce
Choisissez un sol représentatif de celui où le robot travaillera. Une calibration faite sur carrelage ne vaut pas tout à fait sur moquette.
Le repère de mesure
C’est le point sur lequel on se trompe le plus souvent. Prenez trente secondes.

Le repère de mesure. L’origine est le point du sol où le robot démarre.
L’origine est le point du sol où le robot démarre.
+X est la direction dans laquelle il regarde au départ.
+Y est à sa gauche.
Tout se mesure en centimètres.
Mesurez toujours le même point du robot — le milieu de l’essieu est le plus commode. Marquez-le d’un trait si besoin.
Note
L’outil redessine ce schéma avant chaque saisie, puis vous relit ce qu’il a compris : « le robot a fini 6,5 cm en avant et 11 cm à gauche ». Vérifiez cette phrase-là plutôt que les chiffres : une inversion se voit immédiatement.
Où poser le robot
Le carré se déplie du côté où le robot tourne. C’est contre-intuitif une fois sur deux, et poser le robot au mauvais coin l’envoie dans le mur.
Le cap de départ est le même dans les deux sens. Seul le coin change.
Sens |
Il tourne |
Le carré occupe |
Départ au coin |
|---|---|---|---|
Antihoraire (CCW) |
à gauche |
nord-ouest |
sud-est |
Horaire (CW) |
à droite |
nord-est |
sud-ouest |

Le carré se déplie du côté où le robot tourne. Le cap de départ est le même dans les deux sens ; seul le coin change.
Autrement dit : pour passer du sens antihoraire au sens horaire, vous déplacez le L d’une longueur de côté, sans changer l’orientation.
Quelle taille de carré
Plus le carré est grand, plus les erreurs systématiques ressortent du bruit de votre mètre ruban : elles croissent avec la distance parcourue, tandis que votre précision de mesure, elle, reste la même. Borenstein utilisait 4 m.
Mais le robot doit tenir dans la pièce avec sa dérive — c’est justement ce qu’on cherche à mesurer, et elle peut atteindre une quinzaine de centimètres au pire coin.
Côté |
Place réellement occupée |
Dans 2 m × 2 m |
|---|---|---|
1,0 m |
≈ 1,55 m |
large |
1,2 m |
≈ 1,75 m |
confortable — valeur recommandée |
1,5 m |
≈ 2,05 m |
ne passe pas |
La place occupée ajoute au côté l’encombrement du robot (environ 12 cm de son centre à son bord) et la dérive attendue, de part et d’autre.
Important
Un robot garde toujours la même taille de carré. L’erreur mesurée grandit avec le côté : deux mesures de côtés différents ne se comparent pas. La calibration guidée l’impose : la première mesure d’un robot fixe son côté (1,2 m par défaut), et toutes les suivantes le reprennent, sans choix possible. Sur ratbot-1, c’est 1,3 m, le côté de ses mesures d’octobre 2026.
La façon simple : la campagne guidée
Une fois le sol préparé (le L collé, voir Où poser le robot), depuis la racine du dépôt :
./scripts/ratbot-calibrate 1 umbmark
Chaque lancement fait une mesure, avec les réglages en place dans la carte :
le script vérifie que le robot répond et que rien d’autre ne le pilote : il refuse de démarrer si une navigation, une exploration ou une cartographie tourne pour ce robot, car leurs ordres se mêleraient aux siens. Il sauvegarde les réglages de la carte, et demande le commit du firmware flashé : il propose le dernier commit du firmware du dépôt, que l’on accepte d’un Entrée, mais vous seul savez ce qui est réellement flashé (voir Préparer la session) ;
il enchaîne cinq carrés antihoraires, au côté du robot (voir Quelle taille de carré), puis vous dit de déplacer le L, puis cinq carrés horaires. Chaque carré attend un « o », puis votre mesure au sol ; un carré interrompu ou mal mesuré est refait ;
il analyse la mesure, affiche E_max,syst, la compare aux mesures précédentes du robot, et propose trois réglages. Si l’écriture réussit mais pas la sauvegarde qui suit, il le dit, et la correction reste notée. Il ne les écrit dans la carte qu’après votre accord, et sauvegarde alors les nouveaux réglages dans
cahier_de_labo/config/.
Calibrer, c’est faire deux mesures : la première, puis la correction, puis une seconde, avec les nouveaux réglages, qui montre si l’erreur a baissé. Trois mois plus tard, une mesure sans correction sert de contrôle : il suffit de répondre « non » à la proposition.
Chaque mesure a son propre dossier dans cahier_de_labo/campagnes/, nommé
DATE_ratbotN_umbmark : deux mesures ne se mélangent jamais.
Une mesure interrompue reprend là où elle s’est arrêtée, même un autre
jour : relancez la même commande. Le script montre d’abord ce qui est déjà
fait et demande s’il faut la reprendre, puisque rien ne doit avoir changé
depuis : sol, roues, réglages. Il redemande aussi si le firmware est
toujours le même. Si vous répondez non, ou si ses carrés n’ont pas le côté du
robot, la mesure est mise de côté, avec la raison notée, et une nouvelle
commence. Une mesure mise de côté reste dans cahier_de_labo/campagnes/ et
apparaît dans list avec sa raison, mais ne compte plus dans stats. Si l’analyse refuse de conclure (deux firmwares, deux réglages), le
script propose de même de la mettre de côté.
Pour savoir ce que la fusion avec le gyroscope apporte, la même mesure se fait robot piloté sur l’odométrie fusionnée ; elle ne propose aucun réglage :
./scripts/ratbot-calibrate 1 fusion
Avertissement
Pendant les carrés, le bouton PS de la manette n’arrête pas le robot : l’outil commande les roues directement. Pour l’arrêter, utilisez le bouton d’arrêt du robot.
Consulter et décider
Le même script consulte les mesures, toujours pour un robot donné :
Commande |
Effet |
|---|---|
|
les campagnes du robot 1 : mesures, gyroscope, lidar, avec leurs carrés, la date d’écriture de leurs réglages, et la raison de celles qui ont été mises de côté |
|
ses mesures dans l’ordre, avec E_max,syst, l’évolution d’une mesure à l’autre et la date des corrections ; l’échelle du gyroscope |
|
le détail d’une campagne, carré par carré |
|
l’IMU corrige-t-elle bien ? Compare, sur les mêmes carrés, l’arrivée estimée par les roues seules et par robot_localization (roues + IMU). Ne modifie rien |
|
recalcule une mesure, en montrant d’abord les carrés retenus ;
|
|
écrit dans la carte les réglages d’une campagne de ce robot, après accord. Il montre pour chacun la valeur pendant la mesure, la valeur actuelle et la valeur proposée ; il prévient si la carte a changé depuis la mesure (l’appliquer déferait une correction plus récente), dit si les valeurs sont déjà dans la carte, et refuse une campagne de simulation sur un vrai robot |
|
met de côté une campagne ratée, dans |
Sur ratbot-1, stats donne :
date mesure carres cote E_max,syst evolution avec IMU reglages
2026-10-03 roues 10 + 5 1.3 m 86.7 mm -- corriges le 2026-10-04
2026-10-04 roues 6 + 6 1.3 m 57.6 mm -34 % --
La colonne avec IMU donne l’erreur estimée par robot_localization sur les mêmes carrés. Elle reste vide pour ces deux campagnes, antérieures à l’enregistrement de cette estimation.
L’IMU pendant une mesure UMBmark
Une mesure UMBmark n’utilise pas l’IMU. Pendant un carré, le robot se guide uniquement sur ses roues : ce sont elles qui lui disent quand tourner. Et les corrections calculées à la fin ne viennent que des roues et de votre mesure au sol.
robot_localization, qui fusionne les roues et l’IMU, tourne de toute façon sur le robot, en permanence. Pendant le carré, il ne conduit pas : il calcule seulement, de son côté, où il pense que le robot se trouve. Le script note ce résultat à la fin du carré, sans rien en faire d’autre.
Cela permet une vérification gratuite : à la fin de chaque mesure, le script compare trois positions d’arrivée — celle que croient les roues, celle que croit robot_localization, et la vraie, mesurée au mètre ruban. Si robot_localization est plus près de la vérité, l’IMU fait bien son travail ; s’il en est plus loin, son gyroscope est à calibrer (voir Calibrer le gyroscope). Un exemple de cette comparaison, et sa lecture, sont dans Lire les résultats, ci-dessous.
Dans tous les cas, cette comparaison ne change rien au résultat UMBmark ni aux réglages proposés.
En simulation
La calibration guidée fonctionne aussi en simulation, pour apprendre l’enchaînement sans robot. Le script la reconnaît d’elle-même, et :
range les mesures dans des dossiers suffixés
_simulation;n’écrit jamais rien dans une carte : la fin d’une mesure affiche les réglages proposés, puis s’arrête ;
statsignore ces mesures, qui ne disent rien du vrai robot ;listles montre, marquées « (simulation) » ;applyrefuse d’écrire une campagne de simulation dans un vrai robot.
Les mesures au sol y sont fictives : seule la mécanique de l’outil s’y vérifie.
Lire les résultats
Le tableau de stats — exemple, valeurs d’illustration :
date mesure carres cote E_max,syst evolution avec IMU reglages
2026-11-02 roues 5 + 5 1.2 m 84.0 mm 61.0 mm corriges le 2026-11-02
2026-11-03 roues 5 + 5 1.2 m 55.0 mm -35 % 38.0 mm
2027-02-10 roues 5 + 5 1.2 m 59.0 mm +7 % 40.0 mm
Colonne |
Ce qu’elle veut dire |
|---|---|
E_max,syst |
l’erreur systématique des roues, celle que la calibration peut corriger. C’est le chiffre à suivre : plus il est bas, mieux c’est |
evolution |
l’écart avec la mesure précédente. Après une correction, il doit être négatif. « autre côté » : les deux mesures n’ont pas la même taille de carré, et ne se comparent pas (cas d’anciennes mesures ; la calibration guidée l’empêche désormais) |
avec IMU |
la même erreur, estimée par robot_localization (roues + IMU) sur les mêmes carrés. Elle doit être plus basse que celle des roues |
reglages |
le jour où les corrections de cette mesure ont été écrites dans la carte. Sans date : la mesure n’a rien changé (un contrôle) |
Ce que dit l’exemple, ligne par ligne :
le 2 novembre, première mesure : 84 mm. Les corrections sont écrites ;
le 3 novembre, nouvelle mesure avec les réglages corrigés : 55 mm, soit 35 % d’erreur en moins. La calibration a marché ;
en février, un contrôle sans correction : 59 mm. L’erreur a un peu remonté, mais reste loin des 84 mm de départ : rien à faire. Une remontée vers la valeur de départ, elle, appellerait une nouvelle calibration (sol différent, roue usée, roue remontée).
Sur toutes les lignes, la colonne avec IMU reste sous E_max,syst : l’IMU améliore bien la position.
La comparaison de l’IMU, à la fin de chaque mesure (ou avec compare) :
E_max,syst erreur moyenne
roues seules 55.0 mm 41.0 mm
robot_localization (roues + IMU) 38.0 mm 29.0 mm
avec l'IMU : -31 % -- l'IMU AMELIORE la position (10 carres)
E_max,syst : l’erreur systématique, la même que dans
stats;erreur moyenne : la distance moyenne entre l’arrivée estimée et la vraie, sur un carré. Elle contient en plus les erreurs accidentelles (glissade, bosse) ;
la dernière ligne donne l’écart en pourcentage, et le verdict :
Verdict |
Que faire |
|---|---|
l’IMU AMÉLIORE la position (moins de −5 %) |
rien : le gyroscope est bien réglé |
pas de différence nette (entre −5 % et +5 %) |
rien d’urgent ; sur peu de carrés, la différence peut se perdre dans la dispersion. Vérifier l’échelle du gyroscope à l’occasion |
l’IMU DÉGRADE la position (plus de +5 %) |
calibrer le gyroscope : |
Les sections suivantes détaillent chaque étape, et donnent les commandes pour la conduire à la main.
Préparer la session
Une seule fois, au début :
cd ~/ratbot_ws/ros2_ws
source /opt/ros/humble/setup.bash
source install/setup.bash
export ROS_DOMAIN_ID=77
# Où ranger cette campagne : un répertoire par campagne, daté
export OUT=~/ratbot_ws/cahier_de_labo/campagnes/$(date +%F)_avant
Notez le commit du firmware flashé sur la carte : il sera inscrit dans chaque essai, et c’est lui qui prouve que toute la campagne a tourné sur la même version. Sur la machine qui a compilé et flashé le firmware :
git log -1 --format=%h -- firmware/
Avertissement
Pas git rev-parse HEAD sur le Raspberry Pi : c’est le commit de son
dépôt, pas celui du firmware de la carte. Les deux diffèrent dès qu’on a
commité autre chose depuis le flash — et la campagne porterait alors un
numéro qui ne dit rien de ce qui roulait.
Laissez enfin le robot immobile une dizaine de secondes après l’avoir posé : il en profite pour remesurer le zéro de son gyroscope (voir Calibrer le gyroscope).
Lancer un carré
Un carré antihoraire complet sur ratbot-1, accéléré trois fois.
ros2 run ratbot_calibration umbmark-run --robot 1 --path square_ccw \
--side 1.2 --out $OUT --name ccw_01 --firmware cb83d48
Ce qui se passe, dans l’ordre :
Le repère et le sens du parcours s’affichent.
Le programme attend que vous posiez le robot sur le L, puis Entrée.
Le robot fait tout le carré d’une traite : quatre côtés, quatre virages, avec un court arrêt entre chaque. Il ne vous demande rien en route.
Au retour, il vous annonce où il croit être arrivé.
Il vous demande x, puis y — une valeur à la fois, en centimètres, avec le signe ; la virgule ou le point conviennent pour les décimales. Puis il vous relit votre mesure en clair pour confirmation.
Tout est écrit dans un
summary.yaml, à côté de l’enregistrement complet.
Seule l’arrivée se mesure. Les erreurs des quatre côtés et des quatre virages s’accumulent toutes dans ce point d’arrivée : c’est tout l’intérêt de la méthode.
Astuce
Protection contre les fautes de frappe. Si la mesure que vous tapez est à plus de 30 cm de ce que croit le robot, l’outil vous prévient et vous propose de la ressaisir — les vrais écarts restent bien en dessous. Un « 109 » tapé pour « 21 » est ainsi rattrapé avant d’entrer dans les résultats.
Avertissement
Ne bousculez pas le robot pendant un essai. À l’arrêt, une roue peut se trouver dans l’angle mort de son capteur : si votre main la fait tourner, la carte ne le voit pas et la suite de l’essai sera fausse.
Entre deux carrés, vous pouvez le soulever et le replacer librement : ni l’arrêt automatique pour choc, ni celui pour patinage ne se déclenchent quand on manipule un robot arrêté. Reposez-le, puis laissez-le quelques secondes immobile avant d’appuyer sur Entrée.
Options utiles :
Option |
Effet |
|---|---|
|
où écrire l’essai (par défaut : le répertoire courant) |
|
côté du carré, en mètres (voir Quelle taille de carré : toujours le même pour un robot) |
|
s’arrêter à chaque coin pour poser un repère au sol. Par défaut, le carré se fait d’une traite : seule l’arrivée entre dans le calcul |
|
ne pas demander la mesure au sol |
|
piloter le robot sur l’odométrie fusionnée (roues + gyroscope) au lieu des roues seules. Voir Odométrie seule ou fusionnée plus bas |
|
le commit du firmware flashé, inscrit dans chaque essai (voir Préparer la session) |
La campagne complète
Cinq carrés antihoraires, en changeant seulement le nom :
ros2 run ratbot_calibration umbmark-run --robot 1 --path square_ccw \
--side 1.2 --out $OUT --name ccw_01 --firmware cb83d48
# puis ccw_02, ccw_03, ccw_04, ccw_05
Puis déplacez le L et faites cinq carrés horaires :
ros2 run ratbot_calibration umbmark-run --robot 1 --path square_cw \
--side 1.2 --out $OUT --name cw_01 --firmware cb83d48
# puis cw_02 ... cw_05
Vous pouvez faire une pause entre les deux séries.
Si vous avez le temps, plus de carrés vaut mieux : un petit robot à servomoteurs a des erreurs aléatoires importantes (une roue qui démarre un peu avant l’autre, un virage qui déborde), et la méthode les moyenne. Sur RatBot, dix carrés dans un sens ont été nécessaires pour s’assurer qu’un écart inhabituel n’était qu’une dispersion normale.
Un essai raté
Vous l’avez interrompu (Ctrl-C), ou il s’est arrêté seul : il n’a pas de
summary.yamlou porteaborted. L’analyse l’ignore toute seule. Rangez-le quand même à part, avec la raison :mkdir -p $OUT/_exclus && mv $OUT/20261004_120346_cw_01 $OUT/_exclus/
Vous voulez refaire un essai : relancez-le, sous le même nom ou un autre. Chaque essai a son propre répertoire, préfixé par l’heure : rien n’est jamais écrasé.
Vous avez mal saisi une mesure et vous connaissez la bonne : corrigez-la dans le
summary.yamlen gardant la trace — recopiez l’ancien blocmeasuredsous le nommeasured_as_entered, puis corrigezmeasuredet ajoutez une lignecorrectionqui dit qui a corrigé, quand et pourquoi. Notez-le aussi dans votre cahier.
Important
Rien ne doit changer pendant une campagne : ni le firmware, ni les paramètres, ni la hauteur des roues, ni le sol. Dix essais répartis sur deux versions ne se moyennent pas — ils ne mesurent plus rien.
Avant de commencer, mettez de côté les réglages de la carte — voir Les paramètres du robot :
./scripts/ratbot config 1 save avant_campagne.yaml
Vérifier un sens avant de se lancer
Si vous avez un doute sur le sens de rotation ou sur la place disponible, un seul quart de tour suffit à le lever :
ros2 run ratbot_calibration umbmark-run --robot 1 --path turn_cw
Cela évite de découvrir un problème au troisième carré.
Ce que produit chaque essai
Un répertoire horodaté contenant l’enregistrement complet (rosbag2) et un
summary.yaml :
path: square_ccw
firmware: cb83d48
aborted: null
odometry_end:
x_m: 0.0611
y_m: -0.0509
yaw_deg: 1.07
measured:
x_cm: 6.5
y_cm: -4.5
notes: ''
odometry_end est ce que croyait le robot, measured ce que vous avez
mesuré. Tout le reste de la méthode se calcule à partir de ces deux blocs.
Note
Si aborted n’est pas null, l’essai s’est interrompu — le plus souvent
parce que la liaison avec la carte est tombée. Ne le comptez pas, et
refaites-le.
Calculer les corrections
Une fois les dix essais faits, un seul outil lit toute la campagne :
ros2 run ratbot_calibration umbmark-analyze $OUT \
--config ~/ratbot_ws/cahier_de_labo/config/ratbot1.yaml \
--out $OUT/resultat.yaml
Le --config lui donne la géométrie actuelle du robot ; à défaut, passez
--wheelbase et --radius à la main. Le --out range le résultat à côté
de la campagne — gardez-le, c’est lui que vous comparerez plus tard.
Il affiche d’abord quels essais il retient et lesquels il écarte, puis :
Centres of gravity of the return errors [mm]
clockwise x -135.5 y -133.4 radius 190.2
counter-clockwise x +10.2 y -9.1 radius 13.7
E_max,syst = 190.2 mm
The two error sources
beta = +2.0648 deg straight legs curve; the wheels
differ by Ed = 1.00506 (right / left diameter)
alpha = +1.7873 deg turns miss 90 deg; the real
wheelbase is Eb = 1.02026 times the assumed one
Settings to write into the board
wheel_radius_left 0.025934 (was 0.026000)
wheel_radius_right 0.026066 (was 0.026000)
wheel_separation 0.142837 (was 0.140000)
Appliquer les corrections
Reprenez les trois valeurs affichées par l’outil — celles ci-dessous sont l’exemple, pas les vôtres.
cd ~/ratbot_ws
# TOUJOURS, avant de changer quoi que ce soit -- voir :doc:`parametres`
./scripts/ratbot config 1 save cahier_de_labo/config/ratbot1_avant_calibration.yaml
ros2 param set /ratbot_1/ratbot_controller wheel_radius_left 0.025934
ros2 param set /ratbot_1/ratbot_controller wheel_radius_right 0.026066
ros2 param set /ratbot_1/ratbot_controller wheel_separation 0.142837
./scripts/ratbot config 1 save cahier_de_labo/config/ratbot1.yaml \
--origin "campagne UMBmark $(date +%F)"
Note
L’écriture en flash est temporisée de 3 secondes pour l’épargner. Laissez passer quelques secondes avant de couper le robot, sinon la dernière valeur n’est pas enregistrée.
La sauvegarde, la restauration et le détail de chaque réglage sont décrits dans Les paramètres du robot.
Vérifier le résultat
Refaites les dix mêmes essais, sans rien recalculer. C’est cette seconde campagne qui prouve quelque chose ; la première ne faisait que mesurer.
Danger
Rangez-la dans un répertoire NEUF.
export OUT=~/ratbot_ws/cahier_de_labo/campagnes/$(date +%F)_apres
Si vous la mettez dans le répertoire de la première, l’outil trouvera vingt essais et moyennera l’avant avec l’après. Le résultat serait lisse, crédible, et entièrement faux.
L’outil se défend : chaque essai enregistre la géométrie avec laquelle il a roulé, et l’analyse refuse de mélanger deux géométries. Mais ne comptez pas dessus — rangez proprement.
Puis relancez l’analyse sur la nouvelle campagne et comparez E_max,syst :
ros2 run ratbot_calibration umbmark-analyze $OUT \
--config ~/ratbot_ws/cahier_de_labo/config/ratbot1.yaml \
--out $OUT/resultat.yaml
grep e_max_syst_mm ~/ratbot_ws/cahier_de_labo/campagnes/*/resultat.yaml
Astuce
Dans l’article d’origine, E_max,syst passe de 317 mm à 21 mm sur un carré de 4 m : un facteur 15. C’est l’ordre de grandeur à espérer.
Si le chiffre ne baisse pas, ne recalculez pas de nouveaux coefficients par-dessus : c’est le signe que l’erreur dominante n’est pas systématique (sol glissant, roue mal serrée, robot bousculé) et qu’aucun coefficient ne la corrigera.
Sur RatBot, à titre d’exemple (carré de 1,3 m, octobre 2026) : E_max,syst est passé de 86,7 mm à 57,6 mm, soit un tiers de moins. Loin du facteur 15 de l’article : sur un petit robot à servomoteurs, les erreurs aléatoires pèsent autant que les erreurs systématiques, et la méthode ne corrige que les secondes.
Une seconde itération est justifiée dans un cas précis : E_max,syst a baissé, mais alpha ou bêta a changé de signe — la correction est allée trop loin. L’analyse de la campagne « après » propose alors de nouvelles valeurs, à partir des réglages en place : appliquez-les, puis refaites une campagne de vérification, dans un troisième répertoire.
Odométrie seule ou fusionnée avec le gyroscope
En navigation, le robot ne se fie pas qu’à ses roues : l’EKF y fusionne le gyroscope. Pour savoir ce que la fusion apporte, rejouez une campagne :
ros2 run ratbot_calibration umbmark-fusion $OUT --out $OUT/fusion.yaml
Pour chaque essai, l’outil compare à votre mesure au sol l’arrivée estimée par les roues seules et par les roues + gyroscope, sur le même parcours.
Important
Le gyroscope doit être calibré lui aussi (voir Calibrer le gyroscope). Mesuré sur RatBot : avec un zéro mal réglé, la fusion faisait 30 cm d’erreur au lieu de 7 ; et tant que son échelle n’est pas vérifiée, elle ne bat pas les roues calibrées.
Ce rejeu estime ce que la fusion aurait donné. Pour le vérifier en vrai, faites une campagne fusionnée : les mêmes dix carrés, mais le robot se pilote sur l’odométrie fusionnée, comme il le fera en navigation.
ros2 run ratbot_calibration umbmark-run --robot 1 --path square_ccw \
--side 1.2 --odom fused --out $OUT_FUSION --name ccw_01 \
--firmware COMMIT
Mettez-la dans son propre répertoire : l’analyse refuse de mélanger des essais roues seules et fusionnés.
Au départ, l’outil remet à zéro l’odométrie des roues et celle de l’EKF. Chaque essai enregistre les deux, et le résumé dit aussi où l’autre croyait finir (
witness_end).L’analyse donne l”E_max à comparer avec celui de la campagne roues seules. Elle ne propose pas de nouvelle géométrie de roues : le gyroscope est dans la boucle, le calcul n’aurait plus de sens.
Garder la trace
Pour chaque campagne, conservez ensemble :
le répertoire des dix essais, avec leurs
summary.yaml;le
resultat.yamlde l’analyse ;le fichier de configuration produit par
ratbot config save(voir Les paramètres du robot).
Les trois se suffisent : ils disent ce que le robot croyait, ce que vous avez mesuré, ce qu’on en a déduit, et ce qui a été appliqué.
En cas de souci
Symptôme |
Piste |
|---|---|
|
L’agent micro-ROS ne tourne pas, ou le |
|
La remise à zéro de l’odométrie au départ a été ignorée. Relancez l’essai ; si le problème persiste, redémarrez la pile du robot |
|
La liaison avec la carte est tombée en cours d’essai. Refaites-le, et regardez le journal de bord (Journal de bord). |
Le robot part du mauvais côté |
Le L est au mauvais coin. Revoyez Où poser le robot. |
Les mesures ne retombent jamais pareil |
Sol glissant ou irrégulier, ou robot bousculé pendant les arrêts. |
Le robot ne bouge pas du tout |
Arrêt d’urgence enclenché. Voir Voyant et sons — voyant rouge clignotant. |
Le robot s’arrête en cours de carré, voyant orange |
L’arrêt automatique s’est déclenché : 6 bips longs puis 3 courts pour un patinage, 4 pour un choc. Réarmez (5 appuis sur SW1, voir Arrêter et relancer le robot), regardez ce qui a pu se passer (sol glissant, obstacle), et refaites l’essai. |
|
La mesure tapée est très loin de ce que croit le robot : faute de frappe probable. Répondez n et ressaisissez. |
Le robot met plus de 15 s à partir après Entrée |
Il lit les réglages de la carte avant de partir ; normalement une fraction de seconde. Une version ancienne de l’outil attendait jusqu’à 15 s quand la carte ne répondait pas : mettez à jour le Raspberry Pi. |
Comment lire ça
E_max,syst est le chiffre de la méthode : la précision systématique de votre odométrie, en millimètres. C’est lui qu’on compare avant et après.
bêta dit que les lignes droites se courbent, parce que les roues n’ont pas le même diamètre. alpha dit que les virages ne font pas 90°, parce que l’entraxe réel diffère. Les deux dernières lignes sont les réglages à écrire.
Note
L’outil refuse de conclure si la campagne mélange deux firmwares ou deux tailles de carré, et si un seul sens de rotation est exploitable. Ce ne sont pas des caprices : dans ces trois cas le résultat n’aurait aucun sens.
Il peut aussi afficher
NOTE: geometry not recorded for ...: la géométrie de la carte n’a pas pu être lue pour certains essais. Il les garde seulement si tous les autres essais et le fichier--configdonnent la même géométrie.