Apprendre et refaire un trajet ============================== **S'applique à :** :bdg-info-line:`Simulation` :bdg-warning-line:`Robot réel` On **montre** un trajet au robot en le conduisant, au clavier ou à la manette ; il le **refait** ensuite seul, autant de fois qu'on le demande. Pas de coordonnées à saisir : le trajet est celui qu'on a conduit. .. note:: Essayé en simulation le 2026-10-15. Pas encore sur le robot réel. Ce qu'il faut ------------- Une **carte** de la pièce et la **navigation** lancée dessus, robot posé sur le point de départ de la carte (:doc:`navigation`). L'enregistreur note la position du robot **dans la carte** : sans localisation, il n'a rien à noter. .. code-block:: bash ./scripts/ratbot nav 1 salon Apprendre --------- Dans un deuxième terminal, l'enregistrement ; dans un troisième, la conduite : .. code-block:: bash ./scripts/ratbot route record 1 cuisine # terminal 2 ./scripts/ratbot key 1 # terminal 3 (ou : ratbot joy) Conduire le robot le long du trajet voulu, puis **Ctrl-C dans le terminal de l'enregistrement** : le trajet est écrit sous son nom. .. code-block:: text route saved: …/ratbot_maps/routes/cuisine.yaml (25 poses, 1.98 m) Une pose est notée tous les **10 cm**, ou à chaque rotation de **15°**. Le nom est fait de lettres, de chiffres, de ``-`` et de ``_`` ; un nom déjà pris est refusé. Refaire ------- .. code-block:: bash ./scripts/ratbot route follow 1 cuisine # par points (défaut) ./scripts/ratbot route follow 1 cuisine exact # la ligne exacte Si le robot est à plus de 30 cm du départ du trajet, il **y retourne d'abord**, puis refait le trajet. **Ctrl-C annule** : le robot s'arrête, même si l'on appuie au moment précis où le trajet est envoyé. Un trajet **en boucle**, qui revient à son départ, se refait comme les autres. Le robot le parcourt en deux moitiés : jusqu'au point le plus éloigné du départ, puis retour. Sans cela, l'arrivée étant aussi le départ, la navigation le déclarerait fait avant même de bouger. .. list-table:: :header-rows: 1 :widths: 18 41 41 * - - ``points`` (par défaut) - ``exact`` * - Ce que fait le robot - repasse par un point tous les 50 cm ; entre deux, la navigation trace elle-même le chemin - suit la ligne enregistrée telle quelle, sans la recalculer * - Face à un obstacle nouveau - le contourne - **s'arrête** : il ne s'écarte pas de la ligne * - Écart à la ligne apprise (simulation) - 6 cm en moyenne, 10 cm au plus - 3 cm en moyenne, 6 cm au plus * - À préférer - en général - quand le passage exact compte, dans un espace dégagé .. warning:: En mode ``exact``, une ligne apprise qui **rase un mur** — une porte prise au plus court, par exemple — arrête le robot : sa sécurité voit le mur trop près. Conduire au milieu des passages pendant l'apprentissage, ou utiliser le mode ``points``. À la fin, la commande dit à combien de centimètres de l'arrivée se trouve le robot. Elle le vérifie elle-même, sans se fier seulement à la navigation. Les trajets ----------- .. code-block:: bash ./scripts/ratbot route list Ils sont rangés dans ``ros2_ws/src/ratbot_maps/routes/``, un fichier par trajet, avec le robot, la carte sur laquelle il a été appris, la date et la longueur. Un trajet n'a de sens que **sur sa carte** : refait sur une autre, il mènerait ailleurs. Pour en supprimer un, supprimer son fichier. Limites connues --------------- - **Repartir d'un passage étroit pris en virage** — une porte, en sortant de biais — peut échouer : la navigation coupe le virage, voit l'encadrement trop près et s'arrête. C'est une limite de la navigation elle-même, pas des trajets (voir :doc:`navigation`). Mieux vaut **finir un trajet dans un espace dégagé**, pas dans l'encadrement d'une porte. - Le clavier et la manette **n'ont pas la sécurité anti-collision** de la navigation : pendant l'apprentissage, c'est le conducteur qui évite les murs.