Innholdsfortegnelse:

Self-Balancing Robot med to hjul: 7 trinn
Self-Balancing Robot med to hjul: 7 trinn

Video: Self-Balancing Robot med to hjul: 7 trinn

Video: Self-Balancing Robot med to hjul: 7 trinn
Video: How to remove a boot for free! 😲 2024, November
Anonim
Selvbalanserende robot med to hjul
Selvbalanserende robot med to hjul

Denne instruerbare vil gå gjennom design- og byggeprosessen for en selvbalanserende robot. Som et notat, vil jeg bare si at selvbalanserende roboter ikke er et nytt konsept, og at de har blitt bygget og dokumentert av andre. Jeg vil bruke denne muligheten til å dele min tolkning av denne roboten med deg.

Hva er en selvbalanserende robot?

En selvbalanserende robot er et system som bruker treghetsmåledata, samlet fra en innebygd sensor, for å kontinuerlig justere posisjonen for å holde seg oppreist.

Hvordan virker det?

En enkel analogi å vurdere er en omvendt pendel. Hvor massesenteret er over dreiepunktet. I vårt tilfelle begrenser vi imidlertid pendelen til 1 frihetsgrad ved å ha en rotasjonsakse, i vårt tilfelle rotasjonsaksen til de to hjulene. Siden enhver form for forstyrrelse vil føre til at roboten faller, trenger vi en metode for aktivt å holde roboten balansert. Det er her vår lukkede algoritme (PID-kontroller) spiller inn, vel vitende hvilken retning roboten vår faller, vi kan justere rotasjonsretningen til motorene våre for å holde systemet balansert.

Hvordan fungerer den lukkede algoritmen?

Det grunnleggende prinsippet for å holde roboten balansert er at hvis roboten faller fremover vil den kompensere ved å flytte bunnen av roboten fremover for å fange seg selv og derfor holde seg vertikal. På samme måte, hvis roboten faller bakover, vil den kompensere ved å bevege bunnen av roboten bakover for å fange seg selv.

Så vi må gjøre to ting her, først må vi beregne hellingsvinkelen (rull) som roboten opplever, og som et resultat må vi kontrollere rotasjonsretningen til motorene.

Hvordan måler vi hellingsvinkelen?

For å måle hellingsvinkelen bruker vi en treghetsmåleenhet. Disse modulene har et akselerometer og gyroskop.

  • Akselerometeret er en elektromagnetisk enhet som måler riktig akselerasjon, dette er akselerasjonen til et legeme i en øyeblikkelig hvilestativ.
  • Et gyroskop er en elektromekanisk enhet som måler vinkelhastighet og brukes til å bestemme orienteringen til enheten.

Problemet med å bruke slike sensorer er imidlertid at:

  • Akselerometeret er veldig støyende, men er konsistent over tid, vinkelen varierer med plutselige horisontale bevegelser
  • Gyroskopverdien, derimot, vil drive over tid, men i utgangspunktet er den ganske nøyaktig

For dette instruerbare, kommer jeg ikke til å implementere et filter, men bruker den innebygde Digital Motion Processing (DMP). Andre har brukt et komplementært filter for å få et jevnt signal, du kan velge hvilken metode du liker. som roboten balanserer med enten implementering.

Rekvisita

Deler:

  1. Arduino Pro Mini 3.3V 8 med en 8 Mhz ATMEGA328
  2. FT232RL 3.3V 5.5V FTDI USB til TTL seriell adaptermodul
  3. GY-521-modul med MPU-6050
  4. Et par N20 mikro girmotor 6V - 300rpm
  5. L298N motordriver
  6. LM2596S DC til DC buck converter
  7. Batteri (oppladbart 9,7V Li-ion-batteripakke)
  8. Batteristropp
  9. To prototypende kretskort
  10. Jumperkabler for menn og kvinner

Verktøy:

  1. Loddejern og loddetinn
  2. Nylon hexavstandsstykke
  3. Presisjonsskrutrekkersett
  4. 3D -skriver

Trinn 1: Konstruksjon

Siden jeg hadde tilgang til en 3D -skriver bestemte jeg meg for å skrive ut kabinettet i 3D og bruke stand -offs for å koble alt sammen.

Roboten består av 4 lag

  1. Det nederste laget forbinder motorene og har monteringspunkter for L298N -motordrivermodulen
  2. Det neste laget inneholder prototypebrettet med Arduino pro mini og overskrifter loddet til det
  3. Det tredje laget monterer IMU
  4. Det øverste laget, som jeg kaller "støtfangerlaget", holder batteriet, bukkomformeren og en pengebryter

Mitt viktigste designprinsipp var å holde alt modulært. Grunnen til dette var hvis noe gikk galt med en av komponentene, jeg lett kunne bytte den ut, eller hvis jeg trengte en komponent for et annet prosjekt, kan jeg enkelt ta den uten å bekymre meg for at jeg ikke kan bruke systemet igjen.

Trinn 2: Kabling

Kabling
Kabling

Jeg loddet noen kvinnelige headerpints til et perf-board for å matche Arduino pro mini header pins. Etter dette loddet jeg mannlig topptekst på brettet for å gi tilgang til I/O. Resten av komponentene ble montert på den 3D -trykte rammen og koblet til med jumperwires.

Trinn 3: Kontrollteori

Nå går vi videre til kjernen i prosjektet. For å holde roboten balansert, må vi generere et passende styresignal for å drive motorene i riktig retning og med riktig hastighet for å holde roboten balansert og stabil. For å gjøre dette vil vi bruke en populær kontrollsløyfe -algoritme kjent som en PID -kontroller. Som akronymet antyder er det tre termer for denne kontrolleren, disse er proporsjonale, integrale og avledede termer. Hver av dem er ledsaget av koeffisienter som bestemmer deres innflytelse på systemet. Ofte er den mest tidkrevende delen av implementeringen av kontrolleren tuningen av gevinstene for hvert unike system for å få den mest optimale responsen.

  • Den proporsjonale termen multipliserer feilen direkte for å gi en utgang, så jo større feil jo større er responsen
  • Det integrerte begrepet genererer et svar basert på en akkumulering av feilen for å redusere steady-state-feilen. Jo lenger systemet er i ubalanse, jo raskere reagerer motorene
  • Derivatbegrepet er derivatet av feilen som brukes til å forutsi fremtidig respons, og ved å gjøre det reduserer det svingningen på grunn av overskridelse av steady-state.

Det grunnleggende prinsippet for denne algoritmen er å kontinuerlig beregne hellingsvinkelen som er forskjellen mellom ønsket posisjon og den nåværende posisjonen, dette kalles feilen. Den bruker deretter disse feilverdiene og beregner summen av proporsjonale, integrale og derivater for å få en utgang, som er styresignalene som sendes til motorene. Som et resultat, hvis feilen er stor, vil styresignalet som sendes til motorene rotere motorene med høy hastighet for å komme til en balansert tilstand. På samme måte, hvis feilen er liten, vil styresignalet rotere motoren lav hastighet for å holde roboten balansert.

Trinn 4: Bruke MPU 6050

MPU6050 bibliotek

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

Kalibrering av forskyvninger Ikke alle sensorer er eksakte kopier av hverandre. Som et resultat, hvis du tester to MPU 6050, kan du få forskjellige verdier for akselerometeret og gyroskopet når de plasseres stille på samme overflate. For å overvinne denne forskyvningen med konstant vinkel må vi feire hver sensor vi bruker. Kjører dette skriptet:

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

skrevet av Luis Rodenas, vil vi få kompensasjoner. Forskyvningsfeilene kan elimineres ved å definere forskyvningsverdiene i oppsettet ().

Bruke Digital Motion Processor

MPU6050 inneholder en DMP (Digital Motion Processor).

Hva er en DMP? Du kan tenke på DMP som en innebygd mikrokontroller som behandler den komplekse bevegelsen fra 3-akset gyroskop og 3-akses akselerometer ombord på mpu6050, ved å bruke sine egne bevegelsesfusjonsalgoritmer. Laster ut behandlingen som ellers ville blitt utført av Arduino

Hvordan bruke det? For å finne ut hvordan du bruker DMP, gå gjennom eksempelskissen MPU6050_DMP6 som følger med MPU6050-biblioteket (i Arduino IDE: File-> Eksempel-> MPU6050-> MPU6050_DMP6). Dette er også en god mulighet til å kontrollere at sensoren din faktisk fungerer og at ledningene er riktige

Trinn 5: Koding

Jeg brukte Arduino IDE og et FTDI -grensesnitt for å programmere Arduino pro mini.

Ved å bruke eksempelskissen (MPU6050_DMP6) som følger med MPU6050 -biblioteket som min grunnkode, la jeg til en PID () og MotorDriver () funksjoner.

Legg til biblioteket

  • MPU6050: For å bruke MPU6050 -sensoren må vi laste ned I2C -utviklerbiblioteket fra Jeff Rowberg og legge det til i Arduino "biblioteker" -mappen som finnes i programfilene på datamaskinen din.
  • Wire: Vi trenger også Wire -biblioteket for å la oss kommunisere med I2C -enheter.

Pseudokode

Inkluder biblioteker:

  • Wire.h
  • MPU6050
  • I2Cdev.h

Initialiser variabler, konstanter og objekter

Oppsett ()

  • Still inn pin -modus for styring av motorer
  • Angi pin -modus for status -LED
  • Initialiser MPU6050 og sett forskyvningsverdier

PID ()

Beregn PID -verdi

MotorDriver (PID -respons)

Bruk PID -verdi for å kontrollere motorens hastighet og retning

Løkke ()

  • Få data fra DMP
  • Kall PID () en MotorDriver () -funksjoner

Trinn 6: Prosedyre for PID -tuning

Dette er den mest kjedelige delen av prosjektet og krever litt tålmodighet med mindre du er veldig heldig. Her er trinnene:

  1. Sett I og D -termen til 0
  2. Hold roboten, juster P slik at roboten bare begynner å svinge om balanseposisjonen
  3. Med P satt, øk I slik at roboten akselererer raskere når den er utenfor balanse. Med P og jeg er riktig innstilt, bør roboten være i stand til å balansere seg selv i minst noen sekunder, med litt svingning
  4. Til slutt, økning D reduserer svingningen

Hvis det første forsøket ikke gir tilfredsstillende resultater, gjentar du trinnene med en annen verdi på P. Vær også oppmerksom på at du kan finjustere PID-verdiene etterpå for å øke ytelsen ytterligere. Verdiene her er avhengig av maskinvaren, ikke bli overrasket hvis du får veldig store eller svært små PID -verdier.

Trinn 7: Konklusjon

Mikrogirmotorene som ble brukt, skulle bremse med å reagere på store forstyrrelser og gitt at systemet var for lett var det ikke nok treghet for å få ønsket pendeleffekt, så hvis roboten lener seg fremover, ville den bare lene seg i en vinkel og løpe fremover. Til slutt var 3D -trykte hjul et dårlig valg ettersom de fortsetter å glide.

Forslag til forbedring:

  • Raskere motorer med høyere dreiemoment, dvs. for likestrømsmotorer er høyere spenning, jo høyere dreiemoment
  • få et tyngre batteri eller bare flytt massen litt høyere
  • Bytt ut 3D -trykte hjul med gummihjul for å få mer trekkraft

Anbefalt: