Indholdsfortegnelse:
- Forbrugsvarer
- Trin 1: Konstruktion
- Trin 2: Ledningsføring
- Trin 3: Kontrolteori
- Trin 4: Brug af MPU 6050
- Trin 5: Kodning
- Trin 6: Procedure for PID -tuning
- Trin 7: Afslutning
Video: To-hjulet selvbalancerende robot: 7 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:26
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:
- Arduino Pro Mini 3.3V 8 med en 8 Mhz ATMEGA328
- FT232RL 3.3V 5.5V FTDI USB til TTL serielt adaptermodul
- GY-521 modul med MPU-6050
- Et par N20 mikro gearmotor 6V - 300rpm
- L298N motor driver
- LM2596S DC til DC buck converter
- Batteri (genopladeligt 9,7V Li-ion batteri)
- Batterirem
- To prototyper printkort
- Stikkontakter til mænd og hun
Værktøjer:
- Loddejern og loddetin
- Nylon hex afstandsstykke
- Sæt med præcisionsskruetrækker
- 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
- Det nederste lag forbinder motorerne og har monteringspunkter til L298N -motordrivermodulet
- Det næste lag huser prototypebrættet med Arduino pro mini og overskrifter loddet til det
- Det tredje lag monterer IMU
- 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
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:
- Indstil I og D -term til 0
- Hold robotten og juster P, så robotten bare begynder at svinge omkring balancepositionen
- 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
- 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:
Selvbalancerende robot - PID -kontrolalgoritme: 3 trin
Self Balancing Robot - PID Control Algorithm: Dette projekt blev udtænkt, fordi jeg var interesseret i at lære mere om kontrolalgoritmer og hvordan man effektivt implementerer funktionelle PID -loops. Projektet er stadig i udviklingsfasen, da der endnu ikke skal tilføjes et Bluetooth -modul, som
Selvbalancerende robot fra Magicbit: 6 trin
Self Balancing Robot From Magicbit: Denne vejledning viser, hvordan man laver en selvbalancerende robot ved hjælp af Magicbit dev board. Vi bruger magicbit som udviklingstavle i dette projekt, der er baseret på ESP32. Derfor kan enhver ESP32 udviklingsplade bruges i dette projekt
HeadBot-en selvbalancerende robot til STEM-læring og opsøgende: 7 trin (med billeder)
HeadBot-en selvbalancerende robot til STEM-læring og opsøgende: Headbot-en to-fods høj, selvbalancerende robot-er hjernebarn af South Eugene Robotics Team (SERT, FRC 2521), et konkurrencedygtigt high school-robotteam i FØRSTE Robotics Competition, fra Eugene, Oregon. Denne populære opsøgende robot gør re
Sådan opretter du en fjernstyret 3D-printet selvbalancerende robot: 9 trin (med billeder)
Sådan opretter du en fjernstyret 3D-printet selvbalancerende robot: Dette er en udvikling af den tidligere version af B-robot. 100% ÅBEN KILDE / Arduino robot. KODEN, 3D -dele og elektronik er åbne, så du er velkommen til at ændre den eller oprette en enorm version af robotten. Hvis du er i tvivl, ideer eller har brug for hjælp, skal du
Oprettelse af en fjernstyret Arduino selvbalancerende robot: B-robot EVO: 8 trin
Oprettelse af en fjernstyret Arduino selvbalancerende robot: B-robot EVO: ------------------------------------ -------------- UPDATE: der er en ny og forbedret version af denne robot her: B-robotten EVO, med nye funktioner! ------------ -------------------------------------- Hvordan fungerer det? B-ROBOT EVO er eksternt styring