Turinys:

Dviejų ratų savaiminio balansavimo robotas: 7 žingsniai
Dviejų ratų savaiminio balansavimo robotas: 7 žingsniai

Video: Dviejų ratų savaiminio balansavimo robotas: 7 žingsniai

Video: Dviejų ratų savaiminio balansavimo robotas: 7 žingsniai
Video: Nov 3rd, 2023 Podcast: Uber and Lyft CAUGHT again! $328mil Scandal! 2024, Lapkritis
Anonim
Dviejų ratų savaiminio balansavimo robotas
Dviejų ratų savaiminio balansavimo robotas

Ši instrukcija atliks savaiminio balansavimo roboto projektavimo ir kūrimo procesą. Kaip pastaba noriu tik pasakyti, kad savaime balansuojantys robotai nėra nauja koncepcija ir jie buvo sukurti bei dokumentuoti kitų. Noriu pasinaudoti šia galimybe ir pasidalinti su jumis savo šio roboto interpretacija.

Kas yra savaime balansuojantis robotas?

Savaime balansuojantis robotas yra sistema, kuri naudoja inercinius matavimo duomenis, surinktus iš borto jutiklio, nuolat koreguojant savo padėtį, kad ji būtų vertikali.

Kaip tai veikia?

Paprasta analogija, kurią reikia apsvarstyti, yra apversta švytuoklė. Kur masės centras yra virš sukimosi taško. Tačiau mūsų atveju mes apribojame švytuoklę iki 1 laisvės laipsnio, turėdami vieną sukimosi ašį, mūsų atveju - dviejų ratų sukimosi ašį. Kadangi dėl bet kokių trikdžių robotas nukris, mums reikia metodo, kaip aktyviai palaikyti roboto pusiausvyrą. Čia atsiranda mūsų uždaro ciklo algoritmas (PID valdiklis), žinodami, kuria kryptimi krenta mūsų robotas, galime reguliuoti savo variklių sukimosi kryptį, kad sistema būtų subalansuota.

Kaip veikia uždaro ciklo algoritmas?

Pagrindinis principas, palaikantis roboto pusiausvyrą, yra tas, kad jei robotas krinta į priekį, jis tai kompensuos judindamas roboto apačią į priekį, kad sugautų save, todėl laikytųsi vertikaliai. Panašiai, jei robotas krinta atgal, jis tai kompensuos judindamas roboto apačią atgal, kad sugautų save.

Taigi, čia turime atlikti du dalykus, pirma, turime apskaičiuoti roboto polinkio kampą (ritinį) ir dėl to turime kontroliuoti variklių sukimosi kryptį.

Kaip išmatuosime nuolydžio kampą?

Norėdami išmatuoti nuolydžio kampą, naudosime inercinį matavimo įrenginį. Šiuose moduliuose yra akselerometras ir giroskopas.

  • Akselerometras yra elektromagnetinis prietaisas, kuris matuoja tinkamą pagreitį, tai yra kūno pagreitis momentinio poilsio rėmuose.
  • Giroskopas yra elektromechaninis prietaisas, matuojantis kampinį greitį ir naudojamas prietaiso orientacijai nustatyti.

Tačiau tokių jutiklių naudojimo problema yra tokia:

  • Akselerometras yra labai triukšmingas, tačiau laikui bėgant yra pastovus, kampas kinta dėl staigių horizontalių judesių
  • Kita vertus, giroskopo vertė laikui bėgant nukris, tačiau iš pradžių ji yra gana tiksli

Dėl šios pamokos aš nesiruošiu įdiegti filtro, o ne naudoti borto skaitmeninį judesio apdorojimą (DMP). Kiti sklandžiam signalui gauti naudojo papildomą filtrą, galite pasirinkti bet kurį jums patinkantį metodą. nes robotas balansuoja su bet kuriuo įgyvendinimu.

Prekės

Dalys:

  1. „Arduino Pro Mini 3.3V 8“su 8 Mhz ATMEGA328
  2. FT232RL 3.3V 5.5V FTDI USB į TTL nuoseklaus adapterio modulis
  3. GY-521 modulis su MPU-6050
  4. Pora N20 mikro pavarų variklio 6V - 300 aps./min
  5. L298N variklio vairuotojas
  6. LM2596S DC į DC keitiklio keitiklis
  7. Baterija (įkraunama 9,7 V ličio jonų baterija)
  8. Baterijos dirželis
  9. Dvi prototipinės PCB plokštės
  10. Vyriški ir moteriški antgalių kaiščiai jungiamieji laidai

Įrankiai:

  1. Lituoklis ir lituoklis
  2. Nailono šešiakampis tarpiklis
  3. Tikslaus atsuktuvų rinkinys
  4. 3D spausdintuvas

1 žingsnis: Statyba

Kadangi turėjau prieigą prie 3D spausdintuvo, nusprendžiau 3D spausdinti važiuoklę ir naudoti išjungimo sistemas, kad viską sujungčiau.

Robotas susideda iš 4 sluoksnių

  1. Apatinis sluoksnis jungia variklius ir turi tvirtinimo vietas L298N variklio tvarkyklės moduliui
  2. Kitame sluoksnyje yra plokštės prototipas su „Arduino pro mini“ir prie jo lituojamos antraštės
  3. Trečiasis sluoksnis pritvirtina IMU
  4. Viršutinis sluoksnis, kurį aš vadinu „buferio sluoksniu“, uždengia akumuliatorių, pinigų keitiklį ir pinigų jungiklį

Mano pagrindinis dizaino principas buvo išlaikyti viską modulinį. Priežastis buvo ta, kad jei kažkas negerai su vienu iš komponentų, kurį galėčiau lengvai pakeisti, arba jei man reikia komponento kitam projektui, aš galiu jį lengvai paimti, nesijaudindamas, kad negalėsiu vėl naudoti sistemos.

2 žingsnis: laidų prijungimas

Laidai
Laidai

Prie litavimo plokštės lituodavau keletą pintų antgalių, kad jie atitiktų „Arduino pro mini“kaiščius. Po to aš litavau antgalį, kad galėčiau prieiti prie įvesties/išvesties. Likę komponentai buvo pritvirtinti prie 3D spausdinto rėmo ir prijungti naudojant trumpiklius.

3 žingsnis: valdymo teorija

Dabar pereiname prie projekto esmės. Kad robotas būtų subalansuotas, turime sukurti tinkamą valdymo signalą, kad varikliai važiuotų teisinga kryptimi ir reikiamu greičiu, kad robotas būtų subalansuotas ir stabilus. Norėdami tai padaryti, naudosime populiarų valdymo ciklo algoritmą, žinomą kaip PID valdiklis. Kaip rodo akronimas, šiam valdikliui yra trys terminai, tai yra proporcingos, vientisos ir išvestinės sąlygos. Kiekvieną iš jų lydi koeficientai, lemiantys jų įtaką sistemai. Dažnai daugiausiai laiko užimanti valdiklio įgyvendinimo dalis yra kiekvienos unikalios sistemos pelno derinimas, kad būtų gautas optimaliausias atsakas.

  • Proporcingas terminas tiesiogiai padaugina klaidą, kad gautų rezultatą, todėl kuo didesnė klaida, tuo didesnis atsakymas
  • Integruotas terminas sukuria atsaką, pagrįstą klaidos kaupimu, kad sumažintų pastovios būsenos klaidą. Kuo ilgiau sistema bus nesubalansuota, tuo greičiau varikliai reaguos
  • Išvestinis terminas yra klaidos išvestinė priemonė, naudojama prognozuoti būsimą atsaką, ir tai darydama ji sumažina svyravimus dėl stacionarios būsenos perpildymo.

Pagrindinis šio algoritmo principas yra nuolat skaičiuoti nuolydžio kampą, kuris yra skirtumas tarp norimos padėties ir dabartinės padėties, tai vadinama klaida. Tada ji naudoja šias klaidų vertes ir apskaičiuoja proporcingų, integralių ir išvestinių atsakų sumą, kad gautų išvestį, kuri yra valdymo signalai, siunčiami varikliams. Dėl to, jei klaida yra didelė, į variklius siunčiamas valdymo signalas suka variklius dideliu greičiu, kad pasiektų subalansuotą būseną. Panašiai, jei klaida yra maža, valdymo signalas suks variklius mažu greičiu, kad robotas būtų subalansuotas.

4 veiksmas: naudokite MPU 6050

MPU6050 biblioteka

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

Ne visi jutikliai yra tikslios vienas kito kopijos. Dėl to, jei išbandysite du MPU 6050, galite gauti skirtingas akselerometro ir giroskopo vertes, kai jie bus pastatyti ant to paties paviršiaus. Norėdami įveikti šį pastovų kampo poslinkį, turime švęsti kiekvieną mūsų naudojamą jutiklį. Vykdant šį scenarijų:

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

parašė Luisas Rodenas, mes gausime įskaitymus. Poslinkio klaidos gali būti pašalintos nustatant poslinkio reikšmes sąrankos () procedūroje.

Skaitmeninio judesio procesoriaus naudojimas

MPU6050 yra skaitmeninis judesio procesorius (DMP).

Kas yra DMP? Galite galvoti apie DMP kaip apie įmontuotą mikrovaldiklį, kuris apdoroja sudėtingą judesį iš 3 ašių giroskopo ir 3 ašių akselerometro, esančio „mpu6050“, naudojant savo judesio sintezės algoritmus. Iškrauti apdorojimą, kurį kitu atveju atliktų „Arduino“

Kaip ja naudotis? Norėdami išsiaiškinti, kaip naudoti DMP, peržiūrėkite pavyzdinį eskizą MPU6050_DMP6, pateiktą kartu su MPU6050 biblioteka („Arduino IDE“: Failas-> Pavyzdys-> MPU6050-> MPU6050_DMP6). Tai taip pat yra gera proga patikrinti, ar jūsų jutiklis iš tikrųjų veikia ir ar laidai yra teisingi

5 žingsnis: kodavimas

„Arduino pro mini“programavimui naudojau „Arduino IDE“ir FTDI sąsają.

Naudodamas eskizo pavyzdį (MPU6050_DMP6), pateiktą kartu su MPU6050 biblioteka, kaip pagrindinį kodą pridėjau PID () ir „MotorDriver“() funkcijas.

Pridėkite biblioteką

  • MPU6050: Norėdami naudoti MPU6050 jutiklį, turėsime atsisiųsti Jeffo Rowbergo „I2C“kūrėjų biblioteką ir pridėti ją prie „Arduino“bibliotekų aplanko, esančio jūsų kompiuterio programos failuose.
  • Viela: mums taip pat reikia laidų bibliotekos, kad galėtume bendrauti su I2C įrenginiais.

Pseudo kodas

Įtraukti bibliotekas:

  • Viela.h
  • MPU6050
  • I2Cdev.h

Inicijuokite kintamuosius, konstantas ir objektus

Sąranka ()

  • Nustatykite variklio valdymo kaiščio režimą
  • Nustatykite būsenos šviesos diodo kaiščio režimą
  • Inicializuokite MPU6050 ir nustatykite poslinkio vertes

PID ()

Apskaičiuokite PID vertę

„MotorDriver“(PID atsakas)

Naudokite PID vertę, norėdami valdyti variklių greitį ir kryptį

Ciklas ()

  • Gaukite duomenis iš DMP
  • PID () vadinkite „MotorDriver“() funkcijomis

6 žingsnis: PID derinimo procedūra

Tai pati varginamiausia projekto dalis ir reikalauja šiek tiek kantrybės, nebent jums labai pasisektų. Štai šie veiksmai:

  1. Nustatykite I ir D terminus į 0
  2. Laikydami robotą, sureguliuokite P taip, kad robotas tik pradėtų svyruoti apie pusiausvyros padėtį
  3. Nustatę P, padidinkite I, kad robotas greičiau įsibėgėtų, kai nėra pusiausvyros. Kai P ir I yra tinkamai sureguliuoti, robotas turėtų sugebėti bent kelias sekundes išlaikyti pusiausvyrą ir šiek tiek svyruoti
  4. Galiausiai, padidinkite D, sumažinkite svyravimus

Jei pirmasis bandymas neduoda patenkinamų rezultatų, pakartokite veiksmus su kita P reikšme. Taip pat atminkite, kad vėliau galite patikslinti PID reikšmes, kad dar labiau padidintumėte našumą. Čia esančios vertės priklauso nuo aparatūros, nenustebkite, jei gausite labai dideles ar labai mažas PID reikšmes.

7 žingsnis: išvados

Naudojami mikro pavarų varikliai lėtai reaguodavo į didelius trikdžius ir, atsižvelgiant į tai, kad sistema buvo per lengva, inercijos nepakako norimam švytuoklės efektui gauti, todėl, jei robotas pasilenktų į priekį, jis tik pasvirtų kampu ir lenktųsi į priekį. Galiausiai, 3D spausdinti ratai buvo blogas pasirinkimas, nes jie nuolat slysta.

Pasiūlymai, kaip patobulinti:

  • Greitesni varikliai su didesniu sukimo momentu, t. Y. Esant nuolatinės srovės varikliams, turi didesnę įtampą, tuo didesnis sukimo momentas
  • įsigykite sunkesnę bateriją arba tiesiog perkelkite masę šiek tiek aukščiau
  • Pakeiskite 3D spausdintus ratus guminiais, kad padidintumėte sukibimą

Rekomenduojamas: