Simulateur de couverture pour robots aspirateurs
Comparez la couverture par rebonds aléatoires, spirale et boustrophédon dans un labo navigateur qui mesure chaque stratégie face au balayage parfait.
- Catégorie
- Robots autonomes
- Durée
- 20–40 min
- Plateforme
- Navigateur · Arduino · Raspberry Pi
01 / Commencez ici
Introduction
Couvrir un sol n'est pas le même problème qu'aller quelque part. Un planificateur de chemin trouve un itinéraire vers un but ; un planificateur de couverture doit toucher chaque case accessible, et sa mesure honnête est la distance parcourue par mètre carré nettoyé. Ce labo lance rebonds aléatoires, spirale croissante et balayage en serpentin planifié sur la même pièce, et compare chacun à l'optimum théorique.
Live lab / Coverage path planning
Coverage path planning simulator
Three ways to cover a floor — random bounce, expanding spiral, and a planned boustrophedon sweep — measured against the one number that matters: the distance a perfect robot would need.
Shaded floor is covered. The thin line is where the robot has driven, the circle is its brush. Below, the same run plotted as coverage against distance — the dashed straight line is a perfect sweep, the dashed curve is the theory for random sweeping. Drag furniture to rebuild the room.
- Covered floor
- Furniture (drag it)
- Path driven
- Perfect sweep
- Covered
- 0%
- Distance
- 0.00× optimal
- Half the floor
- —
- 90% covered
- —
- 99% covered
- —
- Bumps
- 0
Keyboard: focus the room, then Space to run/pause, N to step, R to reset, M for a new room, F for full screen. Press 1–4 to pick a piece of furniture and the arrow keys to move it.
Commandes
Strategy bascule entre les trois. La pièce est reconstruite et l’essai redémarre immédiatement, car un chiffre de couverture n’a de sens que face à la pièce où il a été mesuré.
Tirez n’importe quel meuble avec le pointeur, ou appuyez sur 1–4 pour en sélectionner un et le déplacer avec les flèches du clavier. L’essai redémarre pendant que vous tirez. Placez une table au milieu du sol et regardez la distance du balayage planifié grimper pendant que sa couverture chute.
New room disperse à nouveau les meubles. Run speed arbitre entre fluidité et patience — la stratégie aléatoire a besoin de plusieurs milliers de mouvements pour finir, donc lancez-la en rapide.
Théorie
Un planificateur de trajectoire répond à comment y aller. Un planificateur de couverture répond à comment tout toucher, et les deux n’ont presque rien en commun.
Le seul étalon honnête est la distance dont un robot parfait aurait besoin. Avec un sol d’aire A et une brosse de largeur w, balayer chaque case une fois sans jamais repasser prend :
d_optimal = A / w
Tout ce que le labo rapporte est un multiple de ce nombre. Une stratégie à 1,2× passe 20 % de sa vie sur du sol déjà fait ; une à 8× y passe sept huitièmes.
Les rebonds aléatoires ont une forme fermée, et elle n’est pas encourageante. Un robot sans carte couvre du sol nouveau en proportion de ce qui reste non couvert, donc la surface non couverte décroît exponentiellement :
covered(d) ≈ 1 − e^(−d / d_optimal)
C’est la courbe en pointillés sur le tracé. Lisez-en trois points : 63 % du sol après une distance optimale, 90 % après 2,3, et 99 % après 4,6. Le dernier dixième de la pièce coûte le double des trois premiers quarts — le problème du collectionneur de coupons, avec une brosse.
La couverture systématique est linéaire, donc elle finit à 1× plus le surcoût de l’espacement des rangées et des virages. Dans ce labo, ce surcoût est d’environ 35 %.
Les essais mesurés atterrissent près de la théorie, et quand ils la manquent, c’est dans le sens attendu : une vraie marche aléatoire revisite le sol proche plutôt que de se téléporter, donc elle fait légèrement moins bien que ce que suggère la courbe d’échantillonnage indépendant.
Algorithme
Rebonds aléatoires. Avancez tout droit. Sur un contact, choisissez un nouveau cap au hasard et vérifiez qu’il est libre. C’est tout, et il faut un bit de détection et aucune mémoire.
Spirale, puis relocalisation. Tournez d’un angle inversement proportionnel à la distance parcourue depuis le centre, ce qui trace une spirale croissante. Sur un contact, foncez en ligne droite sur une distance fixe et recommencez une nouvelle spirale. Excellent sur sol dégagé — une spirale n’a presque aucun recouvrement — et sans recours dans une pièce encombrée, où chaque spirale est interrompue après quelques tours.
Serpentin planifié. Trois étapes, et la seconde est celle que l’on oublie :
- Gonflez. Agrandissez chaque obstacle du rayon du robot plus une marge de sécurité. Ce qui reste est la zone où le centre du robot peut aller.
- Découpez. Parcourez la carte gonflée en rangées espacées d’une largeur de brosse. Chaque rangée devient un ou plusieurs segments libres.
- Reliez. Visitez les segments en ordre de serpentin, et routez entre segments consécutifs par un plus court chemin dans l’espace libre, pour que le robot contourne le canapé en roulant plutôt que de le heurter.
L’étape 3 est d’où vient le surcoût en distance, et c’est pourquoi une pièce encombrée punit un planificateur plus qu’une pièce vide.
Code source
La stratégie aléatoire est celle à avoir en premier sur un vrai robot, car elle fonctionne avec la détection que vous avez déjà :
// Random-bounce coverage. Two bump switches, no map, no encoders.
const uint8_t BUMP_L = 2, BUMP_R = 3;
const uint16_t CRUISE = 170; // PWM
unsigned long turnUntil = 0;
int turnDir = 1;
void loop() {
bool left = digitalRead(BUMP_L) == LOW; // switches are active-low with pull-ups
bool right = digitalRead(BUMP_R) == LOW;
if (millis() < turnUntil) { // still executing a bounce
drive(turnDir * CRUISE, -turnDir * CRUISE);
return;
}
if (left || right) {
// Back off first — turning while wedged against a chair leg does nothing.
reverseFor(320);
// A random turn between 90 and 270 degrees. The randomness is what stops the
// robot tracing the same closed loop around the room forever.
turnDir = right ? -1 : 1;
turnUntil = millis() + random(420, 1250);
return;
}
drive(CRUISE, CRUISE);
}
L’angle de rebond doit être aléatoire. Une réflexion fixe transforme la pièce en billard, et une bille de billard sur une table rectangulaire trace un parcours fermé qui manque la majeure partie de la surface pour toujours.
Le balayage planifié exige le passage gonfler-découper-relier ci-dessus plus une odométrie assez bonne pour tenir une rangée droite, ce qui est une autre classe de robot. Prototypez-le ici, où la position est exacte par construction, avant de décider si votre matériel peut le porter.
Hypothèses et différences avec le matériel
Le labo donne au robot une odométrie parfaite, une carte parfaitement connue, des virages sur place instantanés et une brosse qui couvre un cercle net. Une vraie machine n’a rien de tout cela.
Le patinage des roues et la dérive du gyroscope écartent les rangées en une dizaine de rangées environ, c’est pourquoi les robots commerciaux se relocalisent par rapport aux murs, aux détails du plafond ou à une balise. Les virages prennent un temps auquel ce labo ne facture aucune distance. Et la brosse ne couvre pas un cercle — elle couvre un rectangle derrière le robot, donc reculer sur du sol déjà fait ne nettoie rien.
L’écart entre les stratégies survit à tout cela. Si un planificateur bat les rebonds aléatoires d’un facteur 3× ici, il les bat peut-être d’un facteur 2× sur du matériel réel ; l’ordre ne change pas.
Schéma de câblage
La détection se sépare nettement en trois tâches, et seule la première est exigée.
Contact. Deux microrupteurs sur un pare-chocs avant à ressort, câblés à niveau bas actif vers des broches compatibles interruption avec les résistances de rappel internes activées. C’est la détection qui rend les rebonds aléatoires possibles et c’est la dernière à tomber en panne.
Vide. Capteurs de réflectance vers le bas aux coins avant, lus à chaque passage de la boucle. Un parcours de couverture visite partout, y compris le haut des escaliers — le calcul de la distance parcourue par le robot au-delà du bord avant de pouvoir s’arrêter est détaillé ici.
Position. Codeurs en quadrature sur les deux roues, et un gyroscope si vous voulez des rangées qui restent parallèles. Seule la stratégie planifiée en a besoin, et en avoir besoin est toute la raison d’être des deux autres.
Pour les stratégies de couverture comme montage, voir le robot de couverture de pièce ; pour la couche réactive sous toutes ces stratégies, le simulateur d’évitement d’obstacles couvre les seuils d’arrêt et le balayage.
Liste de vérification du matériel
Composants
- Une base à propulsion différentielle dont vous pouvez mesurer la largeur de brosse
- Une détection de contact qui survit aux meubles
- Des codeurs, si le robot doit planifier plutôt qu'errer
- Un capteur de vide, car les parcours de couverture s'arrêtent aux escaliers
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
Pourquoi les robots aspirateurs bon marché se déplacent-ils au hasard ?
Parce que les rebonds aléatoires n'ont besoin ni de carte, ni de codeurs, ni de localisation — toute la stratégie tient en : avancez tout droit, et tournez d'un angle aléatoire quand vous heurtez quelque chose. Cela tient sur un microcontrôleur huit bits avec deux microrupteurs. Le labo montre ce que cela coûte : la première moitié du sol est couverte aussi vite qu'avec un balayage planifié, mais 90 pour cent prennent environ trois fois la distance idéale et 99 pour cent six fois ou plus. Le robot finit par y arriver, c'est pourquoi la stratégie survit — il passe simplement une heure à faire vingt minutes de travail.
Pourquoi la couverture est-elle si lente à la fin et si rapide au début ?
Parce qu'un robot qui balaie sans carte couvre du sol nouveau en proportion du sol encore non couvert. Au début, presque tout ce qu'il parcourt est nouveau ; à la fin, presque tout est une répétition. Cela donne l'approche exponentielle classique, une couverture d'environ un moins e à la puissance moins d sur optimal, que le labo trace en courbe de référence en pointillés. C'est la même mathématique que le problème du collectionneur de coupons, et cela signifie que le dernier dixième d'une pièce coûte plus cher que les trois premiers quarts.
Si le balayage systématique est tellement meilleur, pourquoi le labo l'arrête-t-il à 90 pour cent ?
Parce qu'un planificateur doit garder le corps du robot à l'écart de tout, donc il planifie un parcours qui reste à une marge de chaque mur et de chaque pied de table — et il ne couvre jamais ce qu'il ne peut pas atteindre en roulant. Dans ce labo, 130 des 133 cases manquées par le balayage planifié se trouvent à moins de deux cases d'un mur ou d'un meuble. C'est exactement pourquoi les vrais robots aspirateurs ont une brosse latérale qui dépasse du châssis et pourquoi ils longent les murs lors d'un passage séparé. Les rebonds aléatoires atteignent ces bords à la longue, purement par chance.
De quoi le balayage planifié a-t-il besoin et pas l'aléatoire ?
Il doit savoir où il est. Un parcours en serpentin n'a de sens que si le robot peut rouler droit, tourner d'un angle connu et se décaler d'une largeur de brosse — c'est de l'odométrie, et l'odométrie dérive. Le labo planifie sur une carte parfaite avec un robot parfait, donc considérez son 1,35 fois l'optimal comme le plancher de ce qu'une vraie machine atteint plutôt que comme une cible. Ajoutez le patinage des roues et la dérive du gyroscope et les rangées cessent d'être parallèles en une dizaine de rangées.
Quelle doit être la largeur des rangées ?
Une largeur de brosse, moins un recouvrement choisi délibérément. Espacez-les d'exactement une largeur et la moindre erreur de cap laisse une bande non nettoyée entre les rangées qu'aucun passage ultérieur ne trouvera. Recouvrez de 10 à 20 pour cent et les bandes se referment au prix de ce même pourcentage en distance. Le labo espace les rangées au plus grand nombre entier de cases couvertes par la brosse, c'est pourquoi la distance ressort à 1,35 fois l'optimal plutôt qu'à 1,0 — le surcoût est réel et tout robot de couverture en paie une version.
Cela s'applique-t-il à autre chose que les aspirateurs ?
C'est le même problème pour un robot tondeuse, un nettoyeur de piscine, une autolaveuse, un pulvérisateur agricole et un drone de relevé. Tous ont une largeur de travail, une zone à couvrir et un budget d'énergie qui fait de la distance la chose à minimiser. Les stratégies diffèrent surtout selon que la machine peut s'offrir la détection pour savoir où elle est — un drone de relevé a le GPS et planifie toujours ; un nettoyeur de piscine n'a rien et erre toujours.
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.