INHOUDSOPGAWE:

Twee-wiel self-balanserende robot: 7 stappe
Twee-wiel self-balanserende robot: 7 stappe

Video: Twee-wiel self-balanserende robot: 7 stappe

Video: Twee-wiel self-balanserende robot: 7 stappe
Video: Makeblock Untimate Robot Kit Part 2 : Robtic Arm Explaine, Software, Code App and Having Fun demo 2024, November
Anonim
Selfbalanserende robot met twee wiele
Selfbalanserende robot met twee wiele

Hierdie instruksies gaan deur die ontwerp- en bouproses vir 'n selfbalanserende robot. As 'n nota wil ek net sê dat selfbalanserende robotte nie 'n nuwe konsep is nie en dat dit deur ander gebou en gedokumenteer is. Ek wil hierdie geleentheid gebruik om my interpretasie van hierdie robot met u te deel.

Wat is 'n selfbalanserende robot?

'N Selfbalanserende robot is 'n stelsel wat traagmeetdata gebruik, wat van 'n ingeboude sensor ingesamel is, om sy posisie deurlopend aan te pas om regop te bly.

Hoe werk dit?

'N Eenvoudige analogie om te oorweeg, is 'n omgekeerde slinger. Waar die massamiddelpunt bo die spilpunt is. In ons geval beperk ons egter die slinger tot 1 vryheidsgraad deur een rotasie -as te hê, in ons geval die rotasie -as van die twee wiele. Aangesien enige versteuring die robot laat val, het ons 'n metode nodig om die robot aktief in balans te hou. Dit is waar ons geslote lus-algoritme (PID-kontroleerder) ter sprake kom, omdat ons weet in watter rigting ons robot val, ons die draairigting van ons motors kan aanpas om die stelsel gebalanseerd te hou.

Hoe werk die geslote lus-algoritme?

Die basiese beginsel om die robot in balans te hou, is dat as die robot vorentoe val, dit vergoed word deur die onderkant van die robot vorentoe te beweeg om homself te vang en dus vertikaal te bly. Net so, as die robot agteruit val, sal dit vergoed word deur die onderkant van die robot agteruit te beweeg om homself te vang.

Dus, ons moet hier twee dinge doen, eerstens moet ons die hellingshoek (rol) wat die robot ondervind, bereken, en gevolglik moet ons die draairigting van die motors beheer.

Hoe sal ons die hellingshoek meet?

Om die hellingshoek te meet, gebruik ons 'n traagheidseenheid. Hierdie modules bevat 'n versnellingsmeter en 'n gyroscoop.

  • Die versnellingsmeter is 'n elektromagnetiese toestel wat die korrekte versnelling meet, dit is die versnelling van 'n liggaam in 'n oombliklike rusraamwerk.
  • 'N Gyroscoop is 'n elektromeganiese toestel wat hoeksnelheid meet en word gebruik om die oriëntasie van die toestel te bepaal.

Die probleem met die gebruik van sulke sensors is egter dat:

  • Die versnellingsmeter is baie raserig, maar is konsekwent oor tyd; die hoek wissel met skielike horisontale bewegings
  • Die gyroscoopwaarde, aan die ander kant, sal mettertyd daal, maar aanvanklik is dit redelik akkuraat

Vir hierdie instruksies gaan ek nie 'n filter implementeer nie, maar ek gebruik die ingeboude Digital Motion Processing (DMP). Ander het 'n aanvullende filter gebruik om 'n gladde sein te kry; u kan die metode kies wat u wil. die robot balanseer met die implementering daarvan.

Voorrade

Dele:

  1. Arduino Pro Mini 3.3V 8 met 'n 8 Mhz ATMEGA328
  2. FT232RL 3.3V 5.5V FTDI USB na TTL seriële adapter module
  3. GY-521-module met MPU-6050
  4. 'N Paar N20 -mikrotandmotor 6V - 300 rpm
  5. L298N motorbestuurder
  6. LM2596S DC na DC boksomskakelaar
  7. Battery (herlaaibare 9.7V Li-ion battery pack)
  8. Battery band
  9. Twee prototipe PCB -stroombane
  10. Manlike en vroulike kopstukke se drade

Gereedskap:

  1. Soldeerbout en soldeer
  2. Nylon hex -afstandhouer
  3. Presisie skroewedraaier stel
  4. 3D -drukker

Stap 1: Konstruksie

Aangesien ek toegang tot 'n 3D -drukker gehad het, het ek besluit om die onderstel in 3D te druk en afwykings te gebruik om alles met mekaar te verbind.

Die robot bestaan uit 4 lae

  1. Die onderste laag verbind die motors en het bevestigingspunte vir die L298N -motorbestuurdermodule
  2. Die volgende laag bevat die prototipe -bord met die Arduino pro mini en koppe daaraan gesoldeer
  3. Die derde laag monteer die IMU
  4. Die boonste laag, wat ek die 'bufferlaag' noem, hou die battery, die boksomskakelaar en 'n geldelike skakelaar in

My belangrikste ontwerpbeginsel was om alles modulêr te hou. Die rede hiervoor was dat as daar iets verkeerd gaan met een van die komponente, ek dit maklik kan vervang, of as ek 'n komponent vir 'n ander projek nodig het, kan ek dit maklik neem sonder om bekommerd te wees dat ek nie weer die stelsel kan gebruik nie.

Stap 2: Bedrading

Bedrading
Bedrading

Ek het 'n paar vroulike kopstukke aan 'n perf-board gesoldeer om by die Arduino pro mini-kopstukpenne te pas. Hierna het ek 'n manlike kopstuk aan die bord vasgemaak om toegang tot die I/O te verkry. Die res van die komponente is op die 3D -gedrukte raam gemonteer en met springdrade verbind.

Stap 3: Beheerteorie

Nou gaan ons oor na die kern van die projek. Om die robot in balans te hou, moet ons 'n geskikte beheersignaal genereer om die motors in die regte rigting en op die regte spoed te dryf om die robot gebalanseerd en stabiel te hou. Om dit te doen, gebruik ons 'n gewilde kontrolelus -algoritme wat bekend staan as 'n PID -beheerder. Soos die akroniem aandui, is daar drie terme vir hierdie kontroleerder, dit is die proporsionele, integrale en afgeleide terme. Elkeen word vergesel van koëffisiënte wat hul invloed op die stelsel bepaal. Die mees tydrowende deel van die implementering van die kontroleerder is dikwels die afstemming van die winste vir elke unieke stelsel om die beste antwoord te kry.

  • Die proporsionele term vermenigvuldig die fout direk om 'n uitset te gee, dus hoe groter die fout hoe groter is die reaksie
  • Die integrale term genereer 'n antwoord gebaseer op 'n opeenhoping van die fout om die steady-state fout te verminder. Hoe langer die stelsel ongebalanseerd is, hoe vinniger reageer die motors
  • Die afgeleide term is die afgeleide van die fout wat gebruik word om die toekomstige reaksie te voorspel, en sodoende verminder dit die ossillasie as gevolg van die oorskryding van die bestendige toestand.

Die basiese beginsel van hierdie algoritme is om die hellingshoek voortdurend te bereken, wat die verskil is tussen die gewenste posisie en die huidige posisie, dit staan bekend as die fout. Dit gebruik dan hierdie foutwaardes en bereken die som van die proporsionele, integrale en afgeleide reaksies om 'n uitset te kry, dit is die beheerseine wat na die motors gestuur word. As gevolg hiervan, as die fout groot is, sal die stuursein wat na die motors gestuur word, die motors teen hoë spoed draai om in 'n gebalanseerde toestand te kom. Net so, as die fout klein is, draai die beheersignaal die motors teen 'n lae spoed om die robot gebalanseerd te hou.

Stap 4: Gebruik MPU 6050

MPU6050 -biblioteek

github.com/jrowberg/i2cdevlib/tree/master/…

Nie alle sensors is presiese replika's van mekaar nie. As gevolg hiervan, as u twee MPU 6050 toets, kry u moontlik verskillende waardes vir die versnellingsmeter en die gyroscoop as dit op dieselfde oppervlak geplaas word. Om hierdie konstante hoekverskil te oorkom, moet ons elke sensor wat ons gebruik, vier. Hierdie script word uitgevoer:

www.i2cdevlib.com/forums/topic/96-arduino-…

geskryf deur Luis Rodenas, sal ons verreken. Die verrekeningsfoute kan uitgeskakel word deur die offsetwaardes in die opset () -roetine te definieer.

Gebruik die digitale bewegingsverwerker

Die MPU6050 bevat 'n DMP (Digital Motion Processor).

Wat is 'n DMP? U kan die DMP beskou as 'n ingeboude mikrobeheerder wat die komplekse beweging van die 3-as-gyroscoop en die 3-as-versnellingsmeter aan boord van die mpu6050 verwerk, met behulp van sy eie bewegingsfusie-algoritmes. Laai die verwerking af wat die Arduino andersins sou doen

Hoe om dit te gebruik? Om uit te vind hoe u die DMP kan gebruik, gaan deur die voorbeeldskets MPU6050_DMP6 wat by die MPU6050-biblioteek kom (in die Arduino IDE: File-> Voorbeeld-> MPU6050-> MPU6050_DMP6). Dit is ook 'n goeie geleentheid om te kontroleer of u sensor werklik werk en of die bedrading korrek is

Stap 5: Kodering

Ek het die Arduino IDE en 'n FTDI -koppelvlak gebruik om die Arduino pro mini te programmeer.

Met die voorbeeldskets (MPU6050_DMP6) wat saam met die MPU6050 -biblioteek as my basiskode verskyn, het ek 'n PID () en MotorDriver () funksie bygevoeg.

Voeg die biblioteek by

  • MPU6050: Om die MPU6050 -sensor te gebruik, moet ons die I2C -ontwikkelaarsbiblioteek van Jeff Rowberg aflaai en dit by die Arduino -biblioteke "biblioteke" voeg, wat in die programlêers op u rekenaar gevind word.
  • Wire: Ons benodig ook die Wire -biblioteek sodat ons met I2C -toestelle kan kommunikeer.

Pseudokode

Sluit biblioteke in:

  • Draad.h
  • MPU6050
  • I2Cdev.h

Initialiseer veranderlikes, konstantes en voorwerpe

Stel op ()

  • Stel penmodus in vir die bestuur van motors
  • Stel penmodus vir die status -LED in
  • Begin die MPU6050 en stel offsetwaardes

PID ()

Bereken die PID -waarde

MotorDriver (PID -reaksie)

Gebruik die PID -waarde om die snelheid en rigting van die motors te beheer

Lus ()

  • Kry data van DMP
  • Noem PID () 'n MotorDriver () funksie

Stap 6: Prosedure vir afstemming van PID

Dit is die verveligste deel van die projek en verg 'n bietjie geduld, tensy u baie geluk het. Hier is die stappe:

  1. Stel die term I en D op 0
  2. Hou die robot vas en pas P aan sodat die robot net oor die balansposisie begin ossilleer
  3. Met P -stel, verhoog I sodat die robot vinniger versnel as hy nie in balans is nie. As P en ek behoorlik ingestel is, behoort die robot ten minste 'n paar sekondes in staat te wees om self te balanseer, met 'n mate van ossillasie
  4. Laastens, verhoog D, verminder die ossillasie

As die eerste poging nie bevredigende resultate lewer nie, herhaal die stappe met 'n ander waarde van P. Let ook daarop dat u die PID-waardes daarna kan aanpas om die prestasie verder te verhoog. Die waardes hier is afhanklik van die hardeware, moenie verbaas wees as u baie groot of baie klein PID -waardes kry nie.

Stap 7: Afsluiting

Die mikro -ratmotors wat gebruik is, sou stadig reageer op groot versteurings, en aangesien die stelsel te lig was, was daar nie genoeg traagheid om die gewenste slinger -effek te kry nie, so as die robot vorentoe buig, sou hy net skuins leun en vorentoe jaag. Uiteindelik is 3D -gedrukte wiele 'n slegte keuse, aangesien dit steeds gly.

Voorstelle vir verbetering:

  • Vinniger motors met 'n hoër wringkrag, dit wil sê vir GS -motors is die hoër spanning, hoe hoër die wringkrag
  • kry 'n swaarder battery of skuif die massa net 'n bietjie hoër
  • Vervang 3D -gedrukte wiele met rubberwiele om meer trekkrag te kry

Aanbeveel: