Mettre en service un nouveau robot ================================== **S'applique à :** :bdg-warning-line:`Robot réel` La liste de contrôle complète, **dans l'ordre**, pour qu'un robot neuf rejoigne le parc. Chaque étape renvoie à la page qui la détaille ; cochez au fur et à mesure. Les exemples prennent **ratbot-2**. Remplacez 2 par le numéro de votre robot. .. danger:: **Une carte neuve se croit ratbot-1.** Le ``ratbot_controller`` démarre avec le numéro 1 tant qu'on ne lui en a pas donné un autre, et tous les robots du parc partagent le même réseau ROS (domaine 77, fixé dans le firmware). Allumée à côté du vrai ratbot-1, elle **se fait passer pour lui** : une commande destinée à ratbot-1 peut faire rouler les deux robots. Tant que l'étape 2 n'est pas faite, **ratbot-1 reste éteint**. 1. Le matériel -------------- ☐ **Les deux roues ont des identifiants différents.** Un AX-18A sort d'usine avec l'identifiant 1, et la carte refuse deux roues portant le même. Changez celui d'un des deux moteurs **avant** de les monter, avec un adaptateur USB Dynamixel et son logiciel. Notez lequel est à gauche, lequel à droite. ☐ **La centrale inertielle est montée comme sur ratbot-1** : à l'envers, à 45 mm derrière l'axe des roues, centrée. La description du robot et la sécurité de renversement supposent ce montage ; monté autrement, le robot se croirait renversé ou tournerait à l'envers. ☐ **Le lidar est à l'aplomb de la centrale, orienté comme sur ratbot-1**, et son câble USB branché sur la Raspberry. Sur ratbot-1, il est monté d'un demi-tour, et la description du robot, commune à tous, le suppose : un lidar tourné autrement donnerait une carte à l'envers. L'étape 5 le vérifie. 2. La carte du robot -------------------- ☐ **Flasher le firmware** de la carte, le même que celui des autres robots. Depuis la racine du dépôt, sur le PC, la sonde ST-Link branchée sur la carte et la carte alimentée. Une carte **neuve** demande deux opérations : le petit chargeur d'amorçage dans la flash interne du microcontrôleur (une fois pour toutes), puis le firmware dans la flash externe. .. code-block:: bash # compiler le firmware make -C firmware/ratbot_firmware_card -j8 # le firmware -> flash externe (QSPI) STM32_Programmer_CLI -c port=SWD mode=UR \ -el /home/hdd/tmp/MiniSTM32H7xx/SDK/QSPI_Flasher/STM32H7xx_W25Q128_WeActStudio.stldr \ -d firmware/ratbot_firmware_card/build/uROSProjet.bin 0x90000000 -v # le chargeur d'amorçage -> flash interne (carte neuve seulement) make -C firmware/ratbot_bootloader flash # TOUJOURS finir par un reset logiciel STM32_Programmer_CLI -c port=SWD mode=HOTPLUG -rst Le chemin du fichier ``.stldr`` est celui du PC du laboratoire : c'est un greffon de STM32CubeProgrammer qui lui apprend à écrire dans la flash externe (dépôt `WeActStudio/MiniSTM32H7xx `_, dossier ``SDK/QSPI_Flasher/``). .. danger:: **Jamais** ``-hardRst`` : il laisse la flash externe dans un état que le chargeur d'amorçage ne sait pas reprendre, et la carte plante dès sa première instruction, alors que le firmware est parfaitement écrit. Pour vérifier que la carte démarre bien sur le firmware : .. code-block:: bash STM32_Programmer_CLI -c port=SWD mode=HOTPLUG -r32 0xE000ED08 0x4 # 0x90000000 : la carte exécute le firmware depuis la flash externe # 0x08000000 : le chargeur d'amorçage n'a pas lancé le firmware Les détails sont dans la documentation développeur, page *Bootloader*. **Débranchez la sonde** avant de faire rouler le robot. ☐ **Lui donner son numéro**, ratbot-1 éteint. Depuis la Raspberry du robot, ou depuis le PC : .. code-block:: bash ros2 param set /ratbot_1/ratbot_controller robot_id 2 Le numéro est enregistré dans la carte, mais ne s'applique qu'au **prochain démarrage** : éteignez le robot, rallumez-le, et vérifiez : .. code-block:: bash ros2 node list | grep ratbot_controller # /ratbot_2/ratbot_controller À partir de là, ratbot-1 peut être rallumé. ☐ **Lui donner les identifiants de ses roues**, ceux notés à l'étape 1 : .. code-block:: bash ros2 param set /ratbot_2/ratbot_controller dxl_id_left ros2 param set /ratbot_2/ratbot_controller dxl_id_right Voir :doc:`parametres` pour ces réglages et leurs limites. .. _roues-xl430: ☐ **Si les roues sont des XL430-W250**, et non des AX-18A. Les deux sont possibles ; ils ne parlent pas le même protocole (2.0 contre 1.0) et un bus n'en porte qu'un. Avant le montage, avec l'adaptateur USB et le logiciel Dynamixel Wizard 2, pour **chaque** moteur : - un identifiant différent (un XL430 sort d'usine avec le 1, lui aussi) ; - le débit **1 Mbps** (``Baud Rate`` = 3) : il sort d'usine à 57 600. Puis dire à la carte quels moteurs elle a, et redémarrer : .. code-block:: bash ros2 param set /ratbot_2/ratbot_controller wheel_servo_model 1060 Au démarrage, la carte met elle-même les moteurs en mode vitesse. Si aucune roue ne répond, le bloc ``dynamixel bus`` des diagnostics dit ce qu'elle a trouvé sur les deux connecteurs : ``conn2 id1 57k p2``, par exemple, est un XL430 encore à son identifiant et à son débit d'usine (voir :doc:`diagnostics`). .. warning:: **Le XL430 n'a pas encore roulé sur un RatBot.** Son support a été écrit et testé au banc, sans moteur. Deux points sont à vérifier à la première mise en service : - sa tension maximale est **12 V**, et une batterie 3S pleine en donne 12,6 ; - à vide, il tourne à 57 tr/min sous 11,1 V, contre 97 pour l'AX-18A : avec les roues actuelles, environ **0,15 m/s** au lieu de 0,19. Régler ``max_linear`` en conséquence. Changer de moteurs change aussi la géométrie : **refaire la calibration** des roues (:doc:`calibration`). 3. La Raspberry --------------- ☐ **Écrire la carte SD** (Raspberry Pi Imager, Ubuntu 22.04), avec le WiFi renseigné dans l'imageur et le compte ``ratbot`` au mot de passe par défaut (voir :doc:`installation_robot`) — ou **cloner** celle d'un autre robot. ☐ **Changer le mot de passe** (``passwd``) et **installer la clé SSH du PC** (``ssh-copy-id ratbot@192.168.1.172``) : ``ratbot fleet`` en a besoin. ☐ **Installer ROS 2 Humble**, puis cloner le dépôt dans ``~/ratbot_ws``. ☐ **Prévoir du swap** si la Raspberry a 4 Go : la première compilation de l'agent micro-ROS ne tient pas dans la mémoire seule. ``free -h`` doit en montrer. L'installation le vérifie, et s'arrête avant de compiler s'il manque. ☐ **Écrire sa fiche d'identité**, ``ratbot2.yaml``, en copiant ``deploy/ratbot.example.yaml`` (voir :doc:`installation_robot`). ☐ **Lancer l'installation**, lidar branché et Raspberry reliée à Internet. Elle récupère aussi les sources de l'agent micro-ROS, qui n'existe pas en paquet : .. code-block:: bash cd ~/ratbot_ws ./scripts/ratbot install ratbot2.yaml --dry-run ./scripts/ratbot install ratbot2.yaml sudo reboot ./scripts/ratbot install ratbot2.yaml # vérifie que tout a pris 4. Premier démarrage -------------------- ☐ Le robot allumé, le **voyant passe au bleu** (voir :doc:`signaux`). ☐ Depuis le PC, le robot répond sous son nom, et pas un autre : .. code-block:: bash ros2 node list | grep ratbot_2 # ratbot_controller, twist_mux, ... ros2 topic hz /ratbot_2/scan # le lidar : environ 6 Hz ☐ **Les diagnostics sont propres** : ni erreur ni avertissement dans les blocs ``ratbot_2: …`` (voir :doc:`diagnostics`). ☐ **Les roues tournent dans le bon sens.** Robot **posé sur sa boîte**, roues dans le vide, une courte commande vers l'avant à la manette : les deux roues doivent partir vers l'avant. Une roue à l'envers, ou une roue qui ne bouge pas, se règle à l'étape 2 — identifiants intervertis ou erronés. ☐ **Les sécurités répondent** : arrêt d'urgence, puis réarmement (voir :doc:`arrets`). 5. La calibration ----------------- Chaque robot a ses propres défauts : **rien ne se recopie d'un robot à l'autre.** ☐ **Calibrer l'odométrie** avec UMBmark (``./scripts/ratbot-calibrate 2 umbmark``) : la campagne « avant », la correction, puis la campagne de vérification (voir :doc:`calibration`). ☐ **Mesurer l'échelle du gyroscope** (voir :doc:`gyroscope`) : ``./scripts/ratbot-calibrate 2 gyro``. Le zéro, lui, est automatique. ☐ **Vérifier le montage du lidar** (voir :doc:`lidar`) : à faire **avant** la première carte, qui serait sinon construite à l'envers. La calibration guidée enchaîne les deux tests : ``./scripts/ratbot-calibrate 2 lidar``. ☐ **Sauvegarder la configuration** obtenue, qui servira de référence : .. code-block:: bash ./scripts/ratbot config 2 save cahier_de_labo/config/ratbot2.yaml \ --origin "mise en service $(date +%F)" 6. Le registre -------------- ☐ Noter au cahier de labo : la date, le commit du firmware flashé, les identifiants des roues, la version du lidar (affichée au démarrage du pilote), et les résultats de calibration. ☐ Étiqueter le robot de son numéro, **sur le châssis et sur la carte SD**.