Innehållsförteckning:
- Tillbehör
- Steg 1: Konstruktion
- Steg 2: Kabeldragning
- Steg 3: Kontrollteori
- Steg 4: Använda MPU 6050
- Steg 5: Kodning
- Steg 6: Procedur för PID -inställning
- Steg 7: Avslutning
Video: Självbalanseringsrobot med två hjul: 7 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:38
Denna instruerbara kommer att gå igenom design- och byggprocessen för en självbalanserande robot. Som en anteckning vill jag bara säga att självbalanserande robotar inte är ett nytt koncept och att de har byggts och dokumenterats av andra. Jag vill använda detta tillfälle för att dela med mig av min tolkning av denna robot.
Vad är en självbalanserande robot?
En självbalanserande robot är ett system som använder tröghetsmätdata, samlad från en inbyggd sensor, för att kontinuerligt justera sin position för att hålla upprätt.
Hur fungerar det?
En enkel analogi att tänka på är en inverterad pendel. Där massans centrum är över svängpunkten. Men i vårt fall begränsar vi pendeln till 1 frihetsgrad genom att ha en rotationsaxel, i vårt fall rotationsaxeln för de två hjulen. Eftersom någon form av störning kommer att få roboten att falla, behöver vi en metod för att aktivt hålla roboten balanserad. Det är här vår slutna loop-algoritm (PID-styrenhet) spelar in, och vet i vilken riktning vår robot faller, vi kan justera rotationsriktningen för våra motorer för att hålla systemet balanserat.
Hur fungerar algoritmen med sluten slinga?
Grundprincipen för att hålla roboten balanserad är att om roboten faller fram kommer den att kompensera genom att flytta robotens botten framåt för att fånga sig själv och därför hålla sig vertikal. På samma sätt, om roboten faller bakåt kommer den att kompensera genom att flytta botten av roboten bakåt för att fånga sig själv.
Så vi måste göra två saker här, först måste vi beräkna lutningsvinkeln (rullen) som roboten upplever och som ett resultat måste vi styra rotationsriktningen för motorerna.
Hur mäter vi lutningsvinkeln?
För att mäta lutningsvinkeln kommer vi att använda en tröghetsmätningsenhet. Dessa moduler innehåller en accelerometer och gyroskop.
- Acceleratorn är en elektromagnetisk enhet som mäter rätt acceleration, detta är accelerationen av en kropp i en ögonblicksvila.
- Ett gyroskop är en elektromekanisk enhet som mäter vinkelhastighet och används för att bestämma enhetens orientering.
Problemet med att använda sådana sensorer är dock att:
- Acceleratorn är mycket bullrig men är konsekvent över tiden, vinkeln varierar med plötsliga horisontella rörelser
- Gyroskopvärdet, å andra sidan, kommer att glida över tiden, men initialt är det ganska exakt
För detta instruerbara kommer jag inte att implementera ett filter istället kommer jag att använda den inbyggda Digital Motion Processing (DMP). Andra har använt ett kompletterande filter för att få en smidig signal, du kan välja vilken metod du vill. eftersom roboten balanserar med endera implementeringen.
Tillbehör
Delar:
- Arduino Pro Mini 3.3V 8 med en 8 Mhz ATMEGA328
- FT232RL 3.3V 5.5V FTDI USB till TTL seriell adaptermodul
- GY-521-modul med MPU-6050
- Ett par N20 mikroväxelmotor 6V - 300rpm
- L298N motorförare
- LM2596S DC till DC buck -omvandlare
- Batteri (uppladdningsbart 9,7V Li-ion-batteri)
- Batterirem
- Två prototyper av kretskort
- Manliga och kvinnliga sidhuvudstifttrådar
Verktyg:
- Lödkolv och löd
- Nylon hex distanshållare
- Precisionsskruvmejselsats
- 3d skrivare
Steg 1: Konstruktion
Eftersom jag hade tillgång till en 3D -skrivare bestämde jag mig för att 3D -skriva ut chassit och använda standoffs för att ansluta allt.
Roboten består av 4 lager
- Bottenlagret ansluter motorerna och har monteringspunkter för L298N -motordrivmodulen
- Nästa lager rymmer prototypkortet med Arduino pro mini och huvuden lödda på den
- Det tredje lagret monterar IMU
- Det översta lagret, som jag kallar "stötfångarskiktet", höljer batteriet, buck -omvandlaren och en monetär switch
Min huvudsakliga designprincip var att hålla allt modulärt. Anledningen till detta var om något gick fel med en av komponenterna kunde jag enkelt byta ut det eller om jag behövde en komponent för ett annat projekt kan jag enkelt ta det utan att oroa mig för att inte kunna använda systemet igen.
Steg 2: Kabeldragning
Jag lödde några kvinnliga headerpints till en perf-board för att matcha med Arduino pro mini header pins. Efter detta lödde jag hanhuvudet för att låta åtkomst till I/O. Resten av komponenterna monterades på den 3D -tryckta ramen och anslöts med hjälp av bygelkablar.
Steg 3: Kontrollteori
Nu går vi vidare till kärnan i projektet. För att hålla roboten balanserad måste vi generera en lämplig styrsignal för att driva motorerna i rätt riktning och med rätt hastighet för att hålla roboten balanserad och stabil. För att göra detta kommer vi att använda en populär styrslingalgoritm som kallas en PID -styrenhet. Som akronymen antyder finns det tre termer för denna controller, dessa är proportionella, integrala och derivata termer. Var och en åtföljs av koefficienter som bestämmer deras inflytande på systemet. Den mest tidskrävande delen av implementeringen av regulatorn är ofta justeringen av vinsterna för varje unikt system för att få det mest optimala svaret.
- Proportionstermen multiplicerar direkt felet för att ge en utgång, så ju större fel desto större svar
- Den integrerade termen genererar ett svar baserat på en ackumulering av felet för att minska steady-state-felet. Ju längre systemet är i obalans, desto snabbare reagerar motorerna
- Derivatbegreppet är derivatet av felet som används för att förutsäga det framtida svaret och därigenom minskar det oscillationen på grund av överskridande av steady-state.
Grundprincipen för denna algoritm är att kontinuerligt beräkna lutningsvinkeln som är skillnaden mellan den önskade positionen och den aktuella positionen, detta kallas felet. Den använder sedan dessa felvärden och beräknar summan av proportionella, integrala och derivata svar för att få en utsignal, vilket är styrsignalerna som skickas till motorerna. Som ett resultat, om felet är stort, kommer styrsignalen som skickas till motorerna att rotera motorerna med hög hastighet för att komma till ett balanserat tillstånd. På samma sätt, om felet är litet, kommer styrsignalen att rotera motorernas låga varvtal för att hålla roboten balanserad.
Steg 4: Använda MPU 6050
MPU6050 bibliotek
github.com/jrowberg/i2cdevlib/tree/master/…
Kalibrering av förskjutningar Inte alla sensorer är exakta kopior av varandra. Som ett resultat, om du testar två MPU 6050 kan du få olika värden för accelerometern och gyroskopet när de placeras stilla på samma yta. För att övervinna denna konstanta vinkelförskjutning måste vi fira varje sensor vi använder. Kör detta skript:
www.i2cdevlib.com/forums/topic/96-arduino-…
skrivet av Luis Rodenas, kommer vi att få kompensationer. Förskjutningsfelen kan elimineras genom att definiera förskjutningsvärdena i rutinen setup ().
Använda Digital Motion Processor
MPU6050 innehåller en DMP (Digital Motion Processor).
Vad är en DMP? Du kan tänka dig DMP som en inbyggd mikrokontroller som bearbetar den komplexa rörelsen från 3-axlig gyroskop och 3-axlig accelerometer ombord på mpu6050, med sina egna rörelsefusionsalgoritmer. Avlastning av den bearbetning som annars skulle utföras av Arduino
Hur man använder det? För att ta reda på hur du använder DMP gå igenom exempelskissen MPU6050_DMP6 som följer med MPU6050-biblioteket (i Arduino IDE: File-> Exempel-> MPU6050-> MPU6050_DMP6). Detta är också ett bra tillfälle att kontrollera att din sensor verkligen fungerar och att ledningarna är korrekta
Steg 5: Kodning
Jag använde Arduino IDE och ett FTDI -gränssnitt för att programmera Arduino pro mini.
Med hjälp av exempelskissen (MPU6050_DMP6) som medföljer MPU6050 -biblioteket som min baskod lade jag till en PID () och MotorDriver () funktioner.
Lägg till biblioteket
- MPU6050: För att använda MPU6050 -sensorn måste vi ladda ner I2C -utvecklarbiblioteket från Jeff Rowberg och lägga till det i Arduino "bibliotek" -mappen som finns i programfilerna på din dator.
- Wire: Vi behöver också Wire -biblioteket för att vi ska kunna kommunicera med I2C -enheter.
Pseudokod
Inkludera bibliotek:
- Wire.h
- MPU6050
- I2Cdev.h
Initiera variabler, konstanter och objekt
Uppstart ()
- Ställ in stiftläge för styrning av motorer
- Ställ in pin -läge för status -LED
- Initiera MPU6050 och ställ in förskjutningsvärden
PID ()
Beräkna PID -värde
MotorDriver (PID -svar)
Använd PID -värde för att styra motorernas hastighet och riktning
Loop ()
- Hämta data från DMP
- Kalla PID () en MotorDriver () -funktioner
Steg 6: Procedur för PID -inställning
Detta är den mest tråkiga delen av projektet och kräver lite tålamod om du inte har mycket tur. Här är stegen:
- Ställ in I och D på 0
- Håll i roboten, justera P så att roboten bara börjar svänga kring balanspositionen
- Med P -set, öka I så att roboten accelererar snabbare när den är ur balans. Med P och jag är rätt inställda bör roboten kunna balansera sig själv i minst några sekunder, med viss svängning
- Slutligen, öka D minska oscillationen
Om det första försöket inte ger tillfredsställande resultat, upprepa stegen med ett annat värde på P. Var också medveten om att du kan finjustera PID-värdena efteråt för att ytterligare öka prestandan. Värdena här är beroende av hårdvaran, bli inte förvånad om du får mycket stora eller mycket små PID -värden.
Steg 7: Avslutning
Mikroväxelmotorerna som användes var långsamma att reagera på stora störningar och eftersom systemet var för lätt var det inte tillräckligt med tröghet för att få önskad pendeleffekt, så om roboten lutar sig framåt skulle den bara luta sig i en vinkel och köra framåt. Slutligen var 3D -tryckta hjul ett dåligt val eftersom de fortsätter att glida.
Förslag till förbättringar:
- Snabbare motorer med högre vridmoment, dvs för likströmsmotorer är högre spänningseffekt ju högre vridmoment
- få ett tyngre batteri eller bara flytta massan lite högre
- Byt ut 3D -tryckta hjul mot gummi för att få mer dragkraft
Rekommenderad:
2 -hjulig självbalanseringsrobot: 4 steg
Självbalanseringsrobot med två hjul: Enligt min ödmjuka uppfattning är du inte en riktig skapare, såvida du inte bygger din egen tvåhjuliga självbalanserande robot.:-) Så här är det … och, viktigast av allt, det fungerar !!! Det här projektet ser väldigt enkelt ut. Istället kräver det en god kunskapsnivå
Enkel Micro: bit Robot Med Lego Technics hjul: 5 steg
Simple Micro: bit Robot With Lego Technics Wheels: Den här instruerbara handlingen handlar om att använda ett mycket enkelt chassi med 2 stycken 5 mm perspex som jag klippte och borrade så att jag kunde få igång en Micro: bit robot så snabbt som möjligt. ställ in scenen Jag använde inga elektriska verktyg förutom en
Skapa en fjärrstyrd Arduino självbalanseringsrobot: B-robot EVO: 8 steg
Skapa en fjärrstyrd Arduino självbalanseringsrobot: B-robot EVO: ------------------------------------ -------------- UPPDATERING: det finns en ny och förbättrad version av denna robot här: B-roboten EVO, med nya funktioner! ------------ -------------------------------------- Hur fungerar det? B-ROBOT EVO är en fjärrkontroll kontrollera
Självbalanseringsrobot med PID -algoritm (STM MC): 9 steg
Självbalanseringsrobot med hjälp av PID -algoritm (STM MC): Nyligen har mycket arbete gjorts i självbalansering av objekt. Begreppet självbalansering började med balansering av inverterad pendel. Detta koncept utvidgades även till design av flygplan. I detta projekt har vi designat en liten mod
Bil med parallell krets (3 hjul): 8 steg
Bil med parallell krets (3 hjul): Den här bilen kan färdas i anständigt tempo över plana ytor och är en bra lektion om hur man ställer in en parallellkrets