Simulateur interactifIntermédiaire

Simulateur de labyrinthe de ligne avec routage LSRB

Solveur de labyrinthe dans le navigateur : labyrinthe en ruban, détection des jonctions, et règles LSRB qui réduisent un parcours avec impasses au plus court.

Catégorie
Arduino
Durée
2–3 heures
Plateforme
Navigateur · Arduino
Schéma technique : Simulateur de labyrinthe de ligne avec routage LSRBJUNCTIONS → L S R B → ROUTEBB

01 / Commencez ici

Introduction

Un robot de labyrinthe de ligne est un suiveur de ligne qui sait aussi décider. Ce labo en pilote un sur un ruban noir : il classe chaque jonction et écrit un caractère par mouvement. À l'arrivée, vous voyez les règles de substitution LSRB s'appliquer une à une, retirant du relevé chaque détour par impasse, jusqu'à ce qu'il reste une chaîne sans B — le plus court chemin, que le robot parcourt de nouveau.

Live lab / Junction detection & LSRB route memory

Line maze simulator

A line follower drives a taped maze, recording every turn as L, S, R or B. Watch it back out of dead ends, then watch the substitution rules collapse that string into the shortest route — and drive it again.

Browser native
A line maze lab. A robot starts at the bottom-left of a taped maze and follows the left-hand rule to the finish at the top-right, recording one turn symbol per junction and backing out of every dead end. The LSRB substitution rules then collapse that record into the shortest route, which the robot drives again as a speed run. Use the controls below to run it or step one move at a time.

The dark lines are the tape. The orange trail is everywhere the robot drove while exploring, dead ends included; the teal line is the simplified route it speed-runs. The bar above the robot is its eight-channel reflectance array — a whole side lights up when a branch opens there.

  • Tape
  • Explored (dead ends included)
  • Simplified route
  • Finish

Route memory

The robot writes one symbol per move. Every B is a dead end it had to reverse out of.

Press Start — the string builds as the robot drives.

Simulation

Ready. Press Start to explore the line maze, or Step one move at a time.

Phase
Ready
Junction
—
Explored turns
— moves
Simplified turns
— moves
Saved
—
Maze
—

Keyboard: focus the maze, then use Space to run/pause, N to step, R to reset, M for a new maze, and F for full screen.

Commandes

Mode choisit entre le parcours complet en trois actes — exploration, simplification, puis parcours à toute vitesse — et l’accès direct à l’itinéraire final. Run speed règle la vitesse de roulage du robot. Start, Pause et Step le pilotent en continu ou un mouvement par un, Reset rejoue le même labyrinthe, et New maze en génère un nouveau. Placez le focus sur le canevas et utilisez Espace, N, R, M et F pour les mêmes commandes au clavier.

Le bandeau route memory sous le labyrinthe est la partie à regarder. Il se remplit d’un symbole par mouvement pendant que le robot roule, puis se réécrit pendant la phase de simplification à chaque déclenchement d’une substitution.

Théorie

Un robot de labyrinthe de ligne est construit en deux couches, et les garder séparées est ce qui le rend traitable.

La couche basse est un suiveur de ligne ordinaire. Une barrette de réflectance à huit voies lit le ruban, les mesures se réduisent en une seule erreur pondérée, et une boucle PID transforme cette erreur en deux vitesses de roues différentes. Cette couche ignore tout des labyrinthes.

La couche haute ne se réveille que lorsque le ruban se ramifie. Elle classe la jonction — gauche, droite, T, carrefour, impasse ou arrivée — choisit une branche par la règle de la main gauche, et ajoute un caractère à une chaîne. La barre dessinée sur le nez du robot dans ce simulateur est cette barrette, et vous pouvez voir tout un côté s’allumer quand une branche s’ouvre.

Le piège est que la lecture instantanée est ambiguë. Une jonction en T, un carrefour et le bloc d’arrivée annoncent tous tous les canaux au noir. Le robot doit s’engager au-delà de la jonction et relire avant de savoir ce qu’il vient de traverser.

Algorithme

L’exploration utilise la règle de la main gauche : à chaque case, prenez l’option la plus à gauche disponible, et ne faites demi-tour que lorsqu’une impasse ne laisse rien d’autre. Sur un labyrinthe sans boucles, cela atteint toujours l’arrivée, et c’est assez sans état pour être vérifié à la main.

Chaque mouvement ajoute un symbole. L, S et R sont des virages ; B n’apparaît qu’aux endroits où le robot est ressorti d’une impasse en marche arrière. Chaque B dans la chaîne finale marque donc une erreur, avec le virage d’avant et le virage d’après.

Cette fenêtre de trois caractères est toujours remplaçable par un seul virage, car les trois mouvements sont simplement des angles qui s’additionnent. En comptant gauche comme −90°, tout droit comme 0°, droite comme +90° et demi-tour comme 180°, L B L totalise 0°, soit S — traversez tout droit au lieu d’entrer dans l’éperon. Les six règles de substitution sont ce calcul, tabulé.

Un seul passage ne suffit pas : réduire un détour peut rapprocher deux virages qui forment désormais une nouvelle fenêtre réductible, donc les règles sont appliquées à répétition jusqu’à ce que plus rien ne change. Quand la boucle se termine, il ne reste aucun B dans la chaîne, ce qui est la preuve que c’est fini — toute impasse restante en montrerait encore un.

Code source

// Repeat until a full pass changes nothing: collapsing one detour
// can push two turns together that are themselves reducible.
void simplify(String& route) {
  bool changed = true;
  while (changed) {
    changed = false;
    for (int i = 1; i + 1 < route.length(); i++) {
      if (route[i] != 'B') continue;          // windows centre on a turn-back
      route = route.substring(0, i - 1)
            + fold(route[i - 1], route[i + 1])
            + route.substring(i + 2);
      changed = true;
      break;
    }
  }
}

fold est la table de substitution, et elle est courte car ce n’est que de l’arithmétique d’angles : additionnez les deux virages de part et d’autre du demi-tour à 180°, ramenez dans ±180°, et reconvertissez le résultat en symbole.

Hypothèses et différences avec le matériel

Le ruban est rendu comme un noir parfait sur un blanc parfait, sans gondolage, reflet ni ombre, et la barrette de réflectance rend compte de valeurs binaires idéales à hauteur fixe. Une vraie barrette IR voit des réflexions en niveaux de gris qui varient avec la lumière ambiante, la hauteur des capteurs et l’usure du ruban, donc chaque essai sur matériel doit d’abord étalonner le blanc et le noir par balayage comme l’indique la section de câblage. Le simulateur fait aussi tourner la boucle PID à une période parfaite et avance d’une case nette par décision ; sur un Arduino, la gigue de boucle, le patinage des roues et un écart de montage de 2 mm apparaissent comme des erreurs de classification des jonctions. Traitez les gains et la chaîne LSRB d’ici comme la logique à transférer, pas comme des nombres à copier.

Schéma de câblage

Le robot modélisé par ce labo est celui du parcours de construction du solveur de labyrinthe de ligne : un Arduino Nano lisant une barrette de réflectance à huit voies sur ses broches analogiques, et pilotant deux moto-réducteurs via un TB6612FNG.

La règle de câblage qui compte le plus est la séparation des alimentations. La batterie des moteurs atteint la broche VM du pont et rien d’autre ; le 5 V de l’Arduino n’alimente que la logique ; et toutes les masses — carte, pont, barrette de capteurs, moins de la batterie — doivent être reliées entre elles, sinon les signaux de commande n’ont aucune référence et la panne est silencieuse.

Liste de vérification du matériel

Composants

  • Arduino Nano ou Uno
  • Barrette de capteurs de réflectance IR à huit voies
  • Double pont de puissance TB6612FNG
  • Deux moto-réducteurs à courant continu sur châssis 2 roues motrices
  • Ruban isolant noir sur panneau clair

Explorer le graphe

Où ce simulateur est utilisé

Les projets, parcours d'apprentissage et tutoriels qui s'appuient sur ce labo.

Continuer la construction

Ressources à télécharger

Utilisez ces références sur la page pendant que vous avancez dans le projet. Les archives de projet téléchargeables ne seront ajoutées qu'une fois leur source et leur version publiées.

Questions courantes

Questions fréquentes

Qu'est-ce qu'un robot de labyrinthe de ligne ?

Un suiveur de ligne avec une couche de décision au-dessus. La couche basse maintient le robot centré sur le ruban noir à l'aide d'une barrette de réflectance et d'une boucle PID, exactement comme un suiveur de ligne ordinaire. La couche haute surveille les moments où le ruban se ramifie, classe le type de jonction, choisit une direction et enregistre le virage. C'est ce relevé qui lui permet de refaire le labyrinthe une seconde fois sans un seul mauvais virage.

En quoi un labyrinthe de ligne diffère-t-il d'un labyrinthe Micromouse ?

Le monde et la détection sont complètement différents. Un labyrinthe de ligne est un ruban noir sur un panneau clair, lu par une barrette de réflectance tournée vers le bas ; un labyrinthe Micromouse a des murs physiques lus par des capteurs de distance. Ce qui survit au changement, c'est la stratégie — explorer pour acquérir des connaissances, puis parcourir le meilleur itinéraire. Le labyrinthe de ligne est bien moins cher à construire, c'est pourquoi les compétitions scolaires et universitaires utilisent généralement celui-là. Comparez les deux dans le simulateur de solveur de labyrinthe.

Que signifie LSRB ?

Left, Straight, Right et Back — les quatre choses qu'un robot peut faire à une jonction. Le robot ajoute un caractère par mouvement pendant le parcours d'exploration, et chaque B marque une impasse dont il a dû ressortir en marche arrière. Six règles de substitution remplacent ensuite 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.

Pourquoi le robot ne peut-il pas décider dès qu'il voit une jonction ?

Parce que le motif des capteurs est ambigu. Une jonction en T, un carrefour et le marqueur d'arrivée allument tous la barrette entière d'un coup, et une branche à gauche se lit pareil que la ligne continue aussi tout droit ou non. Le robot doit noter quelles branches sont apparues, avancer d'environ une longueur de robot, et relire pour apprendre s'il y avait un passage tout droit. Décider sur la première lecture est la cause la plus fréquente de virages faux pris avec assurance.

LSRB fonctionne-t-il sur tous les labyrinthes ?

Uniquement sur un labyrinthe parfait — sans boucles, où exactement un itinéraire relie deux points quelconques. Les labyrinthes de compétition en ruban le sont presque toujours, et ce simulateur en génère un. Si le labyrinthe contient un cycle, la règle de la main gauche peut tourner en rond pour toujours et il n'y a aucune impasse à réduire pour les règles ; à ce stade, il faut une vraie carte et une recherche de graphe comme le remplissage par diffusion.

Combien de mémoire cela prend-il sur un Arduino ?

Presque rien, et c'est tout l'intérêt. Toute la carte tient dans un tableau de caractères — quelques dizaines d'octets pour un labyrinthe de compétition — car le robot ne mémorise jamais le labyrinthe lui-même, seulement les virages effectués. Un robot à remplissage par diffusion garde au contraire une valeur de distance pour chaque case d'une grille. C'est le compromis : LSRB est minuscule mais exige un labyrinthe sans boucle, le remplissage par diffusion est plus lourd mais gère tout.

Pour aller plus loin

Références

Des sources faisant autorité pour aller plus loin que le modèle pédagogique, borné, de ce simulateur.