Sisukord:

Kaherattaline isetasakaalustav robot: 7 sammu
Kaherattaline isetasakaalustav robot: 7 sammu

Video: Kaherattaline isetasakaalustav robot: 7 sammu

Video: Kaherattaline isetasakaalustav robot: 7 sammu
Video: Как использовать акселерометр и гироскоп MPU-6050 с кодом Arduino 2024, November
Anonim
Kaherattaline isetasakaalustav robot
Kaherattaline isetasakaalustav robot

See juhend juhendab isetasakaalustava roboti projekteerimise ja ehitamise protsessi. Märkusena tahan lihtsalt öelda, et isetasakaalustavad robotid ei ole uus kontseptsioon ning need on ehitatud ja dokumenteeritud teiste poolt. Tahan kasutada seda võimalust ja jagada teiega oma tõlgendust sellest robotist.

Mis on isetasakaalustav robot?

Isetasakaalustav robot on süsteem, mis kasutab pardasensorilt kogutud inertsiaalseid mõõtmisandmeid, et oma asendit pidevalt püsti hoida.

Kuidas see töötab?

Lihtne analoogia, mida kaaluda, on ümberpööratud pendel. Kus massi keskpunkt on pöördepunktist kõrgemal. Kuid meie puhul piirame pendlit 1 vabadusastmega, kuna meil on üks pöörlemistelg, meie puhul kahe ratta pöörlemistelg. Kuna igasugused häired põhjustavad roboti kukkumise, vajame meetodit, kuidas robot aktiivselt tasakaalus hoida. Siin tuleb mängu meie suletud ahela algoritm (PID-kontroller), teades, millises suunas meie robot langeb, saame reguleerida oma mootorite pöörlemissuunda, et süsteem oleks tasakaalus.

Kuidas suletud ahela algoritm töötab?

Roboti tasakaalus hoidmise põhiprintsiip on see, et kui robot kukub ettepoole, siis kompenseerib see seda, liigutades roboti põhja ettepoole, et end kätte saada ja seega vertikaalselt hoida. Samamoodi, kui robot kukub tahapoole, kompenseerib see seda, liigutades roboti põhja tahapoole, et end kätte saada.

Niisiis, siin peame tegema kahte asja, esiteks peame arvutama roboti kaldenurga (rulli) ja selle tulemusena peame kontrollima mootorite pöörlemissuunda.

Kuidas mõõta kaldenurka?

Kaldenurga mõõtmiseks kasutame inertsiaalset mõõteseadet. Need moodulid sisaldavad kiirendusmõõturit ja güroskoopi.

  • Kiirendusmõõtur on elektromagnetiline seade, mis mõõdab õiget kiirendust, see on keha kiirendus hetkelises puhkeraamis.
  • Güroskoop on elektromehaaniline seade, mis mõõdab nurkkiirust ja mida kasutatakse seadme orientatsiooni määramiseks.

Selliste andurite kasutamise probleem on aga järgmine:

  • Kiirendusmõõtur on väga mürarikas, kuid aja jooksul ühtlane, nurk varieerub järskude horisontaalsete liikumiste korral
  • Seevastu güroskoobi väärtus aja jooksul triivib, kuid esialgu on see üsna täpne

Selle juhendi jaoks ei kavatse ma filtrit rakendada, vaid ei kasuta sisseehitatud digitaalset liikumistöötlust (DMP). Teised on sujuva signaali saamiseks kasutanud täiendavat filtrit, saate valida mis tahes meetodi, mis teile meeldib. kuna robot tasakaalustab kummagi teostusega.

Tarvikud

Osad:

  1. Arduino Pro Mini 3.3V 8 ja 8 MHz ATMEGA328
  2. FT232RL 3.3V 5.5V FTDI USB to TTL jadaadapteri moodul
  3. GY-521 moodul koos MPU-6050-ga
  4. Paar N20 mikrokäigukastiga mootorit 6V - 300 p / min
  5. L298N mootorijuht
  6. LM2596S DC to DC buck converter
  7. Aku (laetav 9,7 V liitiumioonaku)
  8. Aku rihm
  9. Kaks trükkplaadi prototüüpi
  10. Isase ja naissoost päisepistikute hüppajajuhtmed

Tööriistad:

  1. Jootekolb ja jootekolb
  2. Nailon -kuusnurkne vahekaugus
  3. Täpse kruvikeeraja komplekt
  4. 3D printer

Samm: ehitamine

Kuna mul oli juurdepääs 3D -printerile, otsustasin šassii 3D -printida ja kasutada kõikide ühendamiseks väljalülitusi.

Robot koosneb 4 kihist

  1. Alumine kiht ühendab mootorid ja sellel on L298N mootori draiverimooduli kinnituskohad
  2. Järgmine kiht sisaldab prototüüpplaati koos Arduino pro mini ja selle külge joodetud päistega
  3. Kolmas kiht kinnitab IMU
  4. Ülemine kiht, mida ma nimetan „kaitseraua kihiks”, katab aku, buck -muunduri ja rahalüliti

Minu peamine disainipõhimõte oli hoida kõik modulaarsena. Selle põhjuseks oli asjaolu, et kui ühe komponendiga läks midagi valesti, saaksin selle hõlpsalt asendada või kui mul oleks vaja komponenti mõne muu projekti jaoks, saan selle hõlpsalt kätte võtta, muretsemata selle pärast, et ei saa süsteemi uuesti kasutada.

2. samm: juhtmestik

Juhtmestik
Juhtmestik

Jootsin mõned naissoost päisepinnad perf-tahvlile, et need sobiksid kokku Arduino pro mini päisepistikutega. Pärast seda jootsin tahvlile isased päised, et võimaldada juurdepääsu I/O -le. Ülejäänud komponendid paigaldati 3D -prinditud raamile ja ühendati hüppajajuhtmete abil.

3. samm: juhtimisteooria

Nüüd liigume projekti tuuma juurde. Roboti tasakaalus hoidmiseks peame genereerima sobiva juhtsignaali, et mootorid õiges suunas ja õigel kiirusel liikuda, et robot oleks tasakaalus ja stabiilne. Selleks kasutame populaarset juhtimisahela algoritmi, mida tuntakse PID -kontrollerina. Nagu akronüüm viitab, on sellel kontrolleril kolm terminit, need on proportsionaalsed, integraalsed ja tuletised. Igaühega kaasnevad koefitsiendid, mis määravad nende mõju süsteemile. Sageli on kontrolleri juurutamisel kõige aeganõudvam osa iga unikaalse süsteemi kasumi häälestamine, et saada kõige optimaalsem vastus.

  • Proportsionaalne termin korrutab vea otseselt väljundi saamiseks, nii et mida suurem viga, seda suurem on vastus
  • Integraaltermin tekitab vea kuhjumisel põhineva vastuse, et vähendada püsiseisundi viga. Mida kauem süsteem tasakaalust väljas on, seda kiiremini mootorid reageerivad
  • Tuletisinstrument on vea tuletisinstrument, mida kasutatakse tulevase reageerimise ennustamiseks ja seejuures vähendab see püsiseisundi ületamisest tingitud võnkumist.

Selle algoritmi aluspõhimõte on kalde nurga pidev arvutamine, mis on soovitud positsiooni ja hetkeasendi vahe, seda nimetatakse veaks. Seejärel kasutab ta neid veaväärtusi ja arvutab väljundi saamiseks proportsionaalsete, integraalsete ja tuletiste vastuste summa, mis on mootoritele saadetavad juhtsignaalid. Selle tulemusena, kui viga on suur, pöörab mootoritele saadetud juhtsignaal mootoreid suurel kiirusel tasakaalustatud olekusse jõudmiseks. Samamoodi, kui viga on väike, pöörab juhtsignaal mootoreid väikese kiirusega, et robot oleks tasakaalus.

Samm 4: MPU 6050 kasutamine

MPU6050 raamatukogu

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

Kõik nihked ei ole üksteise täpsed koopiad. Selle tulemusel, kui katsetate kahte MPU 6050, võite kiirendusmõõturi ja güroskoobi jaoks saada erinevad väärtused, kui need asetatakse samale pinnale. Selle pideva nurga nihke ületamiseks peame tähistama iga kasutatavat andurit. Selle skripti käitamine:

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

kirjutas Luis Rodenas, saame nihkeid. Nihke vead saab kõrvaldada, määrates seadistus () rutiinis nihke väärtused.

Digitaalse liikumisprotsessori kasutamine

MPU6050 sisaldab DMP -d (Digital Motion Processor).

Mis on DMP? Võite mõelda DMP-le kui pardal olevale mikrokontrollerile, mis töötleb keerukat liikumist 3-teljelisest güroskoobist ja 3-teljelisest kiirendusmõõturist mpu6050 pardal, kasutades oma liikumissulamisalgoritme. Töötluse mahalaadimine, mida muidu teeks Arduino

Kuidas seda kasutada? DMP kasutamise selgitamiseks vaadake MPU6050 raamatukoguga kaasas olevat näidisvisandit MPU6050_DMP6 (Arduino IDE-s: Fail-> Näide-> MPU6050-> MPU6050_DMP6). See on ka hea võimalus kontrollida, kas teie andur tegelikult töötab ja juhtmestik on õige

Samm: kodeerimine

Arduino pro mini programmeerimiseks kasutasin Arduino IDE -d ja FTDI liidest.

Kasutades baaskoodina MPU6050 raamatukoguga kaasas olevat näidisvisandit (MPU6050_DMP6), lisasin PID () ja MotorDriver () funktsioonid.

Lisage kogu

  • MPU6050: MPU6050 anduri kasutamiseks peame Jeff Rowbergilt alla laadima I2C arendajateeki ja lisama selle Arduino kausta „teegid”, mis asub teie arvuti programmifailides.
  • Traat: me vajame ka Wire raamatukogu, et saaksime suhelda I2C seadmetega.

Pseudo kood

Kaasa raamatukogud:

  • Traat.h
  • MPU6050
  • I2Cdev.h

Initsialiseerida muutujad, konstandid ja objektid

Seadistamine ()

  • Määrake mootorite juhtimiseks pin -režiim
  • Määrake oleku LED -ile pin -režiim
  • Vormindage MPU6050 ja määrake nihkeväärtused

PID ()

Arvutage PID väärtus

MotorDriver (PID -vastus)

Kasutage PID väärtust mootorite kiiruse ja suuna juhtimiseks

Silmus ()

  • Hankige andmeid DMP -st
  • Helistage PID () MotorDriver () funktsioonidele

6. samm: PID -häälestusprotseduur

See on projekti kõige tüütum osa ja nõuab natuke kannatust, kui teil väga ei vea. Siin on sammud:

  1. Määrake I ja D termin 0 -le
  2. Hoides robotit käes, reguleerige P nii, et robot hakkaks tasakaaluasendis võnkuma
  3. Kui P on seatud, suurendage I, et robot kiirendaks tasakaalust väljas olles kiiremini. Kui P ja I on korralikult häälestatud, peaks robot suutma vähemalt mõne sekundi jooksul tasakaalustada, mõningase võnkumisega
  4. Lõpuks suurendage D, vähendage võnkumist

Kui esimene katse ei anna rahuldavaid tulemusi, korrake samme erineva väärtusega P. Samuti pidage meeles, et saate PID väärtusi hiljem peenhäälestada, et veelgi suurendada jõudlust. Siin olevad väärtused sõltuvad riistvarast, ärge imestage, kui saate väga suured või väga väikesed PID väärtused.

7. samm: järeldus

Kasutatavad mikrokäigumootorid reageerisid suurtele häiretele aeglaselt ja kuna süsteem oli liiga kerge, ei olnud soovitud pendliefekti saavutamiseks piisavalt inertsi, nii et kui robot ettepoole kaldub, kaldub ta lihtsalt viltu ja liigub edasi. Lõpuks olid 3D -prinditud rattad halb valik, kuna need libisevad pidevalt.

Soovitused parandamiseks:

  • Kiiremad suure pöördemomendiga mootorid, st alalisvoolumootorite puhul on kõrgem pinge, seda suurem pöördemoment
  • hankige raskem aku või liigutage massi veidi kõrgemale
  • Suurema haarduvuse saavutamiseks asendage 3D -prinditud rattad kummist ratastega

Soovitan: