Parcours de constructionIntermédiaireUn week-end

Construire un solveur de labyrinthe de lignes à mémoire LSRB

Un robot qui explore seul un labyrinthe de lignes en ruban, mémorise chaque jonction rencontrée, puis parcourt l'itinéraire le plus court du départ à l'arrivée sans une erreur.

Schéma technique : Construire un solveur de labyrinthe de lignes à mémoire LSRBJUNCTIONS → L S R B → ROUTEBB

Un suiveur de ligne suit. Un solveur de labyrinthe de lignes décide. C’est tout le saut de ce projet, et il est plus grand qu’il n’y paraît : le robot cesse d’être une boucle de commande à roues et devient quelque chose qui explore un environnement jamais vu, se souvient de ce qu’il a trouvé, et agit sur cette mémoire.

L’astuce est que rien ne remplace le suiveur de ligne — cela s’assoit au-dessus. En dessous, la même barrette de réflectance et la même boucle PID maintiennent le robot centré sur le ruban, sans rien savoir des labyrinthes. Au-dessus, une fine couche de décision surveille les moments où la ligne se ramifie, classe le type de jonction rencontrée, choisit une direction, et écrit un caractère. Cette séparation rend le projet traitable, et c’est la même division en deux couches qu’utilisent partout les vrais robots.

L’ordre de montage compte donc plus que d’habitude. Vous stabilisez d’abord vraiment le suivi simple — réglé en simulateur, puis sur un grand ovale de vrai ruban — et seulement ensuite vous ajoutez les jonctions. Sans cette discipline, chaque problème mécanique, chaque dérive de calibration, chaque roue désalignée de 2 mm apparaîtra déguisée en bug de résolution de labyrinthe.

Suivez l’arbre technologique ci-dessous de haut en bas. Chaque nœud s’ouvre une fois ses prérequis terminés, et votre progression est enregistrée sur cet appareil, pour construire le robot sur un week-end sans perdre votre place.

Nomenclature

Pièce Qté Coût approx. Notes
Arduino Nano 1 $5 A0–A7 donne huit canaux analogiques ; les six d’un Uno ne suffisent pas
Barrette de réflectance IR, 8 canaux 1 $8–12 Huit, et analogique. La détection de jonctions exige les capteurs extérieurs
TB6612FNG 1 $3 Vaut le coup ici : la chute d’environ 2 V du L298N nuit aux mouvements précis à basse vitesse
Motoréducteur TT 2 $4 Versions à codeurs fortement recommandées pour des virages répétables
Châssis 2 roues motrices 1 $6–10
Pack batterie 1 $6 2×18650, support protégé
Ruban noir mat, 19 mm 1 rouleau $3 Et un grand sol ou panneau clair pour poser le labyrinthe

Total : environ $35–45. La barrette 8 canaux est la pièce sur laquelle ne pas économiser, et la raison est précise : un robot détecte une branche gauche en remarquant que les capteurs extérieurs gauches sont devenus sombres alors que le centre est encore sur la ligne. Une barrette à peine plus large que le ruban ne peut physiquement pas le voir, donc la détection de jonctions devient du hasard quel que soit le code.

Pourquoi la barrette doit être plus large que la ligne

   left branch                    array (8 channels, ~60 mm wide)
   ────────────────┐          [ x x x . . . . . ]   outer left dark -> a branch
                   │
   ════════════════╪═══════   [ . . . x x . . . ]   centre still on the line
                   │

Règle empirique : la barrette devrait faire au moins trois fois la largeur du ruban. Pour du ruban 19 mm, c’est environ 60 mm, ce qu’une barrette 8 canaux au pas de 8 mm donne exactement. Plus étroit et le robot ne peut pas distinguer « la ligne a tourné brusquement » de « la ligne s’est ramifiée », ce qui est la décision centrale sur laquelle repose tout le projet.

Construisez par étapes

L’ordre de montage compte ici plus que dans tout autre projet de ce site. Un solveur de labyrinthe est un suiveur de ligne avec une couche de décision, et chaque défaut mécanique ou de calibration du suiveur réapparaît déguisé en bug de labyrinthe.

N° Étape Le test Un succès ressemble à
1 Le suivi fonctionne Dix tours d’un grand ovale simple Zéro perte. Pas « presque » — zéro
2 Répétabilité des virages Commandez un pivot 90° dix fois, mesurez À ±3° près, et répétable
3 Jonction vue Franchissez lentement un T, affichez la barrette Les capteurs extérieurs s’assombrissent avant le centre
4 Jonction classée Franchissez lentement chaque type de jonction Gauche / droite / T / croix / impasse tous nommés correctement
5 Un virage exécuté Rencontrez une branche gauche, tournez à gauche, reprenez le suivi Il retrouve la ligne et continue
6 Parcours enregistré Roulez un petit labyrinthe, affichez la chaîne Une séquence comme LSRB conforme à ce que vous avez vu
7 Simplification LSRB Passez le parcours enregistré dans le simplificateur LBL devient S, et chaque règle se déclenche correctement
8 Seconde manche Roulez le parcours simplifié Il atteint l’objectif sans erreur ni exploration
9 Labyrinthe complet Un labyrinthe à plusieurs impasses Explore, simplifie, puis roule l’itinéraire le plus court

L’étape 1 n’est pas négociable. « Suit presque la ligne » devient « invente parfois une jonction », et vous passerez une soirée à déboguer la simplification pour une faute qui est vraiment une roue désalignée de 2 mm.

L’étape 2 est celle qu’on saute. Un solveur exécute des centaines de virages par parcours, et un virage systématiquement court de 5° s’accumule jusqu’à quitter entièrement la ligne. C’est exactement là que le jeu du réducteur apparaît — une erreur qui change de signe avec la direction est mécanique, pas un défaut de réglage.

La division en deux couches, en code

La séparation qui rend ce projet traitable mérite d’être vue explicitement :

             ┌─────────────────────────────────────┐
   decision  │  classify junction -> choose turn   │   runs only at junctions
     layer   │  record a character -> simplify     │   knows nothing about PWM
             └──────────────────┬──────────────────┘
                                │ "turn left" / "keep going"
             ┌──────────────────▼──────────────────┐
   following │  read array -> position -> PID      │   runs every loop, ~200 Hz
     layer   │  -> left and right wheel speeds     │   knows nothing about mazes
             └─────────────────────────────────────┘

La couche basse n’apprend jamais ce qu’est un labyrinthe. La couche haute ne touche jamais un moteur. Quand quelque chose tourne mal, cette frontière dit dans quelle moitié chercher — et si vous ne pouvez pas dire dans quelle moitié vit un bug, les couches ne sont pas correctement séparées.

À quoi ressemble un bon résultat

Mesure Typique
Vitesse d’exploration 0,15–0,25 m/s — assez lent pour classer les jonctions de façon fiable
Vitesse de la manche retour 0,3–0,5 m/s — aucune décision à prendre, donc on peut pousser
Précision de classification des jonctions 100 %. En dessous, le parcours enregistré est faux
Répétabilité des virages ±3°
Simplification du parcours Un parcours d’exploration de 30 caractères se réduit typiquement à 8–12

La précision des jonctions est vraiment du tout-ou-rien, et cela surprend. Une jonction mal lue corrompt la chaîne enregistrée, le simplificateur produit alors un parcours faux mais d’apparence valide, et la manche retour fonce avec assurance dans un mur. Il n’y a pas de crédit partiel — c’est pourquoi l’exploration roule lentement et que la manche retour est là où l’on regagne le temps.

Dépannage

Symptôme Cause probable Correctif
Voit des jonctions inexistantes Un virage serré lu comme une branche Élargissez la barrette ; exigez que les capteurs extérieurs restent sombres sur une distance minimale
Rate des jonctions Roule trop vite, ou barrette trop étroite Ralentissez l’exploration ; vérifiez que la barrette fait ≥3× la largeur du ruban
Virages incohérents Jeu, ou pas de codeurs Abordez toujours un virage de la même façon ; mesurez le jeu
Parcours enregistré avec caractères en trop Jonction détectée deux fois Ajoutez un temps mort après une jonction avant de chercher la suivante
La simplification produit un faux parcours Une règle appliquée dans le mauvais ordre Testez LBL→S, LBR→B, SBL→R et amies isolément d’abord
La manche retour échoue au premier virage Parcours enregistré relatif au mauvais cap La chaîne est une séquence de virages relatifs — vérifiez la convention
Marche sur un labyrinthe, pas un autre Espacement des jonctions trop serré pour le temps mort Réduisez le temps mort, ou ralentissez encore
Perd la ligne après un virage Le virage dépasse la nouvelle ligne Tournez jusqu’à ce que les capteurs centraux retrouvent, plutôt que d’un angle fixe
Dérive de pire en pire en parcours Batterie qui s’affaisse, changeant les gains effectifs Bouclez la vitesse avec des codeurs

Pour aller plus loin

Ajoutez des codeurs et tournez en distance plutôt qu’en temps. Les virages chronométrés sont la plus grande source de non-fiabilité d’un premier solveur, car le temps nécessaire change avec la tension batterie et la surface. Les virages aux codeurs non.

Passez à un labyrinthe à murs — le micromouse — qui remplace le ruban par des murs et la règle LSRB par le remplissage par diffusion. C’est l’étape vraiment plus grande : LSRB est une heuristique de suivi de mur qui trouve un chemin, tandis que le remplissage calcule le plus court et replanifie à mesure que de nouveaux murs sont découverts.

Optimisez la manche retour. Une fois le parcours connu, il ne reste aucune décision à prendre, donc le robot peut accélérer en droites et ne ralentir qu’aux virages. Un profil de mouvement sur l’itinéraire connu est là où viennent les gains de temps spectaculaires — souvent la moitié du temps retour.

Parcours du projet

Le parcours de construction

Suivez l'arbre technologique, des pièces jusqu'à un robot qui fonctionne. Chaque nœud se débloque quand ses prérequis sont terminés, et votre progression est enregistrée sur cet appareil.

0 / 21 terminés

100%
Réalisation

Câbler le robot

45 min

Réalisation

Calibrer sur votre propre piste

20 min

Réalisation

Stabiliser le suivi simple

60 min

Réalisation

Réaliser la passe d'exploration

45 min

Réalisation

Rejouer l'itinéraire simplifié

30 min

Objectif

Solveur de labyrinthe de lignes terminé

Vous l'avez construit

Composants

Tutoriels de ce parcours

Entraînez-vous avant de câbler

Réglez-le dans le simulateur interactif

Le parcours de construction passe par un labo dans le navigateur. Obtenez ici le bon comportement, puis reportez vos réglages sur le vrai robot.

Questions fréquentes

Comment fabriquer un robot solveur de labyrinthe avec Arduino ?

Partez d'un suiveur de ligne fonctionnel : une barrette de réflectance, une boucle PID et un pilote moteur. Ajoutez ensuite une couche de décision qui remarque les jonctions, choisit une branche selon la règle de la main gauche, et enregistre chaque virage comme l'un des quatre caractères — L, S, R ou B. À l'arrivée, des règles de substitution éliminent chaque détour d'impasse de cette chaîne, et la seconde manche suit l'itinéraire simplifié. Ce parcours couvre toute la chaîne, et vous réglez la couche de suivi d'abord en simulateur en navigateur.

Qu'est-ce que l'algorithme LSRB dans un suiveur de ligne ?

LSRB signifie Left, Straight, Right, Back — les quatre actions possibles à une jonction. Le robot enregistre un caractère par jonction pendant l'exploration, et chaque B marque une impasse dont il a dû ressortir en marche arrière. Six règles de substitution remplacent chaque fenêtre de trois caractères centrée sur un B par le virage unique qui aurait eu le même effet, ce qui supprime entièrement le détour. Répétez jusqu'à ce qu'il ne reste aucun B et vous avez l'itinéraire le plus court.

Quelle est la différence entre un labyrinthe de lignes et un labyrinthe à murs ?

Un labyrinthe de lignes est du ruban noir sur un support clair, lu par une barrette de réflectance vers le bas ; un labyrinthe à murs — le format Micromouse — a des murs physiques lus avec des capteurs de distance. La perception est complètement différente, mais la couche au-dessus est la même : explorer pour construire un savoir, puis rouler le meilleur itinéraire. Un labyrinthe de lignes est bien moins cher à construire, et c'est pourquoi les compétitions scolaires et universitaires l'utilisent généralement.

Faut-il acheter les pièces avant de commencer ce projet ?

Non. La couche de suivi de ligne, ses gains PID et le comportement explorer-puis-optimiser tournent tous dans les simulateurs en navigateur, donc vous pouvez comprendre tout le robot avant de dépenser quoi que ce soit. Seules les quatre dernières étapes — câblage, calibration, passe d'exploration et rejeu — exigent le vrai Arduino, la barrette, le pilote, les moteurs, le châssis et la batterie.

Pourquoi mon robot de labyrinthe tourne-t-il aux mauvaises jonctions ?

Presque toujours parce qu'il décide trop tôt. Le motif capteur instantané ne peut pas distinguer une jonction en T d'un carrefour — les deux se lisent en noir sur toute la barrette. Le robot doit enregistrer quelles branches sont apparues, avancer d'environ une longueur de robot, et relire pour savoir si la ligne continuait aussi tout droit. Décider sur la première lecture est la cause la plus fréquente de virages faux avec assurance.

Le LSRB fonctionne-t-il sur n'importe quel labyrinthe ?

Seulement sur un labyrinthe parfait — sans boucles, où exactement un chemin relie deux points quelconques. Les labyrinthes de lignes en ruban le sont presque toujours. Si le labyrinthe contient un cycle, la règle de la main gauche peut tourner indéfiniment et il n'y a aucune impasse à réduire pour les règles ; il faut alors une vraie carte et une recherche de graphe comme le remplissage par diffusion.