Simulateur de solveur de labyrinthe (remplissage)
Robot solveur de labyrinthe dans le navigateur : chaque couloir et impasse explorés, puis carte remplie par diffusion pour trouver le plus court chemin.
- Catégorie
- ESP32
- Durée
- 2–4 heures
- Plateforme
- Navigateur · ESP32
01 / Commencez ici
Introduction
Un robot solveur de labyrinthe explore d'abord, puis optimise. Ce labo montre les deux phases : le robot explore en profondeur — chaque couloir, chaque impasse, puis demi-tour — jusqu'à tout cartographier, puis remplit par diffusion depuis l'objectif pour trouver le plus court chemin et y fonce. Regardez-le essayer tous les mauvais chemins, puis prendre le bon — la même logique qu'un vrai Micromouse sur ESP32.
Live lab / Maze exploration & flood-fill shortest path
Maze solver simulator
Watch a robot explore a real maze — down every corridor, into dead ends, backtracking out — then flood-fill the map and speed-run the one shortest path to the centre.
Bold lines are maze walls. The shaded corridors are everywhere the robot explored (including dead ends it backtracked out of); the bold line is the shortest path found by flood fill; the triangle is the robot and its heading.
- Wall
- Explored (wrong paths)
- Shortest path
- Goal
- Phase
- Ready
- Explored
- 1 / 144
- Exploration
- — moves
- Shortest path
- — 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
Choisissez un mode — Explore, then speed-run ou Speed-run only — et appuyez sur Start pour le regarder résoudre, ou avancez un mouvement par un avec Step. New maze construit un nouveau labyrinthe aléatoire ; Reset rejoue le même. Trois vitesses, des raccourcis clavier et le plein écran gardent l’essai maîtrisable. Les lignes épaisses sont les murs du labyrinthe, les couloirs ombrés sont partout où le robot a exploré (impasses comprises), et la ligne épaisse est le plus court chemin trouvé par remplissage par diffusion.
Théorie
Un labyrinthe sur grille est fait de cases reliées par des arêtes ouvertes, avec des murs entre les autres. Pour trouver l’itinéraire le plus court, un robot doit d’abord connaître le labyrinthe — ce labo fonctionne donc en deux phases.
Exploration. Le robot parcourt le labyrinthe en profondeur avec la règle de la main gauche : à chaque jonction, il tourne à gauche s’il le peut, sinon tout droit, puis à droite. Quand il atteint une impasse, il revient sur ses pas jusqu’à la dernière jonction et prend la branche suivante. Répéter cela jusqu’à visiter chaque case cartographie tout le labyrinthe — y compris tous les mauvais chemins qu’il a fallu écarter.
Optimisation. Avec la carte complète, un remplissage par diffusion attribue à l’objectif une distance de zéro et propage des valeurs croissantes vers l’extérieur par chaque arête ouverte. Chaque case contient désormais sa distance à l’objectif, donc le plus court chemin est simplement ceci : depuis le départ, avancez toujours vers un voisin d’un numéro inférieur. Le robot parcourt cet itinéraire à toute vitesse — bien plus court que l’exploration sinueuse.
Algorithme
- Explorez le labyrinthe en profondeur avec la règle de la main gauche, en ressortant de chaque impasse, jusqu’à visiter toutes les cases.
- Enregistrez chaque arête ouverte des deux côtés pour que la carte terminée connaisse chaque mur.
- Remplissez par diffusion depuis l’objectif : étiquetez-le 0 et propagez des distances croissantes vers l’extérieur par chaque arête ouverte.
- Lisez le plus court chemin sur le champ : depuis le départ, avancez à répétition vers un voisin dont la distance est inférieure d’un.
- Parcourez à toute vitesse cet itinéraire jusqu’à l’objectif.
- Comparez la longueur d’exploration à la longueur du plus court chemin pour voir combien d’errance la carte a économisée.
Code source
Gardez l’exploration, la cartographie, la planification et le mouvement comme des fonctions séparées :
// Phase 1 — map the whole maze, backtracking out of dead ends
exploreDepthFirst(map, robot); // left-hand rule until every cell is visited
// Phase 2 — flood-fill the finished map and run the shortest path
map.floodFill(goal); // goal = 0, distances ripple outward
for (Cell c = start; c != goal; c = map.lowerNeighbor(c))
robot.driveTo(c); // always step one distance lower
Cette frontière rend le même planificateur testable dans ce labo en navigateur, sur un ordinateur de bureau et sur le contrôleur ESP32 final.
Hypothèses et différences avec le matériel
Le labo rend la cartographie propre en supprimant la partie difficile d’un vrai Micromouse : l’odométrie. Le robot simulé avance d’exactement une case par pas sans patinage des roues, sans biais de gyroscope ni erreur de virage à 90°, et ses trois capteurs de distance rendent compte des murs parfaitement sans faux positifs. Un montage physique sur ESP32 accumule des erreurs de cap et de distance à chaque mouvement, doit se recaler contre les murs et doit filtrer les mesures de temps de vol contre la lumière du soleil et les chutes d’alimentation — c’est pourquoi le tutoriel sur les virages précis et le guide de remplissage par diffusion passent plus de temps sur le mouvement que sur la planification. Utilisez ce simulateur pour comprendre pourquoi le remplissage par diffusion replanifie, pas pour valider votre couche de mouvement.
Schéma de câblage
Utilisez un régulateur externe calibré pour le courant de blocage des moteurs. L’ESP32 et les capteurs ont besoin d’un rail logique stable même lorsque les moteurs s’inversent.
Liste de vérification du matériel
Composants
- Carte de développement ESP32
- Trois capteurs de distance à temps de vol ou infrarouges
- Deux moto-réducteurs équipés de codeurs
- Double pont de puissance et alimentation régulée sur batterie
- Châssis compact à propulsion différentielle
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
Quel algorithme de labyrinthe est le meilleur pour un premier robot ?
Une exploration en profondeur pour cartographier le labyrinthe, puis un remplissage par diffusion pour trouver le plus court chemin. Le remplissage par diffusion est un bon choix pédagogique car chaque case accessible reçoit une valeur de distance et chaque mouvement peut être inspecté. Ce simulateur explore d'abord, puis remplit par diffusion la carte terminée, si bien que la cartographie et la planification du plus court chemin restent toutes deux claires.
Comment un robot de labyrinthe trouve-t-il le plus court chemin ?
Il ne peut pas connaître le plus court chemin avant d'avoir vu le labyrinthe, donc il explore d'abord. Ce simulateur, comme un vrai Micromouse, utilise deux phases : un parcours d'exploration qui parcourt chaque couloir et impasse pour cartographier tout le labyrinthe, puis un parcours rapide le long du seul plus court chemin révélé par le remplissage par diffusion de la carte terminée. La première phase est minutieuse et lente ; la seconde est courte et optimale.
En quoi le remplissage par diffusion diffère-t-il de BFS ou A* ?
BFS et A* planifient sur un graphe déjà connu. Le remplissage par diffusion est conçu pour un labyrinthe encore en cours de découverte : il attribue à l'objectif la distance zéro et propage des valeurs croissantes vers l'extérieur par chaque arête non connue comme bloquée, puis recalcule dès qu'un mur nouvellement détecté modifie la carte. Le champ de distances encode lui-même l'itinéraire, donc le robot avance simplement vers tout voisin de valeur inférieure d'un.
Quelle est la différence entre les phases d'exploration et de parcours rapide ?
Explorer cartographie le labyrinthe : le robot avance en profondeur dans chaque couloir et impasse, revient sur ses pas hors des mauvais, jusqu'à connaître chaque mur — c'est là que vous le voyez essayer tous les mauvais chemins. Le parcours rapide utilise cette carte terminée : un remplissage par diffusion la transforme en champ de distances, et le robot suit le seul plus court chemin du départ à l'objectif. L'exploration est lente et minutieuse ; le parcours rapide est court et optimal.
De quels capteurs un Micromouse ou un robot de labyrinthe a-t-il besoin ?
Au minimum, des capteurs de distance regardant à gauche, devant et à droite pour classer les murs de la case actuelle, plus des codeurs de roues pour avancer d'un nombre précis de cases et équerrez les virages. Les capteurs de distance à temps de vol ou infrarouges sont courants ; les codeurs comptent car la seule détection des murs ne dit pas quelle distance vous avez parcourue.
Pourquoi utiliser le remplissage par diffusion plutôt que le suivi de mur ?
Le suivi de mur (garder toujours une main sur un mur) est simple mais ne peut pas atteindre un objectif non rattaché au mur extérieur, comme le centre d'un labyrinthe Micromouse, et trouve rarement un itinéraire court. Le remplissage par diffusion construit une carte de distances de tout le labyrinthe connu, donc il peut atteindre un objectif intérieur et s'améliorer vers le plus court chemin au fil de l'exploration.
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.