Sisukord:

Robotkäsi: Jensen: 4 sammu
Robotkäsi: Jensen: 4 sammu

Video: Robotkäsi: Jensen: 4 sammu

Video: Robotkäsi: Jensen: 4 sammu
Video: Katsetame õppetöös - uArm robotkäsi 2024, Oktoober
Anonim
Robotkäsi: Jensen
Robotkäsi: Jensen

Jensen on robotkäsi, mis on ehitatud Arduino platvormile ja keskendub intuitiivsele liikumise planeerimisele. See on tehtud 1 krediidist sõltumatu projektina, mille juhendajaks on Charles B. Malloch, PhD. See võib korrata käe käsitsi liigutamisega programmeeritud liigutusi. Selle ehitamiseks sain inspiratsiooni, nähes teisi UMass Amherst M5 tegijaruumis ehitatud robotrelvi. Lisaks tahtsin õppida kasutama CAD -tarkvara ja teha täiustatud Arduino projekti. Ma nägin selles võimalust kõiki neid asju teha.

Samm: algne disain ja ulatus

Algne disain ja ulatus
Algne disain ja ulatus

CAD-tarkvara, mille ma selle projekti jaoks õppisin, oli OnShape ja esimene asi, mida modelleerisin, oli HiTec HS-422 analoog-servo. Valisin servo, kuna see oli mulle kohapeal saadaval ja see oli mõistliku hinnaga. See oli ka hea tava OnShape'i õppimiseks enne oma osade kujundamise juurde asumist. Projekti varases staadiumis oli mul üldine ettekujutus sellest, milleks soovin, et käsi oleks võimeline. Tahtsin, et sellel oleks korralik liikumisulatus ja haarats asjade ülesvõtmiseks. Need üldised spetsifikatsioonid teavitasid disaini, kui jätkasin selle modelleerimist CAD -is. Veel üks disainipiirang, mis mul sel hetkel oli, oli minu 3D -printeri prindikihi suurus. Seetõttu on ülaltoodud fotol näha olev alus suhteliselt primitiivne ruut.

Projekti selles etapis tegin ka ajurünnakuid, kuidas tahtsin kätt kontrollida. Üks robotkäsi, millest olin valmistusruumis inspiratsiooni saanud, kasutas juhtimiseks nukuvarre. Teine kasutas intuitiivset tee programmeerimismeetodit, mille käigus kasutaja liigutas käe erinevatesse asenditesse. Seejärel liiguks käsi neid positsioone tagasi.

Minu esialgne plaan oli lõpetada käe ehitus ja seejärel rakendada mõlemad juhtimismeetodid. Tahtsin ka mingil hetkel pärast seda teha arvutirakenduse selle juhtimiseks. Nagu te ilmselt teate, vähendasin lõpuks projekti selle aspekti ulatust. Kui hakkasin nende kahe esimese juhtimismeetodi kallal töötama, leidsin kiiresti, et intuitiivne tee programmeerimine oli keerulisem, kui ma arvasin. Siis otsustasin keskenduda ja panna muud kontrollimeetodid määramata ajaks ootele.

2. samm: kontrollige

Kontroll
Kontroll

Juhtimismeetod, mille valisin, toimib järgmiselt: liigutate käega kätt erinevatesse asenditesse ja "salvestage" need asendid. Igal positsioonil on teave käe iga lüli vahelise nurga kohta. Kui olete positsioonide salvestamise lõpetanud, vajutate taasesitusnuppu ja käsi naaseb järjestikku igasse asendisse.

Selle kontrollimeetodi puhul tuli välja mõelda palju asju. Selleks, et iga servo pöörduks tagasi salvestatud nurga alla, pidin ma need nurgad kõigepealt kuidagi "salvestama". Selleks oli vaja Arduino Unot, mida ma kasutasin, et saada vastu iga servo praegune nurk. Mu sõber Jeremy Paradie, kes valmistas robotkäe, mis kasutab seda juhtimismeetodit, andis mulle vihje iga hobi servo sisemise potentsiomeetri kasutamiseks. See on potentsiomeeter, mida servo kasutab oma nurga kodeerimiseks. Valisin test -servo, jootsin traadi sisemise potentsiomeetri keskmise tihvti külge ja puurisin korpuses augu, et juhtme väljast välja toita.

Nüüd sain praeguse nurga kätte, lugedes potentsiomeetri keskmise tihvti pinget. Siiski tekkis kaks uut probleemi. Esiteks oli keskmisest tihvtist tulev signaal müra pingepiikide kujul. Sellest probleemist sai tõeline probleem hiljem. Teiseks olid nurga saatmise ja nurga vastuvõtmise väärtuste vahemikud erinevad.

Hobiservomootorite käskimine mõne nurga alla liikuda vahemikus 0 kuni 180 kraadi hõlmab selle PWM -signaali saatmist, mille aeg vastab nurgale. Vastupidi, kasutades Arduino analoogsisendit, et lugeda potentsiomeetri keskmise tihvti pinget, liigutades servosarve vahemikus 0 kuni 180 kraadi, eraldatakse eraldi väärtuste vahemik. Seetõttu oli vaja mõningast matemaatikat, et teisendada salvestatud sisendväärtus vastavaks PWM -väljundväärtuseks, mida on vaja servo sama nurga alla tagasipööramiseks.

Minu esimene mõte oli kasutada lihtsat vahemikukaarti, et leida iga salvestatud nurga jaoks vastav väljund PWM. See töötas, kuid see ei olnud väga täpne. Minu projekti puhul oli 180 -kraadise nurga vahemikule vastavate PWM -i kõrgete ajaväärtuste vahemik palju suurem kui analoogsisendi väärtuste vahemik. Lisaks ei olnud mõlemad vahemikud pidevad ja koosnesid ainult täisarvudest. Seetõttu kadus salvestatud sisendväärtuse väljundväärtusele kaardistamisel täpsus. Just sel hetkel arvasin, et mul on vaja juhtimisahelat, et viia oma servod sinna, kus nad peavad olema.

Kirjutasin koodi PID -juhtimisahelale, milles sisendiks oli keskmine pinge ja väljundiks PWM -väljund, kuid avastasin kiiresti, et vajan ainult integreeritud juhtimist. Selle stsenaariumi korral kujutasid väljund ja sisend mõlemad nurki, nii et proportsionaalse ja tuletatud kontrolli lisamine kippus seda ületama või tal oli soovimatu käitumine. Pärast integreeritud juhtimise häälestamist oli veel kaks probleemi. Esiteks, kui esialgne viga praeguse ja soovitud nurga vahel oleks suur, kiirendaks servo liiga kiiresti. Ma saaksin integraalse juhtimise konstanti vähendada, kuid see muutis üldise liikumise liiga aeglaseks. Teiseks oli liigutus närviline. Selle põhjuseks oli analoogsignaali müra. Juhtimisahel luges seda signaali pidevalt, nii et pingepiigid põhjustasid närvilist liikumist. (Siinkohal liikusin ka oma ühelt test -servolt ülaltoodud pildile. Tegin ka tarkvara iga servo jaoks juhtimisahela objekti.)

Lahendasin liiga kiire kiirenduse probleemi, pannes väljundisse eksponentsiaalselt kaalutud libiseva keskmise (EWMA) filtri. Väljundi keskmistamisega vähendati suuri liikumispiike (sealhulgas mürast tingitud värinat). Kuid sisendsignaali müra oli endiselt probleem, nii et minu projekti järgmine etapp püüdis seda lahendada.

Samm: müra

Müra
Müra

Pildil ülal

Punane: algne sisendsignaal

Sinine: pärast töötlemist sisendsignaal

Esimene samm sisendsignaali müra vähendamiseks oli selle põhjuse mõistmine. Ostsilloskoobi signaali uurimisel selgus, et pinge tõuseb sagedusega 50 Hz. Juhtusin teadma, et ka servodele saadetav PWM -signaal oli sagedusega 50 Hz, nii et ma arvasin, et pingepiikidel on sellega midagi pistmist. Ma püstitasin hüpoteesi, et servode liikumine tekitab kuidagi potentsiomeetrite V+ tihvtil pingepiike, mis omakorda ajab keskmise tihvti näidu sassi.

Siin tegin oma esimese katse müra vähendamiseks. Avasin iga servo uuesti ja lisasin potentsiomeetri V+ tihvtist tuleva traadi. Nende lugemiseks vajasin rohkem analoogsisendeid kui Arduino Unol, nii et kolisin ka sel hetkel Arduino Mega. Oma koodis muutsin nurgasisendit keskmise tihvti pinge analoognäiduks keskmise tihvti pinge ja V+ tihvti pinge suhteks. Ma lootsin, et kui tihvtidel on pingepiik, tühistatakse see suhe.

Panin kõik uuesti kokku ja katsetasin, kuid naelu ikka tekkis. See, mida ma oleksin pidanud sel hetkel tegema, oli minu pinnase uurimine. Minu järgmine idee oli hoopis panna potentsiomeetrid eraldi toiteallikale. Ühendasin V+ juhtmed Arduino analoogsisenditest lahti ja ühendasin need eraldi toiteallikaga. Olin tihvte enne proovinud, nii et teadsin, millise pingega neid toita. Lõikasin ära ka juhtpaneeli ja V+ tihvti vahelise ühenduse igas servos. Panin kõik uuesti kokku, taastasin nurga sisestuskoodi selliseks, nagu see oli enne, ja siis katsetasin seda. Ootuspäraselt ei olnud sisendpoldil enam pingepiike. Siiski tekkis uus probleem - potentsiomeetrite eraldi toiteallikale asetamine oli servode sisemised juhtimisahelad täiesti sassi ajanud. Ehkki V+ tihvtid said sama pinget kui varem, oli servode liikumine ebaühtlane ja ebastabiilne.

Ma ei saanud aru, miks see nii oli, nii et uurisin lõpuks oma maaühendust servodes. Maapinnal oli keskmine pingelangus umbes 0,3 volti ja servade voolu tõmbamisel tõusis see veelgi. Mulle oli siis selge, et neid tihvte ei saa enam pidada "jahvatatud" ja neid saab paremini kirjeldada kui "võrdlusnööpe". Servode juhtpaneelid pidid mõõtma potentsiomeetri keskmise tihvti pinget nii V+ kui ka võrdlustappide pinge suhtes. Potentsiomeetrite eraldi sisselülitamine ajas selle suhtelise mõõtmise sassi, sest nüüd juhtus pingepiigi asemel kõigil tihvtidel see ainult võrdluspoldil.

Minu juhendaja dr Malloch aitas mul seda kõike siluda ja soovitas mul mõõta ka keskmise tihvti pinget teiste tihvtide suhtes. Seda tegin oma kolmanda ja viimase katse puhul nurga sisendi müra vähendamiseks. Avasin iga servo, ühendasin uuesti katkestatud juhtme ja lisasin kolmanda juhtme, mis tuli potentsiomeetri võrdluspoldist. Oma koodis muutsin nurgasisendi võrdseks järgmise avaldisega: (keskmine tihvt - võrdlusnõel) / (V+tihvt - võrdlusnõel). Testisin seda ja see vähendas edukalt pingepiikide mõju. Lisaks panin sellele sisendile ka EWMA filtri. See töödeldud signaal ja algne signaal on kujutatud ülal.

4. samm: asjade mähkimine

Asjade kokku pakkimine
Asjade kokku pakkimine

Kui müraprobleem oli parimate võimaluste piires lahendatud, asusin disaini fikseerima ja valmistama. Käsi pani liiga palju raskust põhjas olevale servole, nii et tegin suure laagri abil uue aluse, mis toetab käe raskust. Trükkisin ka haaratsi ja lihvisin natuke, et see tööle hakkaks.

Olen lõpptulemusega väga rahul. Intuitiivne liikumise planeerimine töötab järjepidevalt ning liikumine on kõike arvestades sujuv ja täpne. Kui keegi teine sooviks seda projekti teha, julgustaksin teda kõigepealt tungivalt sellest lihtsama versiooni tegema. Tagantjärele mõeldes oli sellise hobi -servomootorite abil tegemine väga naiivne ja seda näitavad raskused, mis mul selle tööle saamisel tekkisid. Pean imeks, et käsi töötab nii hästi. Ma tahan ikkagi teha robotkäe, mis suudab arvutiga liidestuda, keerukamaid programme käivitada ja suurema täpsusega liikuda, nii et oma järgmise projekti jaoks teen seda. Kasutan kvaliteetseid digitaalseid robootika servosid ja loodetavasti võimaldab see mul vältida paljusid selle projektiga seotud probleeme.

CAD -dokument:

cad.onshape.com/documents/818ea878dda7ca2f…

Soovitan: