BouwrouteGevorderdEen weekend of twee

Bouw een mini-sumo robot: grip, wig en randherkenning

Een mini-sumo robot die zijn tegenstander opzoekt, hem de ring uit duwt en bij de witte rand tot stilstand komt in plaats van van de ring af te rijden.

Technisch schema: Bouw een mini-sumo robot: grip, wig en randherkenningCLEARANCE FIELD

Wat je bouwt

Twee robots, één ring, geen sensoren die op iets anders wijzen dan op elkaar en de vloer. Degene die aan het eind nog binnen is, wint.

Dit is het eenvoudigste doel op deze site en toch geen makkelijk project, want sumo is de enige robot waarbij de mechaniek de uitkomst bepaalt en de code er alleen voor hoeft het niet weg te gooien. Elke andere build hier beloont betere algoritmes. Deze beloont een scherpere wig.

Die omkering is het waard één keer mee te maken. Daarom besteedt de onderstaande bouwvolgorde de eerste dag aan rekenwerk en de laatste aan gedrag — precies andersom dan de meeste mensen beginnen.

De drie getallen die het beslissen

De duwkracht is 5,9 N, en je motoren zouden 25 N kunnen leveren. Bij een robot van 500 g op siliconen banden begrenst de tractie de duwkracht met een factor vier. De aandrijving is niet de beperking en zal het nooit zijn, dus bouw op de gewichtsgrens, leg elke gram boven de aangedreven wielen en besteed het motorbudget aan de overbrenging in plaats van aan vermogen.

Een wig die 40% van de tegenstander optilt geeft je 2,3× zijn duwkracht. Het gewicht dat je eraf haalt komt op jouw wielen, dus de verhouding is (1+f)/(1−f) en die loopt steil op. Geen enkele andere wijziging komt daar ook maar in de buurt.

Je kunt ongeveer 0,8 m/s rijden. Niet omdat de motoren opraken, maar omdat een rand van 25 mm plus 25 ms latentie de enige remruimte is die er is. De meeste eerste robots zijn op tweemaal zover afgesteld en verliezen aan de ringrand, niet aan de tegenstander.

Die drie zinnen zijn het hele ontwerp. Al het onderstaande laat zien hoe je ze haalt.

Onderdelenlijst

Mini sumo kent een formele klasse: 10 × 10 cm grondvlak bij de start, maximaal 500 g, op een ring van 77 cm met een witte rand van 2,5 cm. De regels bepalen de onderdelenlijst.

Onderdeel Aantal Richtprijs Opmerkingen
Arduino Uno of Nano 1 $5 Een Nano past veel prettiger in het grondvlak van 10 cm
IR-reflectiesensoren 2–4 $5 Randherkenning. Minstens één op elke voorhoek
VL53L0X 2–3 $10–15 Tegenstanderdetectie. Een smalle bundel wint van sonar in een ring
N20-motoren met encoder 2 $16 Hoge koppelverhouding — 1:100 of nog sterker gereduceerd. Snelheid is geen doel
TB6612FNG 1 $3
Chassis met stalen wig 1 $10–25 De wig is het wapen; het staal is ook het ballast
Accupakket 1 $10 Ook nuttige massa — leg hem boven de aandrijfwielen
Siliconen of goed-grijpende banden 2 $5 De waardevolste losse upgrade in de lijst

Totaal: ongeveer $65–90.

Twee aantekeningen die wedstrijden beslissen in plaats van alleen “het werkt”.

Het gewicht gaat boven de aandrijfwielen, tot aan de grens. Duwkracht is wrijving, en wrijving is de coëfficiënt maal de normaalkracht. Elke gram dat niet op een aangedreven band staat is verspild, en daarom wegen sumo-robots precies 500 g en ligt daarvan vrijwel alles op twee wielen.

Banden zijn belangrijker dan motoren. Een robot die zijn tractiegrens heeft bereikt wint niets met meer koppel — de wielen draaien gewoon door. Van hard plastic (µ ≈ 0,4) naar siliconen (µ ≈ 1,2 of beter) verdrievoudigt de beschikbare duwkracht voor vijf dollar, en dat haalt geen motorupgrade uit.

Bouwvolgorde

1 — Bepaal eerst de massa en de banden. Die bepalen je duwkracht vóórdat er één regel code bestaat. Mik op de grens van 500 g, met de massa laag en boven de aandrijfwielen; gebruik siliconen of zachte urethaanbanden, niet wat er bij de chassiskit zat. µ 1,2 tegenover µ 0,7 levert 72% meer duwkracht en kost de prijs van een set wielen.

2 — Stel af op koppel en controleer de blokkeerstroom. Sumo zit op het uiteinde van de motorcurve met het meeste koppel, rond 0,8 m/s aan het wiel in plaats van de 1,5 die een chassiskit aanneemt. Bepaal daarna wat twee motoren bij blokkering trekken — zo’n 3 A — en dimensioneer het pakket daarop in plaats van op de cruise-stroom. Een hele ronde is een aanhoudende blokkering.

3 — Laat hem bij de rand stoppen, alleen in de ring. Dit is het mijlpaal. Monteer reflectiesensoren op beide voorhoeken, zo ver naar voren als ze de witte lijn nog zien, en gekalibreerd op de werkelijke ring in plaats van op je bureau. Rijd op volle snelheid op de rand af, vijftig keer, vanuit elke hoek. Zolang dat niet foutloos werkt, heeft het geen zin een tegenstander toe te voegen — een robot die zichzelf de ring uit rijdt verliest zonder ooit geduwd te zijn.

4 — Lees de randsensoren elke lusronde. Vier vijfde van je reactieafstand zit in het wachten op de volgende lusiteratie, en één blokkerende afstandsmeting is 20 ms blindzijn op precies het verkeerde moment. Niet-blokkerende timing is de goedkoopste snelheidswinst die er is.

5 — Voeg tegenstanderdetectie toe. Een VL53L0X vooruit, en eventueel twee die op 45° naar buiten wijzen. De smalle bundel telt: een ultrasone sensor in een ring vindt vooral de ring.

6 — Schrijf het gedrag als expliciete toestanden. Zoeken, aanvallen, duwen, terugtrekken, waarbij de randreflex al het andere voorafgaat. Dit is een schoolvoorbeeld voor een toestandsmachine, want de randcontrole moet in elke toestand draaien en er mag geen pad door de code zijn waar dat niet zo is.

7 — Bouw de wig als laatste en blijf er altijd aan sleutelen. Het is het onderdeel met het grootste effect en het makkelijkst te wijzigen.

Het gedrag in één alinea

Begin met een verplichte vertraging — de meeste regelwerken eisen vijf seconden. Daarna zoek: draai op de plek of rij een kleine boog totdat de voorwaartse sensor iets aangeeft binnen ongeveer 40 cm. Val aan: rij er rechtstreels op af op vol vermogen. Duw totdat de afstand groter wordt (de ander is bewogen) of totdat je de ringrand detecteert. Trek je terug bij elke randdetectie: eerst volledig achteruit, stop, draai dan terug naar het midden van de ring. Terugtrekken gaat boven alles, vanuit elke toestand, op elk moment.

Het lastige is dat duwen en vastzitten er vanaf de voorsensor identiek uitzien. Heb je encoders, dan betekent een wielsnelheid van nul bij volle aansturing een blokkering, en dat is je signaal om terug te sturen en van een andere kant opnieuw te benaderen in plaats van te blijven schuren tot de accu leeg is.

Hardwaretips die ertoe doen

De wigpunt beslist wedstrijden. Dunne stalen of aluminiumen plaat, tot een scherpe kant geslepen, door iets stevigs een fractie van een millimeter boven de vloer gehouden. Op een soepele montage klimt hij over de tegenstander heen in plaats van eronder, en dat keert het teken van de hele gewichtsoverdrachtsberekening om.

Houd de voorkant laag. De wig van de tegenstander oefent een opwaartse kracht uit op je voorste punt (je wig), en hoeveel dat je kantelt hangt af van hoe hoog je zwaartepunt erboven staat. Hoge robots worden omgegooid door robots die ze niet harder konden duwen.

Geen zwenkwiel als je het kunt vermijden. Gewicht op een vrij draaiend wiel levert geen tractie. Twee aandrijfwielen en een glijderschoen met lage wrijving — een PTFE-knop of een afgeronde schroefkop — zetten bijna al je massa aan het werk.

Bescherm de bedrading. Dit is de enige robot op de site die bewust wordt geramd. Alles aan de buitenkant wordt geraakt; alles op een connector komt los.

Metalen tandwielkasten. Plastic tandwieloverbrengingen strippen in een robot waarvan blokkeren de normale bedrijfstoestand is, en een kapotte tandwielkast midden in een ronde is niet te onderscheiden van een lege batterij.

Hoe goed het eruit moet zien

Meting Typische build Wedstrijdniveau
Massa 400–500 g 499 g — precies de grens
Deel van de massa op aangedreven wielen 70% 90%+
Wrijvingscoëfficiënt van de banden 0,6–0,8 (rubber) 1,2–1,5 (silicone)
Duwkracht 2,5–4 N 6–7 N
Reactietijd van randherkenning 60–100 ms Onder 30 ms
Remweg vanuit volle snelheid 8–15 cm Onder 5 cm
Detectiebereik tegenstander 30–40 cm 60–80 cm

De reactietijd op de rand is het getal dat wedstrijden wint of verliest, en het effect is groter dan dat van de duwkracht. De witte rand van de ring is 2,5 cm breed. Een robot die met 0,5 m/s rijdt steekt die rand over in 50 ms — dus bij 100 ms reactietijd is de robot al buiten voordat hij klaar is met de beslissing om te stoppen.

Dat budget valt uiteen in leestijd van de sensor, lusperiode en remweg. Alle drie zijn aan te pakken: lees de randsensoren veel vaker dan al het andere, houd de regellus strak en rem in plaats van uit te rijden — de motor via de H-brug kortsluiten stopt de robot veel sneller dan de voeding wegnemen.

Het is handig om de tractiegrens als rekensom te formuleren. Met 500 g op twee aangedreven wielen en siliconen banden met µ = 1,4:

maximum pushing force = 0.5 kg x 9.81 x 1.4 = 6.9 N

Daarboven draaien de wielen ongeacht het motorkoppel — en daarom is een sumo-robot een tractieprobleem dat zich verkleedt als een motorprobleem.

Wat er misgaat

Symptoom Meest waarschijnlijke oorzaak
Rijdt zelf de ring uit Te snel voor het randbudget, of de randsensoren worden te langzaam uitgelezen
Wielen draaien, robot komt nergens De tractie begrenst de duwkracht, zoals bedoeld — voeg massa toe of wissel van banden
Verliest van een soortgelijke robot Hun wig kwam onder die van jou; bodemvrijheid, geen vermogen
Reset tijdens het duwen De blokkeerstroom laat de spanningsrail inzakken — budgeteer op blokkering
Ziet een rand die er niet is IR-licht uit de omgeving of een reflecterende ring; scherm de sensoren af en kalibreer ze opnieuw
Achtervolgt de ringrand in plaats van de tegenstander Bundel te breed — dat lost time-of-flight op
Valt erachteruit Geen randsensoren achterin
Stopt op de lijn en rijdt toch de ring uit Draaide weg terwijl hij nog bewoog; stop eerst helemaal

Zes van die acht zijn mechanische of meetfouten. Dat is dezelfde verdeling als bij de micromouse om precies dezelfde reden: het algoritme is het kleine deel.

Wil je de meettechniek en de stopgeometrie zonder de mechanische armbreuk-race, dan voert de obstakelvermijdingssimulator dezelfde remwegrekening uit met een voorwaartse sensor, en is de obstakelvermijdende robot de mildere build die het meeste van deze hardware deelt. Voor de aandrijvingsleer eronder begint het leertraject motorbesturing bij dimensionering en eindigt het bij odometrie.

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

100%
Bouw

Laat hem in de ring blijven

Bouw

Doel

Win een duwpartij

Doel

Componenten

Tutorials in deze route

Veelgestelde vragen

Wat is mini sumo?

Een robotgevechtsklasse waarin twee autonome robots proberen elkaar uit een ronde ring te duwen, zonder wapens en zonder schade door contact. Mini sumo begrenst de robot tot 500 gram en een grondvlak van 10 bij 10 centimeter, met onbeperkte hoogte, en de ring is een zwarte schijf van 77 centimeter met een witte rand van 25 millimeter die rondom de schijf geschilderd is. Een ronde eindigt zodra de behuizing van één robot de vloer buiten de ring raakt, en dat gebeurt veel vaker doordat je over de ringrand rijdt dan doordat je eruit geduwd wordt.

Waarom is er een gewichtsgrens als zwaardere robots harder duwen?

Omdat dat precies de reden is. De duwkracht op een kleine robot wordt begrensd door de wrijving — de wrijvingscoëfficiënt maal het gewicht op de aangedreven wielen — en dat getal is slechts ongeveer een kwart van wat de motoren zouden leveren. Een gewichtsgrens begrenst de duwkracht, en zo wordt de klasse geen wedstrijd om wie de grootste motoren heeft gekocht. Het betekent ook dat elke deelnemer op de grens gebouwd moet worden, want binnen de regels is massa de hulpbron: geef je 100 gram weg, dan kost dat je 20 procent van je duwkracht.

Heb ik encoders op de motoren nodig?

Niet voor een eerste robot. Sumo kent geen odometrie-eis — niets hoeft te weten waar het in de ring staat, alleen of het op het punt staat de ring te verlaten. Encoders worden later nuttig om te zien dat je vastloopt tegen een tegenstander in plaats van vrij te rijden; dat is een wezenlijk andere toestand en je gedragslogica wil die graag kennen. Begin zonder en voeg ze toe wanneer de toestandsmachine de informatie nodig heeft.

Ultrasoon of time-of-flight om de tegenstander te vinden?

Time-of-flight, in een ring. Een ultrasone bundel spreidt ongeveer 15 graden uit en kaatst terug op de vloer en elk vlak in de buurt, dus een zoekende robot vindt muren, tafels en de eigen ringrand. Een VL53L0X heeft een smalle kegel en leest in ongeveer 20 milliseconden zonder akoestische storing. Het klassieke alternatief is een paar analoge IR-sensoren met korte dracht die naar buiten wijzen: goedkoop en snel, maar ze zien donkere tegenstanders veel later dan lichte.

Hoe snel moet de robot nu werkelijk rijden?

Trager dan je wilt. Met 25 milliseconden latentie tussen meten en remmen en siliconen banden kan een robot waarvan de randsensor 40 millimeter vóór de as zit ongeveer 0,98 meter per seconde rijden voordat hij niet meer binnen de ringrand kan stoppen — en omdat een harde omzetting de wielen op de lagere wrijvingscoëfficiënt doet glijden, is ongeveer 0,8 meter per seconde het eerlijke getal. De meeste eerste robots worden gebouwd voor anderhalve meter per seconde en verliezen elke ronde aan de ringrand in plaats van aan de tegenstander.

Waarom verliest mijn robot van een robot die er hetzelfde uitziet?

Bijna altijd de voorkant — je wig. Twee robots van gelijke massa en gelijke grip duwen even hard totdat de een onder de andere komt, en als je 40 procent van het gewicht van de tegenstander optilt, wordt jouw duwkracht 2,3 keer die van de ander — want het gewicht dat je tilt telt mee aan je eigen tractie en wordt eraf getrokken bij de ander. Dat is een groter effect dan welke motor-, banden- of batterijverandering dan ook, en het wordt beslist door een fractie van een millimeter bodemvrijheid aan de wigpunt.