BouwrouteExpertEen weekend

Bouw een zelfbalancerende robot met MPU6050 en PID

Een tweewielige robot die zelf opstaat, overeind blijft wanneer u hem duwt en op zijn plek op de vloer blijft staan in plaats van weg te drijven.

Technisch schema: Bouw een zelfbalancerende robot met MPU6050 en PIDθTILT → PID → DRIVE UNDER IT

Wat u bouwt

Een robot die op twee wielen staat en waarvan alleen rekenwerk hem overeind houdt.

De mechanische build is werkelijk eenvoudig — twee motoren, een frame, een sensor, een accu. Wat dit project de moeite waard maakt, is dat het regelprobleem geen zachte fouten kent. Een lijnvolger met matige versterkingen volgt de lijn nog steeds, alleen slecht. Een balancerende robot met matige versterkingen ligt op de grond. Die scherpte maakt dit de beste manier om PID werkelijk te begrijpen.

Aan het einde hebt u een robot die opstaat, een duwtje weerstaat en ongeveer blijft staan waar u hem hebt gezet.

Waarom het moeilijk is

Alle massa van de robot ligt boven de as. Daardoor is hij een omgekeerde slinger: rechtop is een evenwicht, net als een potlood dat op zijn punt balanceert evenwicht is — in principe reëel, zonder voortdurende correctie hopeloos. Kantel hem een beetje en de zwaartekracht levert een koppel dat hem nog verder kantelt, steeds sneller.

Het enige verweer van de robot is dat hij zijn eigen onderstel kan verplaatsen. De wielen vooruit rijden duwt de as terug onder het zwaartepunt en draait de behuizing weer rechtop. Zo ontstaat de tegenintuïtieve regel die het hele project bepaalt: om voorover niet te vallen, rijdt u vooruit.

Daaruit volgen twee gevolgen die alles hieronder vormgeven:

  1. U kunt de positie niet rechtstreeks regelen. De motoren aansturen op basis van de positiefout versnelt het onderstel van onder de massa vandaan, waardoor de robot valt in de richting tegenover die u hebt gevraagd. De positie moet via de helling worden geregeld.
  2. Er is een harde herstelgrens rond 35°. Daarvoor is meer versnelling nodig dan de wielen kunnen leveren voordat de behuizing de vloer bereikt, en geen versterking helpt.

Materialenlijst

Onderdeel Aantal Geschatte kosten Opmerkingen
Arduino Uno of Nano 1 $5 De binnenste lus wil 100–200 Hz, waarvoor een Uno ruim voldoende is
MPU-6050 1 $2 Stijf en waterpas gemonteerd, dicht bij de wielas
N20-encodermotoren 2 $16 Metalen tandwielkast, niet onderhandelbaar. Zie hieronder
TB6612FNG 1 $3 De spanningsval van ~2 V bij een L298N staat precies waar de fijne correcties thuishoren
2WD-onderstel 1 $10 Hoog en smal. Monteer de accu hoog — dit is tegenintuïtief
Accupakket 1 $10 2×18650. Deze vormt tevens de bruikbare massa

Totaal: ongeveer $45–60.

Drie van die keuzes zijn bepalend, en één verkeerde keuze maakt de robot niet slechts minder goed, maar onafstembaar.

Motoren met metalen tandwielkast. Een balancerende robot verandert honderden keren per seconde van richting in kleine stappen. Speling wordt bij elke omkering eenmaal opgebouwd, dus de dode zone van een kunststof tandwielkast valt precies waar de correctie moet werken. Het resultaat is een robot die rond de rechtopstand oscilleert en nooit stabiliseert, hoe zorgvuldig de versterkingen ook zijn afgesteld — en het lijkt overtuigend op een afstemmingsprobleem.

Een MOSFET-driver. Een L298N verliest ongeveer 2 V voordat de motor iets ziet, waardoor kleine correctieopdrachten onder de spanning vallen waarbij de motor überhaupt beweegt. Opnieuw een dode zone precies waar de fijne correcties thuishoren.

Accu hoog gemonteerd. Dit is de keuze waarvan mensen verrast zijn. Een hogere robot met massa bovenin valt langzamer — de periode van de slinger schaalt met de wortel van de lengte — waardoor de regellus meer tijd heeft om te reageren. Een lage, gedrongen balancerende robot is juist moeilijker.

Bouwvolgorde

Voer deze stappen in volgorde uit. Elke stap is afzonderlijk te controleren, wat enorm belangrijk is bij een project waarvan de eindstand binair is.

1 — Zorg voor een betrouwbare hellingshoek. Bekabel de MPU6050 en volg de helling met een MPU6050 lezen. Ga niet verder totdat de hoek bij rechtopstaan bij nul staat, bij een kanteling in de juiste richting verandert en bij een stilstaande robot stil blijft. Al het latere werk is op dit getal gebouwd.

2 — Zorg dat de hoek beweging overleeft. Een accelerometer alleen is onbruikbaar op een bewegende robot en een gyroscoop alleen wijkt binnen enkele seconden af. Het complementaire filter combineert beide in één rekenregel. Test het door de robot met de hand heen en weer te schudden zonder hem te draaien — de hoek mag nauwelijks veranderen.

3 — Stem de binnenste lus af in de simulator. Gebruik de balancingssimulator om voordat er hardware kan omvallen te begrijpen wat elke versterking doet. Zet de differentiaalversterking op nul bij een robot die op dat moment balanceert en zie de trilling groeien tot hij neervalt; die storing ziet u daar veel goedkopter dan op uw bureau.

4 — Laat hem opstaan. Schrijf de binnenste lus van cascaderende PID-balansregeling, met de buitenste lus uitgeschakeld. Succes is hier een robot die overeind blijft en mag dwalen. Probeer het dwalen nog niet te corrigeren.

5 — Voeg encoders en de buitenste lus toe. Laat kwadratuurtelling voor de werkelijke wielstand zorgen en schakel de buitenste lus in, zodat de robot op een plek blijft. Begin met een veel kleinere versterking dan logisch lijkt — het effect is indirect en de twee lussen kunnen elkaar gemakkelijk tegenspreken.

Hardware-opmerkingen die werkelijk ertoe doen

Monteer de accu hoog. Dit is tegenintuïtief en het is de nuttigste mechanische keuze in het project. Het zwaartepunt omhoog brengen vergroot de periode van de slinger, waardoor de robot langzamer valt en de lus meer kansen heeft hem op te vangen. Een korte robot met een laag zwaartepunt is veel moeilijker te balanceren dan een hoge.

Gebruik tandwielkasten van metaal. Een balancerende robot verandert honderden keren per seconde van richting. Motoren met kunststof tandwielkast hebben genoeg speling om bij elke omkering de eerste paar graden te verspillen aan niets, en de lus kan dat niet corrigeren. N20-encodermotoren zijn het gebruikelijke antwoord.

Gebruik een TB6612FNG, geen L298N. De TB6612FNG laat veel minder spanning vallen over de uitgangstrap. Bij een L298N vallen kleine correctieopdrachten onder de spanning waarbij de motor beweegt — waardoor een dode zone ontstaat precies waar de fijne correcties thuishoren.

Geef de motoren een eigen voeding. Een accupakket dat bij de stroom waarmee de motoren vastlopen inzakt, geeft de microcontroller tijdens een correctie een brown-out. De robot valt dan om redenen die niets met uw regellus te maken hebben, en dat is een ellendige situatie om te debuggen.

Tijdens het bouwen controleren

Controle Wat dit bewijst
De hoek leest ~0° wanneer u de robot met de hand rechtop houdt Er is geen montageafwijking overgebleven in de meting
Schudden zonder draaien verandert de hoek nauwelijks Het filter vertrouwt tijdens versnelling op de gyroscoop
Wielen rijden vooruit wanneer de robot voorover kantelt Het teken van de binnenste lus is juist
Robot weerstaat een duwtje en stabiliseert zonder grotere trilling De differentiaalversterking doet zijn werk
Robot stopt met afdrijven zodra de buitenste lus aanstaat Encoders en buitenste lus zijn correct bekabeld

Zo ziet goed eruit

Meting Net op de grens van balanceren Goed afgesteld
Snelheid binnenste lus (helling) 100 Hz 200–500 Hz
Snelheid buitenste lus (positie) 20 Hz 20–50 Hz — meerdere malen langzamer dan de binnenste lus
Hellingstrilling in rust ±3–5° Minder dan ±1°
Afwijking van het startpunt in 60 s 1–2 m Minder dan 30 cm
Herstel na een duwtje Een zachte por Een stevige duw
Constante van het complementaire filter 0,98 0,98–0,995, gekozen in plaats van overgenomen
Bedrijfstijd voordat hij wegdwaalt Seconden Onbeperkt

De verhouding tussen de loopsnelheden is het getal dat de meeste eerste builds verkeerd instellen. De binnenste lus houdt de helling vast; de buitenste lus vraagt om een vooroverneiging om te kunnen bewegen. Draait de buitenste lus ook maar in de buurt van de snelheid van de binnenste lus, dan jaagt hij een doel na dat de binnenste lus nog niet heeft bereikt en vechten beide. De buitenste lus moet vijf tot tien keer langzamer draaien. Dat is de werkende vuistregel.

De rij “Afwijking van het startpunt in 60 s” uit de tabel hierboven laat zien waarvoor de encoders dienen. Een robot met alleen een hellingslus balanceert prachtig en dwaalt door de ruimte, omdat niets hem vertelt waar hij is. Hij staat rechtop en is verdwaald. De buitenste positielus verandert hem van een demonstratie in een robot.

Tekenconventies: het onderdeel dat een avond kost

Vier tekens moeten overeenkomen en geen logische redenering leidt tot die tekens — u moet ze elk op de werkbank controleren, terwijl u de robot in uw hand houdt:

Controle Houd de robot vast en… Hij moet…
Teken van de IMU Kantel hem voorover Een positieve helling rapporteren (of consequent negatief — kies één)
Teken van de motor Geef een positieve uitgangswaarde op De wielen vooruit rijden
Teken van de binnenste lus Kantel hem voorover terwijl de lus draait De wielen vooruit aansturen om de val op te vangen
Teken van de buitenste lus Duw hem vanuit rust vooruit Achterover neigen om terug te keren

Krijgt u het derde teken omgekeerd, dan versnelt de robot zijn eigen val hevig in de richting waarin hij al ging. Dat is onmiskenbaar en het is de moeite waard om het met de wielen van de grond te testen.

Wanneer het niet werkt

Bijna elke storing is een van deze vijf dingen, en ze verschillen genoeg om uit elkaar te houden:

  • Stort meteen neer bij het opstarten — het teken van de binnenste lus is omgekeerd.
  • De trilling groeit tot hij valt — de differentiaalversterking is te laag, of D is berekend uit het verschil tussen twee hoekmetingen in plaats van uit de gyroscoopsnelheid.
  • Zoemt terwijl hij rechtop staat — de proportionele versterking is te hoog, of de lus draait te langzaam voor die versterkingen.
  • Zakt zonder tegenkracht naar de vloer — de proportionele versterking is te laag, of de motoren bereiken hun verzadiging.
  • Balanceert, maar rijdt weg — montageafwijking, met te weinig integraalwerking om die op te vangen.

De tabel met storingsmodi behandelt ze allemaal in detail, en u kunt ze bewust reproduceren in de simulator — de snelste manier om ze te leren herkennen.

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 / 16 klaar

100%
Bouw

Laat hem opstaan

Bouwstap

Doel

Laat hem op zijn plek blijven

Doel

Componenten

Tutorials in deze route

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

Hoe moeilijk is een zelfbalancerende robot als eerste project?

Het is een slecht eerste en een uitstekend derde project. Aan de bekabeling is niets moeilijk, maar het systeem is instabiel. Dat betekent dat er geen gedeeltelijk resultaat is — de robot staat of valt, en een verkeerd teken lijkt volkomen op slechte versterkingen zolang u niet weet waar u naar kijkt. Bouw eerst een lijnvolger, zodat u al vertrouwd bent met het afstemmen van PID en de motordrivers. Daarna wordt dit een gericht probleem rond één lus in plaats van vijf onbekenden tegelijk.

Waarom trilt mijn balancerende robot in plaats van stil te staan?

Meestal is de proportionele versterking te hoog voor de snelheid van uw lus, of is er speling in de tandwielkast. Verlaag eerst Kp. Blijft de trilling bij lage versterking aanwezig, observeer dan de wielen op het moment dat ze van richting veranderen: ziet u vóór de beweging een zichtbare dode zone, dan is de tandwielkast het probleem en lost een motor met metalen tandwielen op wat geen afstelling kan herstellen.

Heb ik werkelijk encoders nodig?

Niet om op te staan. De binnenste lus heeft alleen een hellingshoek nodig, dus een robot zonder encoders balanceert prima — hij drijft alleen weg, omdat niets hem vertelt waar hij is. Encoders zijn nodig voor de buitenste lus om de positie vast te houden. Bouw hem desgewenst eerst zonder, laat hem balanceren en voeg ze daarna toe.

Hoe snel moet de regellus draaien?

200 Hz is een verstandige ondergrens voor de binnenste lus en sneller is beter. De natuurlijke valtijd van de robot bepaalt de deadline: een kleine robot gaat in ruim geen seconde van rechtop naar onherstelbaar, dus een lus op 50 Hz heeft maar heel weinig kansen om in te grijpen. Voer hem uit vanaf een hardwaretimer in plaats van delay(), want consistente timing is voor de differentiaalterm belangrijker dan de precieze snelheid.

Waarom balanceert hij, maar rijdt hij langzaam door de ruimte?

Door de montageafwijking van de IMU. Als de sensor een graad van de verticaal afwijkt, houdt de lus die verkeerde hoek vast, en een constante vooroverneiging betekent constante versnelling. Meet de verschuiving terwijl u de robot echt met de hand rechtop houdt, haal deze verschuiving als constante eraf en laat de integraalterm opvangen wat overblijft. U kunt dit exact reproduceren met de verschuivingsschuifregelaar in de simulator.