Indholdsfortegnelse:

To-hjulet selvbalancerende robot: 7 trin
To-hjulet selvbalancerende robot: 7 trin

Video: To-hjulet selvbalancerende robot: 7 trin

Video: To-hjulet selvbalancerende robot: 7 trin
Video: Семь роботов изменят сельское хозяйство ▶ СМОТРИТЕ СЕЙЧАС! 2024, November
Anonim
Selvhjulende tohjulet robot
Selvhjulende tohjulet robot

Denne instruktive vil gå igennem design- og byggeprocessen for en selvbalancerende robot. Som en note vil jeg bare sige, at selvbalancerende robotter ikke er et nyt koncept, og at de er blevet bygget og dokumenteret af andre. Jeg vil bruge denne lejlighed til at dele min fortolkning af denne robot med jer.

Hvad er en selvbalancerende robot?

En selvbalancerende robot er et system, der bruger inertimåledata, indsamlet fra en indbygget sensor, til løbende at justere sin position for at holde oprejst.

Hvordan virker det?

En simpel analogi at overveje er et omvendt pendul. Hvor massens centrum er over drejepunktet. I vores tilfælde begrænser vi imidlertid pendulet til 1 frihedsgrad ved at have en rotationsakse, i vores tilfælde rotationsaksen for de to hjul. Da enhver form for forstyrrelse får robotten til at falde, har vi brug for en metode til aktivt at holde robotten i balance. Det er her vores lukkede algoritme (PID-controller) spiller ind, velvidende i hvilken retning vores robot falder, vi kan justere rotationsretningen for vores motorer for at holde systemet i balance.

Hvordan fungerer den lukkede algoritme?

Grundprincippet for at holde robotten i balance er, at hvis robotten falder fremad, vil den kompensere ved at flytte bunden af robotten frem for at fange sig selv og derfor holde sig lodret. På samme måde, hvis robotten falder baglæns, vil den kompensere ved at flytte bunden af robotten baglæns for at fange sig selv.

Så vi er nødt til at gøre to ting her, først skal vi beregne hældningsvinklen (rullen), som robotten oplever, og som følge heraf skal vi kontrollere motorens rotationsretning.

Hvordan måler vi hældningsvinklen?

For at måle hældningsvinklen bruger vi en inertial måleenhed. Disse moduler indeholder et accelerometer og gyroskop.

  • Accelerometeret er en elektromagnetisk enhed, der måler den korrekte acceleration, dette er accelerationen af et legeme i en øjeblikkelig hvilestel.
  • Et gyroskop er en elektromekanisk enhed, der måler vinkelhastighed og bruges til at bestemme enhedens orientering.

Problemet med at bruge sådanne sensorer er imidlertid, at:

  • Accelerometeret er meget støjende, men er konsekvent over tid, vinklen varierer med pludselige vandrette bevægelser
  • Gyroskopets værdi vil på den anden side glide over tid, men i første omgang er den temmelig præcis

For dette instruerbare, vil jeg ikke implementere et filter i stedet vil bruge den indbyggede Digital Motion Processing (DMP). Andre har brugt et komplementært filter for at få et glat signal, du kan vælge hvilken metode du vil. da robotten balancerer med begge implementeringer.

Forbrugsvarer

Dele:

  1. Arduino Pro Mini 3.3V 8 med en 8 Mhz ATMEGA328
  2. FT232RL 3.3V 5.5V FTDI USB til TTL serielt adaptermodul
  3. GY-521 modul med MPU-6050
  4. Et par N20 mikro gearmotor 6V - 300rpm
  5. L298N motor driver
  6. LM2596S DC til DC buck converter
  7. Batteri (genopladeligt 9,7V Li-ion batteri)
  8. Batterirem
  9. To prototyper printkort
  10. Stikkontakter til mænd og hun

Værktøjer:

  1. Loddejern og loddetin
  2. Nylon hex afstandsstykke
  3. Sæt med præcisionsskruetrækker
  4. 3D printer

Trin 1: Konstruktion

Da jeg havde adgang til en 3D -printer, besluttede jeg at 3D -udskrive kabinettet og bruge standoffs til at forbinde alt sammen.

Robotten består af 4 lag

  1. Det nederste lag forbinder motorerne og har monteringspunkter til L298N -motordrivermodulet
  2. Det næste lag huser prototypebrættet med Arduino pro mini og overskrifter loddet til det
  3. Det tredje lag monterer IMU
  4. Det øverste lag, som jeg kalder "kofangerlaget", holder batteriet, bukkomformeren og en pengekontakt

Mit hoveddesignprincip var at holde alt modulopbygget. Grunden til dette var, hvis noget gik galt med en af komponenterne, jeg let kunne udskifte det, eller hvis jeg havde brug for en komponent til et andet projekt, kan jeg sagtens tage det uden at bekymre mig om ikke at kunne bruge systemet igen.

Trin 2: Ledningsføring

Ledninger
Ledninger

Jeg lodde nogle kvindelige headerpints til et perf-board for at matche med Arduino pro mini header pins. Efter dette lodde jeg hanhovedet fast på brættet for at give adgang til I/O. Resten af komponenterne blev monteret på den 3D -trykte ramme og forbundet med jumperwires.

Trin 3: Kontrolteori

Nu går vi videre til kernen i projektet. For at holde robotten i balance, skal vi generere et passende styresignal til at drive motorerne i den rigtige retning og med den korrekte hastighed for at holde robotten afbalanceret og stabil. For at gøre dette vil vi bruge en populær kontrol loop algoritme kendt som en PID controller. Som akronymet antyder, er der tre termer til denne controller, disse er proportionelle, integrale og afledte udtryk. Hver af dem ledsages af koefficienter, der bestemmer deres indflydelse på systemet. Ofte er den mest tidskrævende del af implementeringen af controlleren tuningen af gevinsterne for hvert unikt system for at få den mest optimale respons.

  • Proportionaludtrykket multiplicerer fejlen direkte for at give et output, så jo større fejl jo større er responsen
  • Det integrerede udtryk genererer et svar baseret på en akkumulering af fejlen for at reducere steady-state fejlen. Jo længere systemet er i ubalance, jo hurtigere reagerer motorerne
  • Det afledte udtryk er derivatet af den fejl, der bruges til at forudsige det fremtidige svar, og ved at gøre det reducerer det svingningen på grund af overskydning af steady-state.

Grundprincippet for denne algoritme er løbende at beregne hældningsvinklen, som er forskellen mellem den ønskede position og den aktuelle position, dette er kendt som fejlen. Det bruger derefter disse fejlværdier og beregner summen af de proportionelle, integrale og afledte svar for at få et output, som er de styresignaler, der sendes til motorerne. Som et resultat, hvis fejlen er stor, vil styresignalet, der sendes til motorerne, rotere motorerne med høj hastighed for at komme til en afbalanceret tilstand. På samme måde vil styresignalet, hvis fejlen er lille, rotere motorernes lave hastighed for at holde robotten i balance.

Trin 4: Brug af MPU 6050

MPU6050 bibliotek

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

Kalibrering af forskydninger Ikke alle sensorer er nøjagtige kopier af hinanden. Som et resultat, hvis du tester to MPU 6050, kan du få forskellige værdier for accelerometeret og gyroskopet, når de placeres stille på den samme overflade. For at overvinde denne konstante vinkelforskydning skal vi fejre hver sensor, vi bruger. Kører dette script:

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

skrevet af Luis Rodenas, får vi forskydninger. Forskydningsfejlene kan elimineres ved at definere forskydningsværdierne i setup () -rutinen.

Brug af Digital Motion Processor

MPU6050 indeholder en DMP (Digital Motion Processor).

Hvad er en DMP? Du kan tænke på DMP som en indbygget mikrokontroller, der behandler den komplekse bevægelse fra 3-akset gyroskop og 3-akset accelerometer ombord på mpu6050 ved hjælp af sine egne bevægelsesfusionsalgoritmer. Aflæsning af den behandling, der ellers ville blive udført af Arduino

Sådan bruges det? For at finde ud af, hvordan du bruger DMP, skal du gennemgå eksemplet på skitse MPU6050_DMP6, der følger med MPU6050-biblioteket (i Arduino IDE: File-> Eksempel-> MPU6050-> MPU6050_DMP6). Dette er også en god mulighed for at kontrollere, at din sensor faktisk fungerer, og at ledningerne er korrekte

Trin 5: Kodning

Jeg brugte Arduino IDE og et FTDI -interface til at programmere Arduino pro mini.

Ved hjælp af eksempelskitsen (MPU6050_DMP6), der følger med MPU6050 -biblioteket som min basiskode, tilføjede jeg en PID () og MotorDriver () funktioner.

Tilføj biblioteket

  • MPU6050: For at bruge MPU6050 -sensoren skal vi downloade I2C -udviklerbiblioteket fra Jeff Rowberg og tilføje det til Arduino "biblioteker" -mappen, der findes i programfilerne på din computer.
  • Wire: Vi har også brug for Wire -biblioteket, så vi kan kommunikere med I2C -enheder.

Pseudokode

Inkluder biblioteker:

  • Wire.h
  • MPU6050
  • I2Cdev.h

Initialiser variabler, konstanter og objekter

Opsætning ()

  • Indstil pin -tilstand til styring af motorer
  • Indstil pin -tilstand for status -LED
  • Initialiser MPU6050 og indstil forskydningsværdier

PID ()

Beregn PID -værdi

MotorDriver (PID -respons)

Brug PID -værdi til at styre motorernes hastighed og retning

Sløjfe ()

  • Få data fra DMP
  • Kald PID () til en MotorDriver () -funktioner

Trin 6: Procedure for PID -tuning

Dette er den mest kedelige del af projektet og kræver lidt tålmodighed, medmindre du er meget heldig. Her er trinene:

  1. Indstil I og D -term til 0
  2. Hold robotten og juster P, så robotten bare begynder at svinge omkring balancepositionen
  3. Med P -sæt øges I, så robotten accelererer hurtigere, når den er ude af balance. Med P og jeg er korrekt indstillet, skal robotten være i stand til at balancere sig selv i mindst et par sekunder, med en vis svingning
  4. Endelig øges D, reducerer svingningen

Hvis det første forsøg ikke giver tilfredsstillende resultater, skal du gentage trinene med en anden værdi på P. Vær også opmærksom på, at du kan finjustere PID-værdierne bagefter for yderligere at øge ydelsen. Værdierne her er afhængige af hardware, ikke blive overrasket, hvis du får meget store eller meget små PID -værdier.

Trin 7: Afslutning

De anvendte mikrogearmotorer reagerede langsomt på store forstyrrelser, og da systemet var for let, var der ikke nok træghed til at få den ønskede penduleffekt, så hvis robotten læner sig fremad, ville den bare læne sig i en vinkel og køre fremad. Endelig var 3D -printede hjul et dårligt valg, da de bliver ved med at glide.

Forslag til forbedringer:

  • Hurtigere motorer med højere drejningsmoment, dvs. for DC -motorer er højere spændingsværdi, jo højere drejningsmoment
  • få et tungere batteri eller bare flytte massen en smule højere
  • Udskift 3D -printede hjul med gummihjul for at få mere vejgreb

Anbefalede: