Le lidar ======== **S'applique à :** :bdg-warning-line:`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 :doc:`installation_robot`). **Branchez le lidar avant l'installation** ; s'il ne l'était pas, rejouez seulement cette étape, lidar branché : .. code-block:: bash ./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 : .. code-block:: bash ls -l /dev/ratbot_lidar # -> ttyUSB0 puis, depuis le PC ou le Raspberry Pi : .. code-block:: bash 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 :doc:`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 : .. code-block:: bash ./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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: bash 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. .. list-table:: :header-rows: 1 :widths: 35 65 * - 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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: bash 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) : .. code-block:: text 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 :doc:`arrets`) et recommencez.