Obsah:

Robotic Arm: Jensen: 4 kroky
Robotic Arm: Jensen: 4 kroky

Video: Robotic Arm: Jensen: 4 kroky

Video: Robotic Arm: Jensen: 4 kroky
Video: 拜登病情严重身不由己风烛残年川普支持率已大幅领先?美帝从未衰落超市高危含手推车冷冻柜把手肉品外包装 America has never declined, Trump has led Biden. 2024, Červenec
Anonim
Robotic Arm: Jensen
Robotic Arm: Jensen

Jensen je robotické rameno postavené na platformě Arduino se zaměřením na intuitivní plánování pohybu, provedené jako 1 úvěrový nezávislý projekt pod vedením mentora Charlese B. Mallocha, PhD. Může replikovat řadu pohybů naprogramovaných ručním pohybem paže. Inspiraci ke stavbě jsem získal z pohledu na další robotická ramena postavená v makerspace UMass Amherst M5. Dále jsem se chtěl naučit používat CAD software a chtěl jsem vytvořit pokročilý projekt Arduino. Vnímal jsem to jako příležitost dělat všechny ty věci.

Krok 1: Originální design a rozsah

Originální design a rozsah
Originální design a rozsah

CAD software, který jsem se rozhodl pro tento projekt naučit, byl OnShape a první věc, kterou jsem vymodeloval, bylo analogové servo HiTec HS-422. Vybral jsem si servo, protože mi bylo k dispozici na místě a byla to rozumná cena. Také to sloužilo jako osvědčený postup pro učení OnShape před přechodem k navrhování mých vlastních částí. V této rané fázi projektu jsem měl obecnou představu o tom, čeho chci, aby ta ruka byla schopná. Chtěl jsem, aby to mělo slušný rozsah pohybu a chapadlo pro zvedání věcí. Tyto obecné specifikace informovaly design, když jsem pokračoval v jeho modelování v CAD. Další omezení, které jsem v tomto okamžiku měl, byla velikost tiskového lože na mé 3D tiskárně. Proto je základna, kterou vidíte na fotografii výše, poměrně primitivní čtverec.

Během této fáze projektu jsem také brainstormingoval, jak chci ovládat paži. Jedna robotická ruka, kterou jsem se inspiroval ve výrobním prostoru, používala k ovládání loutkové rameno. Jiný použil intuitivní metodu programování cesty, ve které bylo rameno přesunuto uživatelem do různých poloh. Rameno by se pak vrátilo zpět skrz tyto pozice.

Můj původní plán byl dokončit stavbu ramene a poté implementovat obě tyto kontrolní metody. Chtěl jsem také vytvořit počítačovou aplikaci pro ovládání v určitém okamžiku poté. Jak pravděpodobně víte, nakonec jsem omezil rozsah tohoto aspektu projektu. Když jsem začal pracovat na těch prvních dvou metodách řízení, rychle jsem zjistil, že ta intuitivní cesta k programování je složitější, než jsem si myslel. Tehdy jsem se rozhodl, že se na to zaměřím a ostatní kontrolní metody pozastavím na neurčito.

Krok 2: Ovládání

Řízení
Řízení

Metoda ovládání, kterou jsem zvolil, funguje takto: pohybujete paží rukama do různých poloh a tyto pozice „ukládáte“. Každá pozice má informace o úhlu mezi každým článkem paže. Poté, co skončíte s ukládáním pozic, stisknete tlačítko přehrávání a paže se postupně vrátí do každé z těchto pozic.

Při této kontrolní metodě bylo třeba zjistit mnoho věcí. Aby se každé servo vrátilo do uloženého úhlu, musel jsem ty úhly v první řadě nějak „uložit“. To vyžadovalo, aby Arduino Uno, které jsem používal, bylo schopné přijímat aktuální úhel každého serva. Můj přítel Jeremy Paradie, který vyrobil robotickou ruku, která používá tuto metodu ovládání, mi řekl, abych použil vnitřní potenciometr každého hobby serva. Toto je potenciometr, který servo samo používá ke kódování svého úhlu. Vybral jsem si testovací servo, připájel jsem vodič ke střednímu kolíku vnitřního potenciometru a vyvrtal otvor v pouzdře, abych vodič přiváděl ven.

Nyní jsem mohl získat aktuální úhel odečtením napětí na středním pinu potenciometru. Byly však dva nové problémy. Za prvé, na signálu přicházejícím ze středního kolíku byl šum ve formě špiček napětí. Tento problém se později stal skutečným problémem. Za druhé, rozsah hodnot pro odeslání úhlu a přijetí úhlu byl jiný.

Říct hobby servomotorům, aby se pohybovaly pod určitým úhlem mezi 0 a 180 stupni, zahrnuje vyslání signálu PWM s vysokým časem odpovídajícím úhlu. Naopak pomocí analogového vstupního pinu Arduina ke čtení napětí na středním pinu potenciometru při pohybu servo houkačky mezi 0 a 180 stupni se vrací samostatný rozsah hodnot. Proto byla potřeba nějaká matematika k převodu uložené vstupní hodnoty na odpovídající výstupní hodnotu PWM potřebnou k návratu serva do stejného úhlu.

Moje první myšlenka byla použít jednoduchou mapu rozsahu k nalezení odpovídajícího výstupního PWM pro každý uložený úhel. To fungovalo, ale nebylo to příliš přesné. V případě mého projektu byl rozsah vysokých časových hodnot PWM odpovídajících rozsahu úhlu 180 stupňů mnohem větší než rozsah hodnot analogových vstupů. Oba tyto rozsahy navíc nebyly spojité a skládaly se pouze z celých čísel. Proto když jsem mapoval uloženou vstupní hodnotu na výstupní, došlo ke ztrátě přesnosti. V tu chvíli jsem usoudil, že potřebuji řídicí smyčku, abych dostal svá serva tam, kam potřebovali.

Napsal jsem kód pro regulační smyčku PID, ve které bylo vstupem napětí na středním kolíku a výstupem byl výstup PWM, ale rychle jsem zjistil, že potřebuji pouze integrované ovládání. V tomto scénáři výstup i vstup reprezentovaly úhly, takže přidání proporcionálního a derivačního řízení mělo tendenci jej překračovat nebo mít nežádoucí chování. Po vyladění integrálního ovládání došlo ještě ke dvěma problémům. Za prvé, pokud by počáteční chyba mezi aktuálním a požadovaným úhlem byla velká, servo by zrychlilo příliš rychle. Mohl jsem snížit konstantu pro integrální ovládání, ale to způsobilo, že celkový pohyb byl příliš pomalý. Za druhé, ten pohyb byl nervózní. To bylo důsledkem šumu na analogovém vstupním signálu. Řídicí smyčka tento signál nepřetržitě četla, takže napěťové špičky způsobily nervózní pohyb. (V tomto okamžiku jsem se také přesunul ze svého jednoho testovacího serva do sestavy na obrázku výše. Pro každé servo v softwaru jsem také vytvořil objekt řídicí smyčky.)

Problém příliš rychlé akcelerace jsem vyřešil vložením exponenciálně váženého filtru klouzavého průměru (EWMA) na výstup. Zprůměrováním výstupu se snížily velké hroty v pohybu (včetně chvění z hluku). Šum na vstupním signálu však byl stále problém, takže další fáze mého projektu se to snažila vyřešit.

Krok 3: Hluk

Hluk
Hluk

Na snímku nahoře

Červeně: původní vstupní signál

Modře: vstupní signál po zpracování

Prvním krokem ke snížení šumu na vstupním signálu bylo pochopení jeho příčiny. Sondování signálu na osciloskopu ukázalo, že napěťové špičky se dějí rychlostí 50 Hz. Náhodou jsem věděl, že signál PWM vysílaný na serva byl také rychlostí 50 Hz, takže jsem hádal, že napěťové špičky s tím mají něco společného. Předpokládal jsem, že pohyb serva nějak způsobuje napěťové špičky na V+ pinu potenciometrů, což zase zpomaluje čtení na středním pinu.

Zde jsem provedl svůj první pokus o snížení hluku. Každé servo jsem znovu otevřel a přidal drát vycházející z kolíku V+ na potenciometru. K jejich čtení jsem potřeboval více analogových vstupů, než měl Arduino Uno, takže jsem se v tomto bodě také přesunul na Arduino Mega. V mém kódu jsem změnil úhlový vstup z analogového odečtu napětí na středním pinu na poměr mezi napětím na středním pinu a napětím na pinu V+. Doufal jsem, že pokud by na kolících došlo ke špičce napětí, v poměru by se to zrušilo.

Všechno jsem dal dohromady a vyzkoušel, ale ty hroty se stále děly. V tuto chvíli jsem měl udělat průzkum mé země. Místo toho byl můj další nápad úplně umístit potenciometry na samostatné napájení. Odpojil jsem vodiče V+ od analogových vstupů na Arduinu a zapojil je do samostatného napájecího zdroje. Dříve jsem sondoval piny, takže jsem věděl, na jaké napětí je napájet. Také jsem přerušil spojení mezi řídicí deskou a kolíkem V+ v každém servu. Všechno jsem dal dohromady, vrátil vstupní kód úhlu na to, jak to bylo předtím, a pak jsem to otestoval. Jak se dalo očekávat, na vstupním kolíku již nebyly žádné napěťové špičky. Nastal však nový problém - uvedení potenciometrů na samostatný napájecí zdroj zcela zpackalo vnitřní řídicí smyčky serv. I když kolíky V+ dostaly stejné napětí jako dříve, pohyb serva byl nestálý a nestabilní.

Nechápal jsem, proč se to děje, a tak jsem konečně prozkoumal své zemní spojení v servech. Na zemi došlo k průměrnému poklesu napětí asi o 0,3 voltu, který se ještě zvýšil, když serva odebírala proud. Tehdy mi bylo jasné, že tyto piny již nelze považovat za „uzemněné“a lze je lépe popsat jako „referenční“piny. Řídicí desky v servech musely měřit napětí na středním pinu potenciometru vzhledem k napětí na V+ a referenčních pinech. Napájení potenciometrů samostatně zpomalilo toto relativní měření, protože nyní místo napěťového špičky, ke kterému dochází na všech pinech, se to stalo pouze na referenčním pinu.

Můj mentor, doktor Malloch, mi to všechno pomohl odladit a navrhl, abych také změřil napětí na středním pinu vzhledem k ostatním kolíkům. To jsem udělal pro svůj třetí a poslední pokus o snížení šumu úhlového vstupu. Otevřel jsem každé servo, znovu připojil drát, který jsem odstřihl, a přidal třetí vodič vycházející z referenčního kolíku na potenciometru. V mém kódu jsem vytvořil úhelový vstup ekvivalentní následujícímu výrazu: (střední pin - referenční pin) / (V+pin - referenční pin). Testoval jsem to a úspěšně to snížilo účinky napěťových špiček. Kromě toho jsem na tento vstup také vložil filtr EWMA. Tento zpracovaný signál a původní signál jsou na obrázku výše.

Krok 4: Zabalení věcí

Zabalení věcí
Zabalení věcí

Když byl problém s hlukem vyřešen podle mých nejlepších schopností, pustil jsem se do opravy a výroby závěrečných částí návrhu. Rameno kladlo na servo v základně příliš velkou váhu, a tak jsem vytvořil nový základ, který podepírá hmotnost ramene pomocí velkého ložiska. Také jsem vytiskl chapadlo a trochu jej obrousil, aby fungovalo.

S konečným výsledkem jsem velmi spokojen. Intuitivní plánování pohybu funguje konzistentně a pohyb je plynulý a přesný, když vezmete v úvahu všechno. Pokud by někdo jiný chtěl vytvořit tento projekt, nejprve bych ho důrazně povzbudil, aby vytvořil jeho jednodušší verzi. Při zpětném pohledu bylo vyrobení něčeho takového pomocí hobby servomotorů velmi naivní a potíže, které jsem měl při jeho fungování, to ukazují. Považuji za zázrak, že paže funguje stejně dobře, jako funguje. Stále chci vytvořit robotickou ruku, která bude schopná komunikovat s počítačem, spouštět složitější programy a pohybovat se s větší přesností, takže pro svůj další projekt to udělám. Budu používat vysoce kvalitní serva digitální robotiky a doufejme, že mi to umožní vyhnout se mnoha problémům, se kterými jsem se v tomto projektu setkal.

CAD dokument:

cad.onshape.com/documents/818ea878dda7ca2f…

Doporučuje: