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.
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
Composants
- ContrôleurArduino UnoLa carte 8 bits indulgente par laquelle la plupart découvrent la robotique.
- CapteurIR Reflectance Sensor ArrayUne rangée d'yeux infrarouges qui indique au robot où se trouve la ligne.
- PiloteTB6612FNG Motor DriverUn pont en H MOSFET qui garde les volts réellement payés.
- ActionneurDC Gearmotor (TT Motor)Le moteur à boîte jaune qui transforme un châssis nu en voiture robot mobile.
- Châssis2WD Robot ChassisLe plateau sur lequel se fixent deux moteurs, une roulette libre et votre électronique.
- AlimentationRobot Battery & Power PackLa différence entre un robot qui roule et un qui redémarre sans cesse.
Tutoriels de ce parcours
- Débutant · 20 min de lectureConstruire un suiveur de ligne : capteurs et pilotage PIDDes capteurs de réflectance IR à l'erreur pondérée et au pilotage PID fluide — comment marche vraiment un suiveur de ligne.
- Débutant · 20 min de lectureLire une barrette IR de réflectance pour le suivi de ligneTransformez une rangée de capteurs IR en une position de ligne unique et lisse sur laquelle braquer.
- Débutant · 18 min de lectureComment régler un contrôleur PID : guide pratiqueUn ordre concret pour régler les gains P, I et D sans tâtonner — et comment essayer chaque étape en direct.
- Intermédiaire · 14 min de lectureDétecter les intersections d'un labyrinthe de lignesClassez T, carrefour, gauche, droite, impasse et arrivée depuis une barrette de réflectance, et résolvez les cas ambigus.
- Intermédiaire · 15 min de lectureSimplification de trajectoire LSRB pour robots de labyrintheEnregistrez les virages sous forme L, S, R et B, puis réduisez chaque détour sans issue vers l'itinéraire optimal.
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.