Obsah:

Robotické rameno: Jensen: 4 kroky
Robotické rameno: Jensen: 4 kroky

Video: Robotické rameno: Jensen: 4 kroky

Video: Robotické rameno: Jensen: 4 kroky
Video: Robotické rameno (Úhlava, o.p.s., pro Noc vědců 2020) 2024, Október
Anonim
Robotické rameno: Jensen
Robotické rameno: Jensen

Jensen je robotické rameno postavené na platforme Arduino so zameraním na intuitívne plánovanie pohybu, ktoré je realizované ako 1 úverový nezávislý projekt pod vedením mentora Charlesa B. Mallocha, PhD. Môže replikovať sériu pohybov naprogramovaných ručným pohybom ramena. Inšpiráciu na jeho stavbu som dostal z pohľadu na ďalšie robotické ramená postavené v makerspace UMass Amherst M5. Ďalej som sa chcel naučiť používať softvér CAD a chcel som vytvoriť pokročilý projekt Arduino. Videl som to ako príležitosť robiť všetky tie veci.

Krok 1: Pôvodný dizajn a rozsah

Pôvodný dizajn a rozsah
Pôvodný dizajn a rozsah

CAD softvér, ktorý som sa rozhodol naučiť sa pre tento projekt, bol OnShape a prvá vec, ktorú som modeloval, bolo analógové servo HiTec HS-422. Vybral som si servo, pretože mi bolo k dispozícii lokálne a bola to rozumná cena. Tiež to slúžilo ako osvedčený postup pri učení sa programu OnShape pred prechodom k navrhovaniu vlastných súčiastok. V tomto ranom štádiu projektu som mal všeobecnú predstavu o tom, čo chcem, aby bolo rameno schopné. Chcel som, aby mal slušný rozsah pohybu a chápadlo na vyberanie vecí. Tieto všeobecné špecifikácie informovali návrh, keď som pokračoval v jeho modelovaní v CAD. Ďalším obmedzením dizajnu, ktoré som v tomto bode mal, bola veľkosť tlačovej plochy na mojej 3D tlačiarni. Preto je základňa, ktorú vidíte na fotografii vyššie, pomerne primitívnym štvorcom.

V tejto fáze projektu som tiež brainstormingoval, ako chcem ovládať ruku. Jedno robotické rameno, ktorým som sa vo výrobnom priestore inšpiroval, používalo na ovládanie bábkové rameno. Ďalší použil intuitívnu metódu programovania dráhy, pri ktorej rameno pohyboval používateľ do rôznych polôh. Rameno by potom prešlo týmito polohami späť.

Môj pôvodný plán bol dokončiť stavbu ramena a potom implementovať obe tieto metódy ovládania. Chcel som tiež vytvoriť počítačovú aplikáciu na ovládanie v určitom okamihu potom. Ako pravdepodobne viete, nakoniec som obmedzil rozsah tohto aspektu projektu. Keď som začal pracovať na týchto prvých dvoch metódach ovládania, rýchlo som zistil, že intuitívne programovanie cesty je komplikovanejšie, ako som si myslel. Vtedy som sa rozhodol, že sa tým zameriam a ostatné metódy ovládania pozastavím na neurčito.

Krok 2: Ovládanie

Ovládanie
Ovládanie

Metóda ovládania, ktorú som si vybral, funguje takto: rukou pohybujete rukou do rôznych polôh a tieto polohy „ukladáte“. Každá pozícia má informácie o uhle medzi každým článkom ramena. Keď ste s ukladaním pozícií skončili, stlačte tlačidlo prehrávania a rameno sa postupne vráti do každej z týchto pozícií.

Pri tejto metóde ovládania bolo potrebné zistiť veľa vecí. Aby sa každé servo vrátilo do uloženého uhla, musel som tieto uhly v prvom rade nejako „uložiť“. To vyžadovalo, aby Arduino Uno, ktoré som používal, bolo schopné zachytiť aktuálny uhol každého serva. Môj priateľ Jeremy Paradie, ktorý vyrobil robotické rameno, ktoré používa túto metódu ovládania, ma poučil o použití vnútorného potenciometra každého hobby serva. Toto je potenciometer, ktorý servo používa na kódovanie svojho uhla. Vybral som si testovacie servo, spájkoval som drôt na stredný kolík vnútorného potenciometra a do rozvádzača som vyvŕtal otvor na vedenie drôtu von.

Aktuálny uhol som teraz mohol získať odčítaním napätia na strednom kolíku potenciometra. Vyskytli sa však dva nové problémy. Po prvé, na signáli prichádzajúcom zo stredného kolíka bol šum vo forme napäťových špičiek. Tento problém sa neskôr stal skutočným problémom. Za druhé, rozsah hodnôt pre odoslanie uhla a prijatie uhla bol odlišný.

Povedať hobby servomotorom, aby sa pohybovali pod určitým uhlom medzi 0 a 180 stupňami, znamená, že mu pošlete signál PWM s vysokým časom zodpovedajúcim uhlu. Naopak, pomocou analógového vstupného kolíka Arduina na čítanie napätia na strednom kolíku potenciometra pri posúvaní servo rohu medzi 0 a 180 stupňov sa vracia oddelený rozsah hodnôt. Preto bola potrebná určitá matematika na preklad uloženej vstupnej hodnoty do zodpovedajúcej výstupnej hodnoty PWM potrebnej na vrátenie serva do rovnakého uhla.

Moja prvá myšlienka bola použiť jednoduchú mapu rozsahu na nájdenie zodpovedajúceho výstupného PWM pre každý uložený uhol. Fungovalo to, ale nebolo to veľmi presné. V prípade môjho projektu bol rozsah vysokých časových hodnôt PWM zodpovedajúcich rozsahu uhlov 180 stupňov oveľa väčší ako rozsah hodnôt analógových vstupov. Oba tieto rozsahy navyše neboli spojité a skladali sa iba z celých čísel. Preto keď som mapoval uloženú vstupnú hodnotu na výstupnú, presnosť sa stratila. V tomto mieste som prišiel na to, že potrebujem riadiacu slučku, aby sa moje servá dostali tam, kde boli.

Napísal som kód pre riadiacu slučku PID, v ktorej bolo vstupom napätie stredného kolíka a výstupom bol výstup PWM, ale rýchlo som zistil, že potrebujem iba integrované ovládanie. V tomto scenári výstup aj vstup reprezentovali uhly, takže pridanie proporcionálnej a derivovanej kontroly malo za následok, že dôjde k prekročeniu alebo má nežiaduce správanie. Po vyladení integrálneho ovládania stále existovali dva problémy. Po prvé, ak by počiatočná chyba medzi aktuálnym a požadovaným uhlom bola veľká, servo by sa zrýchlilo príliš rýchlo. Mohol som znížiť konštantu pre integrálne ovládanie, ale tým bol celkový pohyb príliš pomalý. Po druhé, pohyb bol nervózny. Bol to dôsledok šumu na analógovom vstupnom signáli. Riadiaca slučka priebežne čítala tento signál, takže napäťové špičky spôsobovali nervózny pohyb. (V tomto mieste som sa tiež presťahoval z jedného testovacieho serva do zostavy na obrázku vyššie. Pre každé servo v softvéri som tiež vyrobil objekt riadiacej slučky.)

Problém príliš rýchlej akcelerácie som vyriešil vložením filtra na exponenciálne vážený kĺzavý priemer (EWMA). Priemerovaním výstupu sa znížili veľké skoky v pohybe (vrátane chvenia z hluku). Šum na vstupnom signále bol však stále problém, takže ďalšia fáza môjho projektu sa to snažila vyriešiť.

Krok 3: Hluk

Hluk
Hluk

Na snímke hore

Červená: pôvodný vstupný signál

Modrá: vstupný signál po spracovaní

Prvým krokom k zníženiu šumu na vstupnom signáli bolo pochopenie jeho príčiny. Sondovanie signálu na osciloskope ukázalo, že napäťové špičky sa dejú rýchlosťou 50 Hz. Náhodou som vedel, že signál PWM vysielaný na serva bol tiež rýchlosťou 50 Hz, takže som predpokladal, že s tým majú niečo do činenia napäťové špičky. Predpokladal som, že pohyb serva nejakým spôsobom spôsobuje napäťové špičky na kolíku V+ potenciometrov, čo zasa zamieňa údaje na strednom pine.

Tu som urobil svoj prvý pokus o zníženie hluku. Každé servo som znova otvoril a pridal som drôt vychádzajúci z kolíka V+ na potenciometri. Na ich čítanie som potreboval viac analógových vstupov, ako mal Arduino Uno, a tak som sa v tomto mieste tiež presťahoval do Arduino Mega. V mojom kóde som zmenil uhlový vstup z analógového čítania napätia na strednom kolíku na pomer medzi napätím na strednom kolíku a napätím na kolíku V+. Dúfam, že ak dôjde k zvýšeniu napätia na kolíkoch, v pomere sa to zruší.

Dal som všetko dohromady a vyskúšal som to, ale hroty sa stále diali. V tomto mieste som mal urobiť prieskum mojej zeme. Namiesto toho mojou ďalšou myšlienkou bolo úplne umiestniť potenciometre na samostatné napájanie. Odpojil som vodiče V+ od analógových vstupov na Arduine a zapojil ich do samostatného napájania. Predtým som kolíky sondoval, takže som vedel, na aké napätie ich mám napájať. Tiež som prerušil spojenie medzi riadiacou doskou a kolíkom V+ v každom serve. Zložil som všetko dohromady, vrátil som uholný vstupný kód na stav, aký bol predtým, a potom som ho otestoval. Ako sa dalo očakávať, na vstupnom kolíku už neboli žiadne napäťové špičky. Vyskytol sa však nový problém - uvedenie potenciometrov na samostatný zdroj napájania úplne narušilo vnútorné riadiace slučky serv. Aj keď kolíky V+ dostávali rovnaké napätie ako predtým, pohyb serva bol nepravidelný a nestabilný.

Nechápal som, prečo sa to deje, a tak som konečne sondoval svoje pozemné spojenie v servách. Na zemi došlo k priemernému poklesu napätia asi o 0,3 voltu, ktorý sa ešte zvýšil, keď serva odoberali prúd. Vtedy mi bolo jasné, že tieto kolíky už nemožno považovať za „uzemnené“a možno ich lepšie opísať ako „referenčné“kolíky. Riadiace dosky v servách museli merať napätie na strednom kolíku potenciometra vzhľadom na napätie na V+ a referenčných kolíkoch. Samostatné napájanie potenciometrov narušilo toto relatívne meranie, pretože namiesto zvýšenia napätia na všetkých kolíkoch sa to stalo iba na referenčnom kolíku.

Môj mentor, doktor Malloch, mi to všetko pomohol odladiť a navrhol mi, aby som zmeral aj napätie na strednom kolíku vzhľadom na ostatné piny. To som urobil pre svoj tretí a posledný pokus o zníženie šumu uhlového vstupu. Otvoril som každé servo, znova som pripojil drôt, ktorý som odstrihol, a pridal som tretí drôt vychádzajúci z referenčného kolíka na potenciometri. V mojom kóde som urobil uhlový vstup ekvivalentným s nasledujúcim výrazom: (stredný pin - referenčný pin) / (V+pin - referenčný pin). Testoval som to a úspešne to znížilo účinky napäťových špičiek. Na tento vstup som navyše dal aj EWMA filter. Tento spracovaný signál a pôvodný signál sú na obrázku vyššie.

Krok 4: Zbaliť veci

Zbaliť veci
Zbaliť veci

Keď je problém s hlukom vyriešený podľa mojich najlepších schopností, pustil som sa do opravy a výroby posledných častí návrhu. Rameno príliš zaťažovalo servo v základni, a tak som vyrobil nový základ, ktorý podopiera hmotnosť ramena pomocou veľkého ložiska. Tiež som chápadlo vytlačil a trochu som ho brúsil, aby fungovalo.

S konečným výsledkom som veľmi spokojný. Intuitívne plánovanie pohybu funguje dôsledne a pohyb je plynulý a presný, berúc do úvahy všetko. Ak by chcel tento projekt vytvoriť niekto iný, najskôr by som ho dôrazne vyzval, aby urobil jeho jednoduchšiu verziu. Keď sa na to spätne pozriem, výroba niečoho takého pomocou hobby servomotorov bola veľmi naivná a ukazuje sa, že ťažkosti s jeho fungovaním. Považujem za zázrak, že ruka funguje tak dobre, ako funguje. Stále chcem vytvoriť robotickú ruku, ktorá bude schopná pracovať s počítačom, spúšťať zložitejšie programy a pohybovať sa s väčšou presnosťou, takže pre svoj ďalší projekt to urobím. Budem používať vysoko kvalitné servá digitálnej robotiky a dúfam, že mi to umožní vyhnúť sa mnohým problémom, s ktorými som sa v tomto projekte stretol.

Dokument CAD:

cad.onshape.com/documents/818ea878dda7ca2f…

Odporúča: