Bouw een robot die een gebied afdekt en de vloer veegt
Een robot die zelfstandig een ruimte afdekt met alleen twee botsingsschakelaars — plus gemeten bewijs of odometrie en een planner toevoegen de moeite waard is.
Wat u bouwt
Een robot waarvan de taak niet is om ergens te komen, maar om overal te zijn geweest. Dat klinkt eenvoudiger dan navigatie, maar het is een groter probleem, want er is geen doel om naartoe te sturen en vanuit uw eigen positie kunt u niet bepalen of u vooruitgang boekt.
Het is ook het project waarbij meten vóór het bouwen het meeste oplevert. De hele eerste helft bestaat uit een robot met twee schakelaars die geen idee heeft waar hij is, en hij werkt — een werkelijk ongemakkelijke ontdekking als u net een weekend aan een plattegrond wilde besteden.
Het getal dat het project aanstuurt
De vloeroppervlakte gedeeld door de borstelbreedte geeft de afstand die een perfecte robot zou afleggen:
d_optimal = A / w
Een ruimte van 20 m² en een borstel van 250 mm leveren 80 m op. Elke strategie wordt beoordeeld als een veelvoud van die waarde, en die veelvouden liggen niet dicht bij elkaar:
| Strategie | Afstand voor 90% dekking | In die ruimte, bij 0,25 m/s |
|---|---|---|
| Perfecte veeggang | 1,0× | 5 min |
| Geplande zigzagbanen | 1,35× | 7 min |
| Willekeurig afsturen | 2,9× | 15 min |
| Spiraal en verplaatsen | 5,5× | 30 min |
Die getallen komen uit tests met de dekkingssimulator in vijf ruimten. Voer hem zelf uit voordat u iets koopt en verplaats het meubilair terwijl hij rijdt — de getallen veranderen met de ruimte, en dat is het grootste deel van de les.
Materialenlijst
| Onderdeel | Aantal | Geschatte kosten | Opmerkingen |
|---|---|---|---|
| Arduino Uno | 1 | $5–8 | De willekeurige wandeling heeft bijna niets nodig; de geplande veeggang vereist encoders |
| Botsingsschakelaars | 2 | $1 | Links en rechts, achter een omhullende behuizing. De primaire sensor hier |
| IR-reflectiearray | 1 | $5 | Detectie van afdalingen — naar beneden op de vloerrand gericht, niet naar een lijn |
| N20-motoren met encoder | 2 | $16 | Vereist voor de geplande veeggang; de willekeurige wandeling werkt zonder |
| TB6612FNG | 1 | $3 | |
| 2WD-onderstel | 1 | $10 | Rond is hier beter dan vierkant — het blijft niet in hoeken vastzitten |
| Accupack | 1 | $8 | Afdekkingstochten duren lang; capaciteit is hier belangrijker dan bij andere builds |
Totaal: ongeveer $50–65.
Dit is het enige project op de site waarvoor de goedkoopste sensor de belangrijkste is. Twee botsingsschakelaars en een willekeurige draai dekken een volledige ruimte als er genoeg tijd is — precies zo werkte de eerste generatie stofzuigrobots, en het is de moeite waard dit te bouwen voordat u naar iets slimmers grijpt.
De IR-array krijgt hier een ongebruikelijke taak: naar beneden op de vloer als afdalingssensor in plaats van vooruit naar een lijn. Een robot die een ruimte afdekt, komt bij de bovenkant van een trap.
Bouwvolgorde
1 — Laat de strategieën in de simulator racen. Een uur hier bespaart een weekend. Bekijk hoe de dekkingscurve vlak wordt en merk op dat alle drie de strategieën gelijk zijn over de eerste helft van de vloer.
2 — Bouw de aandrijving en de bumper, en niets anders. Twee hefboommicroschakelaars achter een veerkrachtige behuizing die aan elke kant minstens 45° om de robot loopt, normaal open (NO) naar GND bekabeld, met de interne pull-ups ingeschakeld. Contactdoorslag onderdrukken — één druk geeft negen flanken en een interrupt die telt, meldt een botsing negen keer.
3 — Voeg de afdalingssensoren toe voordat de robot ooit zonder toezicht rijdt. Reflectiesensoren aan de voorhoeken kijken naar beneden en worden bij elke doorloop gelezen. Bepaal daarna hoe snel u mag rijden: latentie maal snelheid, plus v²/2µg remafstand, moet passen binnen de afstand tussen het zien van de afdaling en die bereiken.
4 — Schrijf willekeurig afsturen en laat hem een uur rijden. Rijdt rechtdoor; keer na een botsing kort terug en draai een willekeurige hoek tussen 90° en 270°. De willekeur is essentieel — bij een vaste reflectiehoek wordt de ruimte een biljartafel en tekent de robot eindeloos een gesloten pad.
5 — Meet het. Teken met krijt of tape een raster op de vloer, laat de robot een vaste tijd rijden en tel de vakjes. Dit is het uitgangspunt en de enige eerlijke manier om vast te stellen of stap 6 u iets oplevert.
6 — Voeg nu pas odometrie toe. Encoders en odometrie voor differentiële aandrijving geven een schatting van de positie. Plan zigzagbanen op 80–90% van de borstelbreedte afstand, dus met 10–20% overlap, en route om meubilair heen in plaats van er tegegaan.
7 — Bekijk hoe de rijen niet meer evenwijdig worden. Dat gebeurt binnen ongeveer tien rijen, omdat odometrie afwijkt. Dat is geen bug in uw planner; het is de reden dat commerciële machines een gyroscoop, een plafondcamera of een baken hebben. De beslissing of u er een toevoegt, is het echte einde van dit project.
Hardware-opmerkingen die ertoe doen
Rond onderstel, wielen op de middellijn. Een ronde robot kan na elke botsing altijd draaien. Een vierkante robot kan diagonaal in een hoek vastzitten en heeft een achterbumper en extra gedrag nodig om los te komen.
De borstel moet breder zijn dan de robot. Dit is geen versiering. Een planner houdt het lichaam bij elke muur op afstand, dus alles wat het lichaam niet kan bereiken blijft onbedekte vloer — in de simulator liggen 130 van de 133 vakjes die de planner mist binnen twee cellen van een muur of poot van een tafel. Een uitstekende borstel bereikt die gebieden wel.
Twee helften van een bumper, niet één. Eén schakelaar vertelt u dat u ergens tegenaan bent gekomen. Twee vertellen u welke kant, en dat is de informatie die de draairichting nodig heeft, en het kost één pin.
Budget de accu in meters, niet minuten. Een uur bij 0,25 m/s is 900 m. Eén ruimte met willekeurig afsturen vergt ongeveer 540 m voor 99%. Drie ruimten zitten er niet in, en dat rekenwerk — niet enig algoritmisch inzicht — heeft de hele productcategorie naar kaartvorming gestuurd.
Zo ziet goed eruit
Dekking is een van de weinige robotgedragingen met één helder getal, en de vergelijking tussen strategieën is dramatisch:
| Strategie | Dekking na 1× de vloeroppervlakte aan rijafstand | Na 3× | Na 10× |
|---|---|---|---|
| Willekeurig afsturen | ~35% | ~70% | ~93% |
| Spiraal, daarna afsturen | ~45% | ~78% | ~95% |
| Geplande zigzagveeggang | ~85% | ~99% | ~99% |
De vorm van die kolommen is de hele les. Willekeurig afsturen nadert asymptotisch volledige dekking aan en komt er nooit helemaal — de laatste paar procent kosten langer dan de eerste negentig procent. Een geplande veeggang bereikt dat in ongeveer één veegbaan en heeft daarna niets meer te doen.
Dat is het verschil tussen geheugen hebben en niet hebben, uitgedrukt als getal.
| Meting | Typisch |
|---|---|
| Afstand tussen de rijen | 80–90% van de effectieve breedte van de robot, zodat de banen overlappen |
| Afwijking van de koers tijdens één veegbaan van 4 m | 3–8° zonder gyroscoop, minder dan 2° met een gyroscoop |
| Positieafwijking na tien veegbanen | 15–40 cm met alleen odometrie |
| Praktische ruimtegrootte met alleen odometrie | Tot ongeveer 4 × 4 m voordat de veeggang zichtbaar scheef loopt |
De laatste rij is de eerlijke bovengrens van dit project. Een geplande veeggang hangt af van het weten waar u bent, en odometrie wijkt onbeperkt af — dus voorbij ongeveer 4 m zijn de evenwijdige veegbanen niet meer evenwijdig en ontstaan er gaten. Dat is geen afstemmingsprobleem; het is waarom er kaartvorming bestaat.
Wanneer het misgaat
| Symptoom | Meestal |
|---|---|
| Tekent dezelfde lus voor altijd | De reflectiehoek bij een botsing is vast (deterministisch); maak hem willekeurig |
| Bereikt snel 90% en lijkt daarna te stoppen | Werkt zoals ontworpen — dat is de exponentiële dekkingscurve |
| Eén botsing wordt meerdere keren geteld | De contactdoorslag wordt niet onderdrukt, of het venster is korter dan de contactdoorslag van 5 ms |
| Rijdt de trap af | Te snel om de afdaling binnen het detectiebudget te zien, of de lus blokkeert |
| Rijen wijken af van evenwijdig | Odometrie, niet de planner. Voeg een koersreferentie toe |
| Mist stroken tussen rijen | De afstand tussen de rijen staat exact op de borstelbreedte, zonder overlap |
| Komt in een hoek vast | Vierkant onderstel of geen achterbumper |
| Komt nooit achter de bank | De overgang tussen de rijbanen is nooit gepland |
Zes van die acht hebben te maken met waarneming, mechanica of rekenwerk en niet met een algoritme — dezelfde verdeling als bij de micromouse, en om dezelfde reden.
Voor de reactieve laag die dit project deelt met elke andere mobiele robot is de robot voor obstakelvermijding de eenvoudigere build met grotendeels dezelfde hardware, en het pad voor reactieve navigatie behandelt de waarneming en het gedrag onder beide.
Projectroadmap
De bouwroute
Volg de techboom van onderdelen tot een werkende robot. Elk knooppunt wordt ontgrendeld zodra de voorwaarden klaar zijn, en je voortgang wordt op dit apparaat opgeslagen.
0 / 18 klaar
Componenten
- ControllerArduino UnoHet vergevingsgezinde 8-bits bord waarmee de meeste mensen robotica leren.
- SensorMicroswitch met hefboomDe enige detectie die een robot vertelt dat hij al ergens tegenaan is gereden.
- SensorIR-reflectiesensorarrayEen rij infrarode ogen die een robot vertelt waar de lijn ligt.
- ActuatorN20-encoder-tandwielmotorMicromotor met metalen tandwielkast en encoder achterop: zo weet de robot hoe ver hij echt is gereden.
- DriverTB6612FNG-motordriverEen MOSFET-H-brug die meer spanning aan de motor doorgeeft.
- Chassis2WD-robotchassisDe basis waarop twee motoren, een vrij zwenkwiel en je elektronica worden gemonteerd.
- VoedingAccu- en voedingspakket voor robotsHet verschil tussen een robot die blijft draaien en een robot die steeds opnieuw opstart.
Tutorials in deze route
- Gevorderd · 30 min lezenPadplanning voor volledige dekking: de hele vloerWaarom een robot zonder kaart zeven keer zoveel afstand nodig heeft om dezelfde kamer te dekken.
- Beginner · 25 min lezenBotsingsensoren en contactdendering bij robotbotsingenEén indruk, negen overgangen — en de interrupt telt ze allemaal.
- Gevorderd · 25 minStoppen aan een rand: latentie en remafstandHoe ver een robot rijdt voorbij de lijn die hij net zag, en welke snelheid daarbij past.
- Beginner · 17 min lezenKwadratuurencoders lezen voor afstand en snelheidMaak van kwadratuurencoderpulsen betrouwbare metingen van wielrichting, afstand en snelheid.
- Gevorderd · 20 min lezenOdometrie met differentiële aandrijving uit wielencodersIntegreer de beweging van linker- en rechterwiel in de pose van een mobiele robot en identificeer en kalibreer dan de drift.
Oefen voordat je bedraadt
Stem het af in de live simulator
De bouwroute loopt via een lab in de browser. Krijg het gedrag hier goed en zet je instellingen daarna over naar de echte robot.
Veelgestelde vragen
Is dit een stofzuigrobot?
Het is de navigatiehelft van een stofzuigrobot, en juist die helft is interessant. Zuigkracht toevoegen is een mechanisch probleem — een ventilator, een borstelas, een stofbak en aanzienlijk meer accucapaciteit — en levert niets op dat het dekkingsprobleem niet al biedt. Bouw hem met een droge doek of een stofdoek aan de onderkant en hij reinigt een harde vloer echt, terwijl elk algoritme hetzelfde is als bij een commerciële machine.
Waarom beginnen met willekeurig afsturen als een geplande veeggang beter is?
Omdat willekeurig afsturen werkt met sensoren die u in een middag kunt bouwen en omdat het u een gemeten uitgangspunt geeft dat de planner moet verslaan. In de simulator bereikt willekeurig afsturen de helft van de vloer over dezelfde afstand als een planner — het verschil ontstaat pas daarna. Bouwt u de planner eerst, dan besteedt u een weekend aan het corrigeren van de odometrische afwijking zonder ooit te weten wat hij u opleverde.
Hoeveel levert de planner werkelijk op?
Gemeten over vijf ruimten in het lab: een geplande veeggang bereikt 90 procent dekking over 1,35 keer de theoretische minimumafstand, willekeurig afsturen heeft 2,9 keer nodig en een spiraalstrategie 5,5 keer. In een ruimte van 20 vierkante meter met een borstel van 250 mm bij 0,25 m/s is dat 7 minuten tegenover 15 tegenover 30. De keerzijde is dat de planner nooit 99 procent haalt, omdat hij bij elke muur en poot van een tafel een veiligheidsmarge aanhoudt.
Heb ik de encoders nodig?
Niet voor de eerste robot — hij heeft er geen gebruik voor. Ze staan op de onderdelenlijst omdat de tweede helft van het project ze nodig heeft en omdat achteraf encoders op een gebouwd onderstel veel lastiger is dan ze meteen monteren. Koop de motoren met encoders, laat de draden onverbonden en pak ze pas op wanneer u aan de geplande veeggang begint.
Wat voorkomt dat hij de trap af rijdt?
Reflectiesensoren die aan de voorhoeken naar beneden kijken en bij elke doorloop van de lus worden gelezen, plus een snelheidsgrens die uit rekenwerk volgt in plaats van uit gewoonte. De robot legt zijn eigen latentie maal zijn snelheid af voordat het remmen begint, en heeft daarna een remafstand van v kwadraat gedeeld door tweemaal mu g. Beide termen moeten passen binnen de afstand tussen waar de sensor de afdaling ziet en waar de wielen die bereiken.
Waarom een rond onderstel?
Omdat de voetafdruk van een ronde robot bij het draaien niet verandert en hij dus altijd ter plaatse kan draaien na een botsing. Een vierkante robot die diagonaal in een hoek vastzit, moet eerst achteruit, waarvoor een achterbumper en extra gedrag nodig zijn. Om dezelfde reden is vrijwel elke commerciële vloerrobot rond.