Construire un Micromouse : solveur de labyrinthe
Un robot qui explore seul un labyrinthe à murs, en construit une carte, puis roule l'itinéraire le plus court du départ au centre sans erreur.
Ce que vous construisez
Un robot déposé dans un labyrinthe jamais vu, qui trouve le centre, puis revient par l’itinéraire le plus court dont il peut prouver l’existence.
Cette seconde moitié fait d’une Micromouse un robot différent de tous les autres de ce site. Un suiveur de ligne réagit. Un éviteur d’obstacles réagit. Une Micromouse se souvient — elle construit une carte en roulant, puis planifie à travers des cellules non visitées. C’est le plus petit problème de robotique complet : perception, mouvement, cartographie et planification, qui doivent tous marcher à la fois.
La stratégie en deux manches
Les souris de compétition ont plusieurs manches et sont notées sur la plus rapide. Cela produit une stratégie à copier même quand personne ne vous chronomètre :
Manche un — explorez. Roulez prudemment, enregistrez quelles cellules ont quels murs, et atteignez le centre. La vitesse est sans importance ; la carte est le produit.
Manche deux — exploitez. Remplissez la carte finie, calculez l’itinéraire le plus court, et roulez-le sans vous arrêter pour capter ce que vous savez déjà.
La division compte car les deux manches veulent des opposés. L’exploration veut un mouvement lent et prudent et une perception constante. La vitesse veut de l’engagement. Tenter les deux à la fois produit un robot mauvais aux deux.
Pourquoi l’algorithme n’est pas la partie dure
Le remplissage par diffusion est vraiment simple : donnez à la cellule objectif la distance 0, donnez à chaque voisine 1 de plus que la plus basse voisine accessible, puis descendez toujours vers un nombre plus petit. Ce sont quelques dizaines de lignes et c’est prouvé le plus court sur une grille.
La partie dure est qu’il suppose que le robot sait dans quelle cellule il est.
Comptez une cellule de travers, ou tournez à 88° au lieu de 90° quelques fois, et le planificateur résout désormais le labyrinthe pour un robot qui est ailleurs. Le symptôme rend fou : l’algorithme est parfait, le câblage est bon, et le robot fonce avec assurance dans un mur.
L’ordre de montage ci-dessous consacre donc l’essentiel à l’effort au mouvement, et ajoute le planificateur en dernier. Vous pouvez prouver le planificateur séparément dans le simulateur de labyrinthe, où la position est exacte par construction — ce qui est précisément pourquoi le simuler d’abord vaut le temps.
Nomenclature
| Pièce | Qté | Coût approx. | Notes |
|---|---|---|---|
| Arduino Uno ou Nano | 1 | $5 | Juste en RAM — un labyrinthe 16×16 exige du soin. Une Mega ou un ESP32 supprime le souci |
| VL53L0X | 3 | $15 | Gauche, avant, droite. Trois, pas un — voir ci-dessous |
| MPU-6050 | 1 | $2 | Le cap dans les virages ; les roues ripent exactement quand c’est critique |
| Moteurs à codeurs N20 | 2 | $16 | 1:50 ou 1:100. Réducteur métallique indispensable — le jeu s’accumule par virage |
| TB6612FNG | 1 | $3 | |
| Châssis 2 roues motrices | 1 | $10 | Doit tenir dans une cellule de labyrinthe avec marge — moins de 90 mm de large environ |
| Pack batterie | 1 | $8 | 2×18650 |
| Murs du labyrinthe | — | $10–30 | Carton plume ou contreplaqué. Cellules standard 180 mm avec murs 50 mm |
Total : environ $70–95, plus le labyrinthe.
Trois capteurs de distance, pas un. Un seul capteur avant oblige le robot à tourner pour regarder, ce qui coûte du temps et — bien pire — introduit une erreur de cap à chaque observation. Trois capteurs fixes permettent au robot de lire les trois murs d’une cellule en un instant, sans bouger. C’est la différence entre une souris qui cartographie de façon fiable et une qui accumule l’erreur à chaque contrôle de mur.
Rappelez-vous que les trois capteurs VL53L0X démarrent sur l’adresse 0x29, donc il faut trois GPIO sur XSHUT pour les allumer un par un et réassigner les adresses — et le refaire à chaque démarrage, car le changement est volatil.
Surveillez la RAM. Un champ de distances 16×16 stocké en uint8_t fait 256 octets, plus une carte de murs, plus une file. Sur les 2 Ko d’un Uno cela tient, mais seulement avec méthode — ce qui est en soi un bon exercice, et une raison pour laquelle beaucoup passent à un ESP32 ici.
Ordre de montage
1 — Obtenez trois lectures de distance propres. Avant, gauche, droite, avec des capteurs temps de vol VL53L0X. Ils partagent un bus I²C et démarrent à la même adresse, donc allumez-les un par un en maintenant les autres en reset et réassignez les adresses au démarrage. Confirmez que chacun lit un mur à distance connue avant de monter quoi que ce soit.
2 — Faites-le rouler droit et tourner carré. C’est le vrai projet. Suivez suivi de mur et virages précis : une boucle PID sur les capteurs latéraux pour rester centré, des virages intégrés au gyro au lieu des comptes codeurs, et un recalage contre un mur avant dès qu’il y en a un. Ne passez pas à la suite tant que le robot ne peut pas faire dix virages en regardant toujours dans le bon sens.
3 — Comptez les cellules de façon fiable. Les codeurs prévoient où devrait être une frontière ; le front descendant d’un mur latéral confirme où elle est vraiment. Quand ils désaccordent, croyez le mur — c’est un repère physique, pas une estimation accumulée.
4 — Enregistrez les murs dans une carte. Deux bits par cellule pour quatre murs, et un labyrinthe 16 × 16 tient en quelques centaines d’octets. Enregistrez ce que vous voyez au fur et à mesure.
5 — Ajoutez le remplissage. Maintenant le planificateur a des données honnêtes. Recalculez les distances dès qu’un mur nouvellement découvert invalide le plan courant — cette replanification est toute la raison d’utiliser le remplissage plutôt qu’une recherche unique.
Notes matérielles importantes
Petit bat rapide. Le robot doit tourner dans une cellule. Un châssis court avec les roues près du centre de rotation pivote proprement ; un long touche les murs à chaque virage, et aucun réglage ne corrige la géométrie.
Le jeu est une erreur de cap. Chaque pivot inverse les moteurs, et un réducteur lâche perd les premiers degrés — environ 0,9° de cap sur une roue 42 mm pour 4° de jeu. Les moteurs N20 à réducteur métallique existent pour cette raison.
Montez les capteurs latéraux légèrement en avant et inclinés. Les pointer droit sur le côté signifie qu’ils ne voient un mur que parfaitement à côté, donc le robot apprend le mur tard. Un petit angle vers l’avant donne à la boucle de commande une anticipation.
Donnez aux capteurs une alimentation stable. Un VL53L0X renvoie des nombres faux mais plausibles sur un rail affaissé plutôt que de tomber en panne franchement — le pire type de défaut, car la carte se remplit de murs inexistants.
À quoi ressemble un bon résultat
| Mesure | Première souris fonctionnelle | Bien réglée |
|---|---|---|
| Vitesse d’exploration | 0,2–0,3 m/s | 0,3–0,5 m/s |
| Manche de vitesse | 0,4–0,6 m/s | 1,0–2,0 m/s |
| Erreur de centrage après 10 cellules | 10–20 mm | Moins de 5 mm |
| Erreur de cap après 10 virages | 8–15° | Moins de 3° |
| Précision de détection des murs | Doit être 100 % | 100 % |
| Exploration complète 16×16 | 3–6 minutes | 1–2 minutes |
Deux de ces lignes méritent l’emphase.
La détection des murs n’a pas de crédit partiel. Un mur mal enregistré corrompt la carte, le remplissage calcule alors un chemin assuré à travers un mur, et la manche de vitesse fonce droit dedans. Il n’y a pas de dégradation gracieuse, et c’est pourquoi la manche d’exploration va lentement.
Les lignes de dérive sont le vrai projet. L’algorithme n’est pas la partie dure — le remplissage fait environ quarante lignes et vous pouvez le tester entièrement dans le simulateur sans aucun matériel. La partie dure est qu’après dix cellules le robot n’est plus là où il croit être, et une souris qui dérive de 20 mm par dix cellules touchera un mur de l’autre côté du labyrinthe. Tout ce qui fait marcher une vraie Micromouse — correction par suivi de mur, virages fusionnés au gyro, calibration des codeurs — existe pour combattre ce seul nombre.
Quand ça tourne mal
| Symptôme | Habituellement |
|---|---|
| Fonce avec assurance dans un mur | Le compte de cellules est faux — position, pas planification |
| Finit en diagonale après plusieurs virages | Biais gyro non soustrait, ou virages non recalés |
| Plonge dans les ouvertures latérales | Contrôle de présence de mur manquant dans la boucle de suivi |
| Cartographie des murs inexistants | Alimentation capteur affaissée, ou diaphonie entre modules |
| Le résout lentement, crash vite | Manche de vitesse trop rapide pour la couche de mouvement — ralentissez, puis augmentez |
Presque chaque entrée de ce tableau est un défaut de mouvement ou de perception plutôt qu d’algorithme. Cette distribution est la chose la plus utile à savoir avant de commencer, car elle dit où passer vos week-ends.
Si vous voulez les idées de cartographie et de planification sans le matériel, le simulateur de labyrinthe exécute la même stratégie en deux phases en navigateur, et le parcours planification et cartographie la prolonge vers A* et SLAM. Pour un premier robot de labyrinthe bien moins cher, le solveur de labyrinthe de lignes utilise du ruban au lieu des murs et n’a besoin d’aucun capteur de distance.
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 / 16 terminés
Composants
- ContrôleurArduino UnoLa carte 8 bits indulgente par laquelle la plupart découvrent la robotique.
- CapteurVL53L0X ToF SensorTélémétrie laser à temps de vol — un faisceau fin au millimètre là où le sonar est trop grossier.
- CapteurMPU-6050 IMUUn capteur de mouvement à six axes — comment un robot sent sa propre inclinaison, rotation et accélération.
- ActionneurN20 Encoder GearmotorUn micromoteur à réducteur métal avec codeur à l'arrière : le robot sait jusqu'où il est vraiment allé.
- PiloteTB6612FNG Motor DriverUn pont en H MOSFET qui garde les volts réellement payés.
- 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
- Intermédiaire · 1,5 h de lectureSuivi de mur et virages précis pour robot de labyrintheRestez centré entre les murs, et tournez à exactement 90° — les deux compétences vitales d'un robot de labyrinthe.
- Intermédiaire · 16 min de lectureRésolution de labyrinthe par remplissage pour robots micromouseComment le remplissage transforme un labyrinthe partiellement connu en champ de distances qu'un robot peut descendre jusqu'au but.
- Débutant · 17 min de lectureLire des encodeurs en quadrature pour distance et vitesseTransformez les impulsions d'un encodeur en quadrature en mesures fiables de sens, distance et vitesse de roue.
- Débutant · 18 min de lectureCapteurs robotiques : ultrasons contre temps de volChoisissez, montez, étalonnez et testez des capteurs à ultrasons ou à temps de vol pour la détection d'obstacles.
- Intermédiaire · 20 min de lectureOdométrie différentielle depuis les encodeurs de rouesIntégrez le mouvement des roues gauche et droite en pose d'un robot mobile, puis identifiez et étalonnez la dérive.
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
Qu'est-ce qu'une Micromouse ?
Un petit robot autonome qui résout un labyrinthe à murs, et la plus ancienne compétition de robotique au monde en continu. Le labyrinthe standard fait 16 cellules sur 16 de 18 cm avec l'objectif au centre, et le robot n'a aucune carte — il doit explorer, en construire une, puis rouler l'itinéraire le plus rapide possible. C'est un problème de robotique complet en boîte : perception, mouvement précis, cartographie et planification doivent marcher ensemble, et la défaillance d'un seul se voit aussitôt.
Pourquoi des capteurs temps de vol plutôt qu'à ultrasons ?
Trois raisons, toutes aggravées par un labyrinthe. Un faisceau ultrasonore s'ouvre d'environ 15 degrés, donc dans un couloir étroit il frappe les murs de part et d'autre de la visée. Plusieurs capteurs à ultrasons interfèrent entre eux, entendant les pings des autres. Et chaque lecture prend des millisecondes de temps de vol, ce qui limite la vitesse de la boucle de commande. Un VL53L0X a un faisceau étroit, n'est pas perturbé par ses voisins, et lit en environ 20 ms.
Faut-il un gyroscope si on a des codeurs ?
Pour un labyrinthe, oui. Les codeurs mesurent la rotation des roues, pas celle du robot, et les deux diffèrent à chaque patinage — exactement ce qui arrive pendant un pivot. Une erreur de 2 degrés par virage est invisible une fois et fatale après dix. Le gyroscope mesure la rotation réelle du robot directement, donc les virages restent carrés quoi qu'aient fait les roues.
En quoi est-ce différent du solveur de labyrinthe de lignes ?
Ce sont des robots différents qui partagent un mot. Un labyrinthe de lignes est du ruban noir sur un panneau lu par une barrette de réflectance vers le bas, et la mémoire d'itinéraire LSRB élimine les impasses d'une chaîne de virages. Une Micromouse a des murs physiques, les lit avec des capteurs de distance, et doit construire une vraie carte du labyrinthe pour planifier à travers des cellules jamais parcourues. Le labyrinthe de lignes est bien moins cher à construire ; la Micromouse est celle qui enseigne la cartographie.
Pourquoi mon robot résout le labyrinthe mais crash en vitesse ?
Parce que la vitesse change la physique, pas l'algorithme. Rouler plus vite signifie plus de patinage, des distances d'arrêt plus longues, et moins de temps pour la boucle de suivi de mur avant la cellule suivante. Le correctif habituel n'est pas plus de réglage mais une manche de vitesse plus lente pour commencer, puis l'augmenter une fois la couche de mouvement prouvée. C'est aussi pourquoi les souris de compétition se recalent contre les murs dès qu'elles peuvent — c'est la seule chose qui supprime l'erreur accumulée plutôt que de la limiter.
Puis-je construire une Micromouse sur un Arduino Uno ?
Pour une première souris, oui. Le Uno peut gérer trois capteurs VL53L0X et une centrale en I²C et tenir une carte de murs 16 sur 16 en quelques centaines d'octets. Ce qu'il ne peut pas faire, c'est concourir — les souris sérieuses utilisent des contrôleurs 32 bits plus rapides pour que la boucle de mouvement tourne au kilohertz et que le planificateur recalcule en permanence. Construisez d'abord la lente ; presque tout ce que vous apprenez se transfère.