Le lidar

S’applique à : Robot réel

Le lidar mesure les distances tout autour du robot ; la cartographie et la navigation en dépendent entièrement. Cette page décrit son fonctionnement sur le robot, puis la vérification de son montage, à faire une fois par robot.

Le lidar sur le robot

Le RPLidar A1 démarre avec le robot : le service ratbot lance son pilote, qui publie /ratbot_N/scan — le même nom qu’en simulation.

  • Son nom stable /dev/ratbot_lidar est posé par ratbot install (voir Installer le Raspberry Pi). Branchez le lidar avant l’installation ; s’il ne l’était pas, rejouez seulement cette étape, lidar branché :

    ./scripts/ratbot install fiche.yaml --only lidar
    
  • Le moteur est piloté par le logiciel : branché seul, le lidar tourne ; le pilote règle ensuite sa vitesse, et l’arrête quand il s’arrête. Un lidar immobile robot allumé signifie que le pilote ne tourne pas.

  • Cadence : environ 6,5 tours par seconde sur ratbot-1 (contre 10 en simulation). Roulez donc plus lentement pendant une cartographie.

  • Le relais ratbot_scan_fix : ce lidar (firmware 1.20) ne renseigne pas sa portée maximale, et sans correction, les cartes de coût, AMCL et slam_toolbox jetteraient toutes ses mesures. Le relais remet 12 m — la portée de l’A1 — et ne touche à rien d’autre. Le pilote publie scan_raw, le relais scan.

Pour vérifier qu’il tourne, sur le Raspberry Pi du robot :

ls -l /dev/ratbot_lidar                       # -> ttyUSB0

puis, depuis le PC ou le Raspberry Pi :

ros2 topic hz /ratbot_1/scan                  # ≈ 6,5 Hz
ros2 topic echo --once /ratbot_1/scan --field range_max    # 12.0

Vérifier le montage

Pour placer ses mesures, le robot doit savoir comment le lidar est monté : dans quel sens il regarde, et où il est. S’il se trompe de sens, la carte se construit à l’envers par rapport au robot, sans aucun message d’erreur. C’est arrivé sur ratbot-1 : son lidar était monté d’un demi-tour par rapport à ce que croyait le robot, et une boîte posée devant lui apparaissait derrière.

À faire une fois par robot, à sa mise en service (voir Mettre en service un nouveau robot), et après tout démontage du lidar.

Ce qu’il vous faut

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

  • une boîte, ou tout objet de 5 à 20 cm de large ;

  • pour le second test, un mur droit et nu d’au moins un mètre ;

  • un terminal sur le PC ou 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 lidar

Le script vérifie que le robot répond et que rien d’autre ne le pilote, explique chaque étape, enchaîne les deux tests ci-dessous et range leurs résultats dans cahier_de_labo/campagnes/, un dossier par jour et par robot. Il ne propose le test 2 que si le test 1 est bon, et le robot ne tourne qu’après un « o » tapé par vous.

Les sections suivantes détaillent les deux tests et leurs résultats ; elles donnent aussi les commandes pour les lancer un par un.

Test 1 — le sens, robot immobile

ros2 run ratbot_calibration lidar-check --robot 1 --test static \
    --out ~/calibration_lidar
  1. Posez la boîte devant le robot, à 20 à 40 cm, rien d’autre à moins de 80 cm. Appuyez sur Entrée.

  2. Déplacez-la à gauche du robot, à la même distance. Entrée.

Le robot ne bouge pas. Un placement à quelques centimètres près suffit : ce test ne cherche que le quart de tour.

Résultat

Ce qu’il veut dire

OK

le lidar regarde là où le robot le croit

WRONG

il est monté tourné d’un quart ou d’un demi-tour par rapport à la description du robot : l’outil dit de combien. Corrigez la description (laser_joint), voir la documentation développeur

SWAPPED

gauche et droite sont inversées : lidar monté à l’envers, tête en bas. La description ne peut pas corriger ce défaut : remontez-le

inconclusive

les deux positions ne sont pas à un quart de tour l’une de l’autre : la boîte a-t-elle bien été posée à gauche ? Recommencez

Test 2 — la position, en tournant

ros2 run ratbot_calibration lidar-check --robot 1 --test turn \
    --out ~/calibration_lidar
  1. Posez le robot par terre, un mur droit sur sa gauche, à 30 à 60 cm. 20 cm de libre autour de lui. Appuyez sur Entrée.

  2. Le robot tourne de 90° à gauche sur place, lentement (une dizaine de secondes), et s’arrête face au mur.

L’outil mesure la face du mur avant et après le virage :

  • la rotation vue par le lidar doit être celle que compte le robot (son odométrie fusionnée avec le gyroscope) ;

  • la distance au mur doit être la même avant et après. Si elle change, c’est que le lidar n’est pas, le long du robot, là où le robot le croit.

Exemple de sortie (valeurs d’illustration) :

turn seen by the lidar 89.9 deg, by the EKF 89.7 deg (wheels 90.4)
distance to the wall 47.4 cm before, 47.6 cm after
RESULT: rotation OK
RESULT: position OK

Important

Choisissez un vrai mur, long, nu et plat. Un meuble en plusieurs éléments, une plinthe ou une porte faussent la mesure : l’outil le signale (« points scatter … mm »). Sur ratbot-1, contre un meuble, la rotation vue par le lidar différait de 2,2° de celle du robot ; contre un vrai mur, de 0,8° seulement.

Si le robot était posé parallèle au mur, l’outil donne aussi la petite correction d’orientation du lidar, au degré près. Sinon, ignorez cette ligne : elle confond alors le montage du lidar et votre placement.

Chaque test écrit un fichier …_lidar_static.yaml ou …_lidar_turn.yaml dans le dossier --out. Gardez-les avec les autres résultats de calibration du robot.

En cas de souci

« FAILED: no transform base_link -> laser_link »

La pile du robot ne tourne pas, ou le PC n’est pas sur le même réseau ROS (ROS_DOMAIN_ID=77).

« nothing within 80 cm of the lidar »

La boîte est trop loin, ou trop petite.

« no straight surface found »

Pas de mur assez droit et assez proche du côté attendu : à gauche avant le virage, devant après.

Le robot s’arrête en orange pendant le virage

Une sécurité s’est déclenchée, souvent le patinage sur un sol glissant. Réarmez (voir Arrêter et relancer le robot) et recommencez.