Bouw een Mecanum-robot die zijwaarts rijdt
Een robot die een vierkant van 1 m zijwaarts aflegt, binnen 5 cm terugkomt zonder ooit te draaien en dezelfde kant op blijft rijden over de vloer terwijl je hem laat draaien.
Wat je bouwt
Een vierwielerrobot die op de vloer elke richting op kan zonder eerst te draaien en kan draaien zonder te veranderen waar hij heen gaat. Duw hem zijwaarts door een gang waarin hij net past; houd een camera op iets gericht terwijl je om dat punt heen beweegt; corrigeer 3 cm van een lijn door 3 cm te stappen, in plaats van een boog uit te rijden en weer terug.
Dit is de eerste robot op deze site met drie onafhankelijk regelbare snelheden in plaats van twee. Het is ook de eerste waarvan de aandrijving werkelijk moeilijker is dan de sensoren, en daarom bestaat vrijwel de hele bouw uit motoren, encoders en regellussen.
De acceptatietest is bewust bot: rij een vierkant van 1 m zijwaarts af en kom binnen 5 cm terug met dezelfde koers. Geen enkele robot met differentiële aandrijving kan die test zelfs maar proberen.
Het getal dat dit project bepaalt
Alles in deze bouw komt terug op één constante:
k = lx + ly
waar lx de halve wielbasis is (van vooras tot achteras, gehalveerd) en ly de halve spoorbreedte (van linker- tot rechterwielen, gehalveerd). In de referentieopbouw zijn dat 75 mm en 85 mm, dus k = 0,160 m.
Dat ene getal koppelt rotatie aan de wielen. Is het verkeerd, dan rijdt de robot nog steeds — maar een zuivere spinopdracht kruipt over de vloer en een zuivere zijwaartse beweging maakt een bocht, omdat rotatie en translatie in elkaar overlopen. Meet van wielmiddelpunt tot wielmiddelpunt, niet vanaf de chassisplaat; die is meestal breder dan je denkt.
De andere getallen die je voor de start met marker op het chassis wilt schrijven:
| Grootheid | Referentieopbouw | Herkomst |
|---|---|---|
| Wielstraal r | 48,5 mm | Mecanum-wielen van 97 mm |
| Tellingen per wielomwenteling | 1440 | 12 CPR × 30:1 × 4 kwadratuurranden |
| Meter per telling | 212 µm | 2πr ÷ 1440 |
| Maximale wielsnelheid V_MAX | 0,60 m/s | Op blokken gemeten, daarna 15% verlaagd |
| Diagonale bovengrens | 0,424 m/s | V_MAX ÷ √2, en geen verbetering van de motor haalt die grens weg |
| Acceleratiebovengrens | 5,9 m/s² | μg/√2 bij μ = 0,85 — massa valt weg |
Stuklijst
| Onderdeel | Aantal | Geschatte kosten | Opmerkingen |
|---|---|---|---|
| Mecanum-wielen, 80 of 97 mm | 4 | £28–70 | Koop ze als set van vier — twee linkshandige en twee rechtshandige |
| N20-tandwielmotor met encoder, 30:1 | 4 | £9–14 per stuk | Gebruik gelijke motoren. 100–250 rpm aan het wiel is het bruikbare bereik |
| TB6612FNG dubbele H-brug | 2 | £4–8 per stuk | Een L298N werkt en verliest ~3 V; op een 2S-pakket is dat het meeste van je snelheid |
| ESP32-ontwikkelbord | 1 | £6–12 | Vier PWM-kanalen, vier encoder-interruptparen en gratis Wi-Fi-telemetrie |
| MPU6050-IMU | 1 | £2–4 | Monteer hem vlak, uit de buurt van de motoren, op de middellijn van het chassis |
| 2S LiPo, 1500–2200 mAh, 25C | 1 | £12–20 | Kies op stroom, niet op capaciteit — vier motoren vragen bij vastlopen samen ~5 A |
| 5 V-BEC of buck-converter | 1 | £3–5 | Voed de ESP32 niet vanaf de motorvoeding |
| Chassisplaat, 200 × 180 mm | 1 | £10–25 | Lasergesneden acryl, 3 mm aluminium of zelf snijden |
| Motorhouders, naafstukken, bevestigers | 1 set | £8–15 | Pas de boring van de naaf op de motoras — 3, 4 of 6 mm |
| Bulkcondensator, 470 µF | 2 | £1 | Eén over de motorvoeding van elke motordriver |
£90–170 in totaal. De wielen en het viervoudige aantal motoren zijn de reden dat een £50-robot met twee wielen hier uiteindelijk deze robot wordt.
Hoe alles samenhangt
2S LiPo ──┬── 470 µF ── TB6612FNG #1 ── FL motor ── FL encoder ─┐
│ └── FR motor ── FR encoder ─┤
├── 470 µF ── TB6612FNG #2 ── RL motor ── RL encoder ─┼── ESP32
│ └── RR motor ── RR encoder ─┘ (4 PWM,
└── 5 V BEC ──────────────────────────────── ESP32 ────── 8 GPIO,
│ I²C)
MPU6050 ── I²C ─┘
Drie bedradingskeuzes zijn niet voor de hand liggend:
- De ESP32 krijgt zijn eigen spanningsregelaar. Vier motoren die tegelijk starten laten het pakket hard inzakken, waardoor een besturingseenheid op dezelfde baan brown-out krijgt en tijdens een commando herstart. Het lijkt precies op een firmwarecrash. Lees de tutorial over het stroombudget voordat je de schuld op je code legt.
- Een bulkcondensator over elke motordriver. 470 µF dicht bij het bord. H-bruggen trekken stroom in korte pieken en de inductie van de leiding zet die pieken om in overspanningen.
- De IMU gaat op de middellijn, vlak en zo ver van de motoren als het chassis toelaat. Yaw-drift is al slecht genoeg zonder een magnetisch veld van vier motoren erbij.
Bouw hem in mijlpalen
Elke mijlpaal heeft een test. Draag een mislukking niet verder — bij een vierwielerrobot vermenigvuldigen ze zich.
1. Wielen monteren en de X-controle
Monteer de vier wielen en ga recht boven de robot staan. Volg de lijn van de rollen die je bovenop elk wiel ziet.
Test: die vier lijnen wijzen naar het midden van de robot en vormen een X. Vormen ze een ruit, verwissel dan twee wielen diagonaal. Geslaagd: een X. Dit is een controle van vijf seconden die een dag bespaart.
2. Elke motor afzonderlijk
Sluit alle vier aan en schrijf een sketch die één wiel tegelijk een seconde lang op 40% laat draaien.
Test: roep ze één voor één aan en bevestig dat het juiste wiel de juiste kant op draait. Geslaagd: vier wielen, vier juiste richtingen, geen verwisselde paren. Herstel de bedrading in hardware, niet met minteken in code — anders raak je het overzicht kwijt.
3. Encoders
Draai elk wiel met de hand één omwenteling.
Test: druk de telling af. Geslaagd: binnen 2% van 1440 en positief wanneer het wiel vooruit draait. Een telling die springt of terugloopt betekent dat je op één kanaal in plaats van twee onderbreekt, of dat je een volatile long leest zonder interrupts uit te schakelen.
4. Kinematica op blokken
Zet de robot op blokken en geef een zuivere zijwaartse beweging op.
Test: diagonale paren werken tegen elkaar in — voor links en achter rechts gaan de ene kant op, voor rechts en achter links de andere kant. Geslaagd: precies dat patroon. Geef daarna een zuivere spinopdracht: de linkerkant de ene kant op, de rechterkant de andere. Is een motor het oneens, dan staat die in de verkeerde hoek en heeft stap 1 je misleid.
5. Eén snelheidsregellus
Stel feedforward en daarna PI in op één wiel, eerst op blokken en daarna onder belasting.
Test: geef 0,3 m/s op en druk met een vinger tegen de band. Geslaagd: de snelheid blijft gelijk en de PWM stijgt zichtbaar. Doe dit één keer goed; de andere drie zijn kopieën met hun eigen kS en kV.
6. Alle vier op een rechte lijn
Vier regellussen, 100 Hz, op de vloer. Rij 3 m rechtdoor.
Test: meet de zijdelingse drift aan het einde. Geslaagd: minder dan 20 mm en reproduceerbaar over drie ritten. Bij open lus is dit doorgaans 80–200 mm en elke keer anders.
7. Rij 1 m zijwaarts
Test: rij precies één meter zijwaarts en meet zowel de afstand als de koersverandering. Geslaagd: binnen 5 cm en de koers binnen 3°. Een consistente bocht betekent dat de constante k verkeerd is; een willekeurige bocht betekent dat een snelheidsregellus niet vasthoudt.
8. IMU en veldgeoriënteerd rijden
Kalibreer de bias bij het opstarten en voeg de resetknop voor de koers toe.
Test: houd de stuurknuppel naar voren en draai de robot met de hand een volledige omwenteling. Geslaagd: hij blijft dezelfde kant op over de vloer rijden. In stilstand drift yaw minder dan 3° per minuut.
9. Het vierkant
De acceptatietest. Rij 1 m vooruit, 1 m naar rechts, 1 m terug en 1 m naar links, zonder ergens een rotatie op te geven.
Test: afstand tot het startpunt en koersverandering. Geslaagd: binnen 5 cm en 3°.
Hoe een goed resultaat eruitziet
| Meting | Eerste poging, open lus | Afgesteld, gesloten lus |
|---|---|---|
| Zijdelingse drift over een rechte lijn van 3 m | 80–200 mm, varieert met de accu | Minder dan 20 mm, reproduceerbaar |
| Nauwkeurigheid van 1 m zijwaarts rijden | 10–20 cm, met een zichtbare bocht | Binnen 5 cm |
| Koersverandering over het zijwaartse vierkant | 10–30° | Minder dan 3° |
| Maximale diagonale snelheid | Wat overblijft bij verzadiging | 0,42 m/s — de √2-grens, volledig benut |
| Snelheid wanneer het pakket inzakt van 8,4 → 7,0 V | Daalt ~17% | Blijft gelijk totdat de motoren verzadigd raken |
| Odometriefout over het vierkant | Niet het meten waard | 2–5 cm op een goede vloer, veel erger op een stoffige |
Die laatste rij is eerlijk in plaats van teleurstellend. Bij deze aandrijving is het slippen van de rollen het mechanisme, dus de odometrie is het zwakste getal op de robot, zelfs wanneer alles werkt. Veranker die verwachting in je ontwerp in plaats van ernaar te jagen.
Hardware-opmerkingen die ertoe doen
De links-/rechthandigheid is een eigenschap van de set. Twee losse wielen die apart uit dezelfde advertentie worden besteld, hebben vaak dezelfde handigheid. Controleer dat voordat je boort.
Elke rol moet vrij kunnen draaien. Tik er met de hand tegen voordat je de wielen monteert. Een vastgelopen rol verandert die hoek in een gewoon wiel dat 45° af wijst, met onderbrekingen; dat leest precies als een softwarebug.
Mecanum-wielen zijn zwaar. 180–400 g per stuk, dus tot 1,6 kg van de robot bestaat uit wielen. Dat is roterende massa aan de uiteinden van de hefboomsarmen. De robot voelt daardoor traag en daarom is de acceleratiebovengrens belangrijk.
De vloer is een component. Gepolierd beton en vinyl hebben ongeveer μ = 0,8. Een stoffige sportvloer, een laag hairspray die iemand op een andere robot gebruikte of een naad in het linoleum halveren die waarde lokaal, waardoor het gedrag van de robot verandert terwijl hij erover rijdt. Bekijk wat μ = 0,25 doet voordat je de afstelling de schuld geeft.
Als het misgaat
| Symptoom | Oorzaak | Oplossing |
|---|---|---|
| Vooruit goed, maar bij zijwaarts rijden maakt hij een bocht en draait hij | Een wiel staat in de verkeerde hoek | Doe de X-controle; het kinematische restsignaal is groot en constant |
| Rijdt de andere kant op dan het commando | Alle vier wielen zijn gespiegeld | Verwissel het linkerpaar met het rechterpaar |
| Ook draaien op de plek verplaatst hem | k verkeerd of gemeten op het chassis | Meet opnieuw van wielmiddelpunt tot wielmiddelpunt |
| Robot reset wanneer alle vier motoren starten | Brown-out, geen crash | Eigen spanningsregelaar voor de ESP32; bulkcondensatoren; controleer de inwendige weerstand van het pakket |
| Diagonaal veel langzamer dan rechtdoor | De √2-grens — werkt zoals ontworpen | Niets te repareren |
| Leunt bij elke automatische regeling uit de bochten | Per motor wordt de regeling begrensd in plaats van het commando geschaald | Schaal op basis van het slechtste wiel |
| Rijd goed met de hand, maar hopeloos zelfstandig | Odometrie, niet de regeling | IMU voor de koers; houd ritten kort; overweeg dode wielen |
| Eén wiel zit altijd verzadigd | Te hoge opdracht of die motor is de zwakste | Verlaag V_MAX tot wat alle vier echt kunnen vasthouden |
| Encodertellingen drijven over minuten | Overgeslagen randen bij hoge snelheid | Onderbreek op beide kanalen; controleer of de ISR kort is |
Waar je daarna kunt gaan
Dode wielen. Twee of drie ongekrachtte omnidirectionele wielen op veren, elk met een eigen encoder. Ze dragen geen aandrijfkoppel en slippen dus niet, en ze maken van het slechtste getal op deze robot het beste.
Holonome padvolging. Pure pursuit en Stanley gaan uit van een bestuurbare robot met conventionele besturing. Een basis die zijwaarts kan rijden, kan beter — volg de positie op het pad en de koers onafhankelijk, want je hebt aparte actuatoren daarvoor.
Een camera op een basis die de koers vasthoudt. De natuurlijke combinatie: een beeldverwerkingspipeline is veel eenvoudiger wanneer de camera op het doel kan blijven wijzen terwijl de basis van positie verandert. Daar is holonome aandrijving werkelijk voor bedoeld.
ROS 2. Deze aandrijving is de eerste hier waarin het veld linear.y van cmd_vel — door een robot met differentiële aandrijving expliciet genegeerd — eindelijk betekenis krijgt. Het vervangen van de twist-to-wheelsfunctie door de vierregelige Mecanum-versie is het meeste werk.
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 / 17 klaar
Componenten
- ChassisMecanum-wheelsetVrije roljes onder 45° maken van vier gewone motoren een robot die zijwaarts kan bewegen.
- 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.
- ControllerESP32Een microcontroller met twee kernen, Wi-Fi en Bluetooth; de draadloze stap omhoog vanaf een Uno.
- SensorMPU-6050 IMUEen zesassige bewegingssensor—zo voelt een robot zijn eigen kanteling, draaiing en versnelling.
- VoedingAccu- en voedingspakket voor robotsHet verschil tussen een robot die blijft draaien en een robot die steeds opnieuw opstart.
Tutorials in deze route
- Beginner · 25 minHolonome aandrijvingen: omni, mecanum en swerve vergelekenVier aandrijflijnen, drie vrijheidsgraden, en wat elke daarvoor van je vraagt.
- Gevorderd · 35 minMecanum-wielkinematica: vier wielen, drie assenEén rol op 45° levert de hele matrix op, plus een vierde vergelijking die niemand gebruikt.
- Gevorderd · 35 minGesloten-luswielsnelheidsregeling met encodersDe voorafsturing doet het werk, de integrator ruimt op, en de robot rijdt eindelijk recht.
- Gevorderd · 25 minVeldgeoriënteerde regeling: laat vooruit ook vooruit zijnDraai de stick met minus de richting, en de robot houdt op met discussiëren met de bestuurder.
- Beginner · 17 min lezenKwadratuurencoders lezen voor afstand en snelheidMaak van kwadratuurencoderpulsen betrouwbare metingen van wielrichting, afstand en snelheid.
- Gevorderd · 30 minWielslip: waarom odometrie afdrijft en hoe je eraan werktElke odometriepagina zegt dat slip de schatting verpest. Dit is wat slip is en wat het kost.
- Beginner · 30 minWaarom je robot reset zodra de motoren startenDe reset die op een codebug lijkt, is vrijwel altijd de batterij. Budgetteer de stroom en meet daarna de spanningsval.
- Beginner · 30 minWaarom delay() robots saboteert: timing met millis()Een robot die in delay() staat is blind. Vervang hem door millis() en krijg de overflowvergelijking goed.
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
Kan ik dit bouwen met een Arduino Uno?
Niet comfortabel, en de reden is het aantal pinnen, niet de rekenkracht. Vier wielen hebben vier PWM-uitgangen nodig en vier kwadratuur-encoders vier pinparen die interrupts kunnen verwerken. Een Uno heeft zes PWM-pinnen verdeeld over drie timers — en zodra je de Servo-bibliotheek of tone() gebruikt, stoppen er twee met werken — en precies twee externe interrupt-pinnen. Je kunt het oplossen met pin-change-interrupts en één encoder opgeven, maar dan vecht je het hele weekend met het bord in plaats van met de robot. Een ESP32 of Mega 2560 kost een paar pond meer en neemt het hele probleem weg. Deze bouw gebruikt een ESP32 omdat die ook Wi-Fi-telemetrie geeft, echt nuttig wanneer je vier regellussen tegelijk afstelt.
Hoeveel kost het bouwen van een mecanum-robot?
Rond £90–170, afhankelijk van de wielgrootte en motorkwaliteit; dat is ongeveer tweemaal een vergelijkbare tweekielerrobot. De stijging zit op voorspelbare plekken: vier mecanum-wielen in plaats van vier gewone wielen is de grootste post, vier motoren in plaats van twee, vier H-brugkanalen, vier encoderkabels en een grotere accu omdat vier vastgelopen tandwielmotoren tweemaal de stroom in het zwaarste geval vragen. De verhoging van het budget voor de besturingseenheid verrast mensen — reserveer daarvoor aan het begin, niet nadat het chassis is geboord.
Waarom rijdt mijn mecanum-robot goed vooruit maar draait hij bij zijwaarts rijden?
Eén wiel staat in de verkeerde hoek en dat is veruit de meest voorkomende fout bij het bouwen van een mecanum-robot. Vooruit lijkt normaal omdat de zijwaartse componenten elkaar nog grotendeels opheffen; bij zijwaarts rijden wordt de fout zichtbaar, omdat het verkeerd gemonteerde wiel dwars op het commando duwt in plaats van ermee mee. Ga boven de robot staan, kijk recht naar beneden en volg de rollen die je op elk wiel ziet: die vier lijnen moeten naar het midden van de robot wijzen en een X vormen. Vormen ze een ruit, verwissel dan twee wielen diagonaal. Je kunt precies zien wat een verkeerd gemonteerd wiel doet, nog voordat je er zelf een hebt, via de voorinstelling in de simulator voor één achterwaarts gemonteerd wiel.
Heb ik de IMU nodig?
Voor de zelfstandige tests niet — de robot rijdt zijn vierkant ook zonder IMU. Voor handmatig besturen wel, binnen ongeveer tien seconden na het overnemen van de besturingseenheid. Een holonome robot kan de ene kant op wijzen terwijl hij de andere kant op beweegt, dus een mens raakt vrijwel meteen de weg kwijt. Veldgeoriënteerde regeling lost dat op met één rotatiematrix en heeft daarvoor een yaw-hoek nodig. Het is een onderdeel van £2 en zes regels code, en elk team dat het oversloeg voegde het toe nadat iemand de robot voor de eerste keer tegen een tafel had gereden.
Hoe nauwkeurig is de odometrie op een mecanum-basis?
Minder nauwkeurig dan op de tweekielerrobots op deze site, en dat is geen afstemprobleem. De rollen slippen om zijwaartse beweging mogelijk te maken, dus een wielencoder meet het wiel en niet noodzakelijk de vloer. Verwacht dat de voorwaartse schatting op basis van de eigen beweging ongeveer zo goed is als bij elke robot met differentiële aandrijving en dat de zijwaartse schatting op basis van de eigen beweging merkbaar slechter is — enkele procenten op een goede vloer, veel meer op een stoffige. Plan daarop: gebruik de IMU voor de koers, houd zelfstandige ritten kort en voeg als de robot echt moet weten waar hij is ongekrachtte omnidirectionele wielen toe die geen aandrijfkoppel dragen en dus niet slippen.
Kan deze robot dingen duwen?
Slecht. Een mecanum-wiel kan alleen grijpen langs de as van zijn rol bij 45°, wrijving begrenst de volledige krachtvector en alleen de component langs de rolrichting verplaatst je — je krijgt dus ongeveer 71 procent van de tractie die dezelfde robot op gewone wielen zou hebben, nog zonder rekening te houden met het feit dat rolrubber meestal minder grip heeft dan een band. Meer gewicht helpt niet, omdat meer massa evenredig meer wrijving en evenredig meer traagheid oplevert en die elkaar exact opheffen. Als duwen het punt is, bouw dan een mini-sumo op gewone wielen; die wint elke keer.