Mettre en service un nouveau robot

S’applique à : 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.

# 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 :

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 :

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 :

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 :

ros2 param set /ratbot_2/ratbot_controller dxl_id_left  <gauche>
ros2 param set /ratbot_2/ratbot_controller dxl_id_right <droite>

Voir Les paramètres du robot pour ces réglages et leurs limites.

☐ 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 :

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 Diagnostics).

Avertissement

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 (Calibrer l’odométrie).

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 Installer le Raspberry Pi) — 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 Installer le Raspberry Pi).

☐ 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 :

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 Voyant et sons).

☐ Depuis le PC, le robot répond sous son nom, et pas un autre :

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 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 Arrêter et relancer le robot).

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 Calibrer l’odométrie).

☐ Mesurer l’échelle du gyroscope (voir Calibrer le gyroscope) : ./scripts/ratbot-calibrate 2 gyro. Le zéro, lui, est automatique.

☐ Vérifier le montage du lidar (voir Le 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 :

./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.