Piloter le robot

S’applique à : Simulation Robot réel

Le robot se pilote au clavier, à la manette ou par programme, de la même façon en simulation et sur le robot réel. Les commandes se lancent sur le PC, le robot étant démarré (voir Démarrer).

Important

Avant de faire rouler un robot réel, sachez l’arrêter : voir Arrêter et relancer le robot.

La vitesse est plafonnée à 0,18 m/s en ligne droite et 1,5 rad/s en rotation, quelle que soit la commande, en simulation comme sur le robot réel.

À la manette

C’est la façon recommandée : une manette de type DualShock 4, branchée en USB sur le PC. Depuis la racine du dépôt :

./scripts/ratbot joy

La commande vérifie d’abord que la manette est branchée, puis rappelle les gestes ci-dessous. Elle équivaut à ros2 launch ratbot_bringup joy_fleet.launch.py.

Une seule manette pilote ainsi jusqu’à quatre robots : la gâchette que l’on tient désigne le robot qui bouge.

geste

effet

L1 tenue + stick gauche

pilote le robot 1, en vitesse lente (6 cm/s), pour se placer précisément

L2, R1, R2 tenues

pilotent les robots 2, 3 et 4

CARRÉ, en plus de la gâchette

vitesse normale. CARRÉ seul ne fait rien bouger

relâcher la gâchette

le robot s’arrête

PS

arrête tout le parc, et ne relance jamais de lui-même

ROND tenu + SHARE tapé 5 fois

réarme le parc après un arrêt par PS

Le robot n’obéit que si sa gâchette est tenue : c’est le bouton homme mort. Le relâcher l’arrête.

Avec Docker, la manette doit être branchée avant le démarrage du conteneur, sans quoi elle n’y est pas visible. Vérifier : ls /dev/input/js*.

La manette se branche sur le PC, pas sur le robot. Les ordres passent ensuite par le Wi-Fi : si celui-ci coupe, le robot s’arrête de lui-même.

Important

La manette doit être en mode PlayStation : sa LED est bleue. Beaucoup de manettes génériques ont aussi un mode Xbox, LED verte, et basculent parfois de l’un à l’autre sur certaines combinaisons de boutons. En mode Xbox, les boutons ne sont plus à leur place : le logiciel le détecte, bloque tous les robots et affiche une erreur dans le terminal. Remettre la manette en mode PlayStation.

Avertissement

PS n’est pas un arrêt d’urgence. Il passe par le Wi-Fi et par le PC : si l’un des deux fait défaut, il ne fait rien. Le vrai arrêt d’urgence est le bouton d’arrêt de chaque robot (voir Arrêter et relancer le robot).

Plusieurs manettes

Pour une manette par robot, joy_teleop attribue un robot à une manette ; device_id désigne la manette (0 pour js0, 1 pour js1) :

ros2 launch ratbot_bringup joy_teleop.launch.py robot_id:=1 device_id:=0
ros2 launch ratbot_bringup joy_teleop.launch.py robot_id:=2 device_id:=1

Dans ce mode, le bouton PS n’arrête pas le parc : seul joy_fleet le gère.

Une autre manette

La correspondance des axes et des boutons est réglée pour la DualShock 4. Pour un autre modèle, relever les numéros en manipulant la manette, pendant que ./scripts/ratbot joy tourne :

ros2 topic echo /ratbot_fleet/joy

Noter l’indice de axes[] qui varie quand on pousse le stick vers l’avant, celui qui varie vers la gauche, et l’indice de buttons[] de la gâchette. Les reporter dans ratbot_bringup/config/joystick.yaml, recompiler (./scripts/ratbot build --packages-select ratbot_bringup), puis relancer la manette. Un axe inversé se corrige par une échelle négative.

Au clavier

Sans manette, le clavier :

./scripts/ratbot key 1

Touches i avancer, , reculer, j / l tourner, u o m . en courbe, k ou espace arrêter ; q / z plus vite / moins vite (w / x la vitesse seule, e / c la rotation seule). Vitesse de départ : 10 cm/s, au plus 0,18 m/s, la limite de la carte. La fenêtre du terminal doit avoir le focus pour que les touches soient prises en compte.

Une touche suffit : on appuie une fois sur i, le robot roule, sans tenir la touche, jusqu’à k. Le clavier a la même priorité que la manette, et passe comme elle par le limiteur de vitesse et l’arrêt de flotte.

Avertissement

Le robot continue tant qu’on n’a pas arrêté, même si l’on regarde ailleurs. Pour arrêter : k, espace, ou n’importe quelle autre touche ; Ctrl-C arrête aussi le robot avant de quitter. Si le programme meurt ou si le réseau tombe, la carte arrête le robot d’elle-même en une demi-seconde.

Jusqu’au 2026-10-19, il fallait tenir la touche, et le robot avançait par à-coups : le clavier ne répète une touche tenue qu’après environ 600 ms, plus que la demi-seconde au bout de laquelle la carte arrête un robot qui ne reçoit plus d’ordre.

Une fois arrêté, le clavier se tait : la navigation, de priorité plus basse, peut reprendre la main sans qu’on ferme le programme.

Par programme

Le robot obéit à un message geometry_msgs/Twist publié sur /ratbot_N/base/cmd_vel : vitesse d’avance linear.x en m/s, vitesse de rotation angular.z en rad/s, positive vers la gauche.

ros2 topic pub /ratbot_1/base/cmd_vel geometry_msgs/msg/Twist \
   "{linear: {x: 0.1}, angular: {z: 0.0}}"

Le robot roule tant que la commande est publiée, et s’arrête une demi-seconde après la dernière. Les détails — priorités entre les sources de commande, topics des capteurs — sont dans Interface ROS 2.

Qui a la priorité

Plusieurs sources peuvent commander le même robot. La manette et le clavier l’emportent sur les programmes, qui l’emportent sur la navigation autonome : saisir la manette pendant une navigation suffit à reprendre la main, sans rien arrêter.