Turinys:

Robotinė ranka: Jensenas: 4 žingsniai
Robotinė ranka: Jensenas: 4 žingsniai

Video: Robotinė ranka: Jensenas: 4 žingsniai

Video: Robotinė ranka: Jensenas: 4 žingsniai
Video: Nauja robotinė ranka Tarptautinėje kosminėje stotyje 2024, Spalio mėn
Anonim
Robotinė ranka: Jensenas
Robotinė ranka: Jensenas

„Jensen“yra robotinė ranka, sukurta „Arduino“platformoje, daugiausia dėmesio skiriant intuityviam judesių planavimui, atlikta kaip 1 kredito nepriklausomas projektas, vadovaujamas daktaro Charleso B. Mallocho. Jis gali atkartoti judesių seriją, užprogramuotą rankiniu būdu perkeliant ranką. Įkvėpimo jį kurti sėmiausi matydamas kitas „UMass Amherst M5“kūrėjų erdvėje sukurtas robotas. Be to, norėjau išmokti naudotis CAD programine įranga ir sukurti pažangų „Arduino“projektą. Aš tai supratau kaip galimybę padaryti visus tuos dalykus.

1 žingsnis: originalus dizainas ir taikymo sritis

Originalus dizainas ir taikymo sritis
Originalus dizainas ir taikymo sritis

CAD programinė įranga, kurią pasirinkau mokytis šiam projektui, buvo „OnShape“, o pirmas dalykas, kurį sumodeliavau, buvo „HiTec HS-422“analoginis servo įrenginys. Aš pasirinkau servo, nes jis buvo prieinamas man vietoje ir buvo priimtina kaina. Tai taip pat buvo gera praktika mokantis „OnShape“prieš pradedant kurti savo dalis. Ankstyvame projekto etape turėjau bendrą supratimą, ką noriu, kad ranka būtų pajėgi. Norėjau, kad jis turėtų tinkamą judesių diapazoną ir griebtuvą daiktams surinkti. Šios bendrosios specifikacijos informavo dizainą, kai aš toliau modeliavau jį CAD. Dar vienas dizaino apribojimas, kurį turėjau šiuo metu, buvo 3D spausdintuvo spausdinimo lovos dydis. Štai kodėl pagrindas, kurį matote aukščiau esančioje nuotraukoje, yra gana primityvus kvadratas.

Šiame projekto etape aš taip pat galvojau, kaip noriu valdyti ranką. Viena robotų ranka, kurią įkvėpiau kūrėjų erdvėje, valdymui panaudojo marionetinę ranką. Kitas naudojo intuityvų kelio programavimo metodą, kai vartotojas ranką perkėlė į įvairias pozicijas. Tada ranka grįžtų per tas pozicijas.

Mano pirminis planas buvo užbaigti rankos konstrukciją ir tada įgyvendinti abu šiuos kontrolės metodus. Aš taip pat norėjau sukurti kompiuterinę programą, skirtą ją valdyti tam tikru momentu po to. Kaip tikriausiai galite pasakyti, aš galiausiai sumažinau šio projekto aspekto apimtį. Kai pradėjau dirbti su šiais pirmaisiais dviem valdymo metodais, greitai supratau, kad intuityvus kelio programavimas yra sudėtingesnis, nei maniau. Būtent tada nusprendžiau sutelkti dėmesį ir atidėti kitus kontrolės metodus neribotam laikui.

2 žingsnis: valdymas

Kontrolė
Kontrolė

Kontrolės metodas, kurį pasirinkau, veikia taip: ranką perkeliate rankomis į įvairias pozicijas ir „išsaugote“tas pozicijas. Kiekviena padėtis turi informaciją apie kampą tarp kiekvienos rankos grandinės. Išsaugoję pozicijas, paspausite atkūrimo mygtuką ir ranka iš eilės grįš į kiekvieną iš šių pozicijų.

Taikant šį kontrolės metodą, reikėjo išsiaiškinti daug dalykų. Kad kiekvienas servo grįžtų į išsaugotą kampą, pirmiausia turėjau kažkaip „išsaugoti“tuos kampus. Tam reikėjo „Arduino Uno“, kurį naudoju, kad galėčiau priimti dabartinį kiekvieno servo kampą. Mano draugas Jeremy Paradie, sukūręs robotinę ranką, naudojančią šį valdymo metodą, įtikino mane naudoti kiekvieno pomėgio servo vidinį potenciometrą. Tai yra potenciometras, kurį servo naudoja savo kampui koduoti. Aš pasirinkau bandomąjį servo, litavau laidą prie vidinio potenciometro vidurinio kaiščio ir išgręžiau skylę gaubte, kad laidas būtų tiekiamas lauke.

Dabar galėčiau gauti dabartinį kampą, skaitydamas įtampą ant potenciometro vidurinio kaiščio. Tačiau atsirado dvi naujos problemos. Pirma, iš vidurinio kaiščio sklindančio signalo kilo triukšmas įtampos šuolių pavidalu. Ši problema vėliau tapo tikra problema. Antra, kampo siuntimo ir kampo gavimo verčių diapazonas buvo skirtingas.

Įspėjus pomėgių servo varikliams pasisukti tam tikru kampu nuo 0 iki 180 laipsnių, reikia išsiųsti jam PWM signalą, kurio laikas atitinka kampą. Priešingai, naudojant analoginį „Arduino“įvesties kaištį, norint nuskaityti įtampą ant potenciometro vidurinio kaiščio, judinant servo ragą nuo 0 iki 180 laipsnių, pateikiamas atskiras verčių diapazonas. Todėl reikėjo šiek tiek matematikos, norint išsaugotą įvesties vertę išversti į atitinkamą PWM išvesties vertę, reikalingą norint grąžinti servo į tą patį kampą.

Mano pirmoji mintis buvo naudoti paprastą diapazono žemėlapį, kad būtų galima rasti atitinkamą išvesties PWM kiekvienam išsaugotam kampui. Tai pavyko, bet nebuvo labai tiksliai. Mano projekto atveju PWM aukšto laiko reikšmių diapazonas, atitinkantis 180 laipsnių kampo diapazoną, buvo daug didesnis nei analoginių įvesties verčių diapazonas. Be to, abu šie diapazonai nebuvo tęstiniai ir sudaryti tik iš sveikųjų skaičių. Todėl, kai susiejau išsaugotą įvesties vertę su išvesties verte, prarandamas tikslumas. Būtent šiuo metu aš supratau, kad man reikia valdymo kilpos, kad mano servai būtų ten, kur jie turi būti.

Aš parašiau kodą PID valdymo kilpai, kurioje įvestis buvo vidutinės kaiščio įtampa, o išėjimas - PWM išėjimas, tačiau greitai sužinojau, kad man reikia tik integruoto valdymo. Pagal šį scenarijų tiek išvestis, tiek įvestis atspindėjo kampus, todėl pridedant proporcingą ir išvestinę kontrolę, ji dažniausiai peržengė arba turėjo nepageidaujamą elgesį. Sureguliavus integruotą valdymą, vis tiek buvo dvi problemos. Pirma, jei pradinė paklaida tarp srovės ir norimo kampo būtų didelė, servo greitis įsibėgėtų per greitai. Galėčiau sumažinti integruoto valdymo konstantą, tačiau dėl to bendras judėjimas tapo per lėtas. Antra, judesys buvo nervingas. Tai įvyko dėl analoginio įvesties signalo triukšmo. Valdymo kilpa nuolat skaitė šį signalą, todėl įtampos šuoliai sukėlė nervingą judesį. (Šiuo metu aš taip pat persikėliau iš vieno bandomojo servo į surinkimą, pavaizduotą aukščiau. Aš taip pat sukūriau valdymo kilpos objektą kiekvienai programinės įrangos servo.)

Aš išsprendžiau pernelyg greito pagreičio problemą, įvesdamas eksponentiškai svertą slankiojo vidurkio (EWMA) filtrą. Vidutiniškai įvertinus išvestį, sumažėjo dideli judesio šuoliai (įskaitant triukšmą). Tačiau įvesties signalo triukšmas vis dar buvo problema, todėl kitas mano projekto etapas bandė tai išspręsti.

3 žingsnis: Triukšmas

Triukšmas
Triukšmas

Nuotraukoje viršuje

Raudona: originalus įvesties signalas

Mėlyna: įvesties signalas po apdorojimo

Pirmasis žingsnis mažinant įvesties signalo triukšmą buvo suprasti jo priežastį. Zonduojant signalą osciloskopu, paaiškėjo, kad įtampos šuoliai vyksta 50 Hz dažniu. Aš atsitiktinai žinojau, kad PWM signalas, siunčiamas į servos, taip pat buvo 50 Hz dažniu, todėl spėjau, kad įtampos šuoliai turėjo kažką bendro. Aš iškėliau hipotezę, kad servo judėjimas kažkaip sukelia įtampos šuolius potenciometrų V+ kaištyje, o tai savo ruožtu sutrikdo vidurinio kaiščio rodmenis.

Štai čia aš pirmą kartą bandžiau sumažinti triukšmą. Aš vėl atidariau kiekvieną servo sistemą ir pridėjau laidą, einantį iš potenciometro V+ kaiščio. Man reikėjo daugiau analoginių įėjimų, kad juos perskaityčiau nei „Arduino Uno“, todėl šiuo metu taip pat persikėliau į „Arduino Mega“. Savo kode aš pakeičiau kampo įvestį iš analoginio vidutinio kaiščio įtampos rodmens į santykį tarp įtampos viduriniame kaištyje ir įtampos ant V+ kaiščio. Tikėjausi, kad jei ant kaiščių būtų įtampos šuolis, santykis būtų panaikintas.

Viską vėl sudėjau ir išbandžiau, tačiau spygliai vis dar vyko. Tai, ką turėjau padaryti šiuo metu, buvo ištirti savo žemę. Kita mano idėja buvo potenciometrus visiškai prijungti prie atskiro maitinimo šaltinio. Aš atjungiau V+ laidus nuo analoginių „Arduino“įėjimų ir prijungiau juos prie atskiro maitinimo šaltinio. Anksčiau kaiščius zondavau, todėl žinojau, kokia įtampa juos maitinti. Aš taip pat nutraukiau jungtį tarp valdymo plokštės ir kiekvienos servo V+ kaiščio. Aš viską vėl sudėjau, grąžinau kampo įvesties kodą taip, kaip buvo anksčiau, ir tada išbandžiau. Kaip ir tikėtasi, įvesties kaištyje nebeliko įtampos šuolių. Tačiau iškilo nauja problema - potenciometrų įdėjimas į atskirą maitinimo šaltinį visiškai sujaukė vidines servo valdymo kilpas. Nors V+ kaiščiai gavo tą pačią įtampą kaip ir anksčiau, servo judėjimas buvo nepastovus ir nestabilus.

Nesupratau, kodėl taip atsitiko, todėl pagaliau ištyriau savo antžeminį ryšį servose. Vidutinė įtampos kritimas buvo apie 0,3 volto visoje žemėje, o servo traukiant srovę jis dar padidėjo. Tuomet man buvo aišku, kad tų smeigtukų nebegalima laikyti „įžemintais“ir geriau apibūdinti kaip „etaloninius“kaiščius. Servo valdymo plokštės turėjo matuoti įtampą ant potenciometro vidurinio kaiščio, palyginti su įtampa ant V+ ir etaloninių kaiščių. Potenciometrų maitinimas atskirai sujaukė tą santykinį matavimą, nes dabar vietoj įtampos šuolio visuose kaiščiuose įvyko tik atskaitos kaištis.

Mano mentorius, daktaras Mallochas, padėjo man visa tai derinti ir pasiūlė taip pat išmatuoti vidurinio kaiščio įtampą, palyginti su kitais kaiščiais. Tai aš padariau trečią ir paskutinį bandymą sumažinti kampo įvesties triukšmą. Atidariau kiekvieną servo sistemą, vėl prijungiau ištrauktą laidą ir pridėjau trečią laidą, einantį iš potenciometro atskaitos kaiščio. Savo kode aš padariau kampų įvestį lygiavertę šiai išraiškai: (vidurinis kaištis - atskaitos kaištis) / (V+kaištis - atskaitos kaištis). Aš jį išbandžiau ir jis sėkmingai sumažino įtampos šuolių poveikį. Be to, į šią įvestį įdėjau EWMA filtrą. Šis apdorotas signalas ir pradinis signalas pavaizduoti aukščiau.

4 žingsnis: susukite daiktus

Suvynioti daiktus
Suvynioti daiktus

Kiek galėdama išsprendžiau triukšmo problemą, ėmiausi taisymo ir paskutinių dizaino dalių kūrimo. Ranka per daug uždėjo pagrindo servo, todėl aš padariau naują pagrindą, kuris palaiko rankos svorį, naudodamas didelį guolį. Aš taip pat atspausdinau griebtuvą ir šiek tiek šlifavau, kad jis veiktų.

Esu labai patenkintas galutiniu rezultatu. Intuityvus judesių planavimas veikia nuosekliai, o judesys yra sklandus ir tikslus, atsižvelgiant į viską. Jei kas nors kitas norėtų sukurti šį projektą, pirmiausia primygtinai raginčiau jį sukurti paprastesnę jo versiją. Žvelgiant į priekį, padaryti kažką panašaus naudojant pomėgių servo variklius buvo labai naivu, ir tai įrodo sunkumai, kuriuos turėjau padaryti. Aš laikau stebuklu, kad ranka veikia taip gerai. Aš vis dar noriu sukurti robotinę ranką, kuri galėtų sąveikauti su kompiuteriu, paleisti sudėtingesnes programas ir judėti tiksliau, todėl savo kitam projektui tai padarysiu. Naudosiu aukštos kokybės skaitmenines robotikos servo sistemas ir, tikiuosi, tai leis išvengti daugelio problemų, su kuriomis susidūriau šiame projekte.

CAD dokumentas:

cad.onshape.com/documents/818ea878dda7ca2f…

Rekomenduojamas: