Kazalo:

Robotska roka: Jensen: 4 koraki
Robotska roka: Jensen: 4 koraki

Video: Robotska roka: Jensen: 4 koraki

Video: Robotska roka: Jensen: 4 koraki
Video: SCP-455 Грузовой корабль (Сезон 3 переиздание) (Класс объекта: Евклид) (Cognitohazard) 2024, Oktober
Anonim
Robotska roka: Jensen
Robotska roka: Jensen

Jensen je robotska roka, zgrajena na platformi Arduino, s poudarkom na intuitivnem načrtovanju gibov, izvedena kot 1 kreditno neodvisen projekt pod mentorstvom dr. Charlesa B. Mallocha. Lahko ponovi vrsto gibov, programiranih z ročnim premikanjem roke. Navdih za gradnjo sem dobil, ko sem videl druge robotske roke, zgrajene v ustvarjalnem prostoru UMass Amherst M5. Poleg tega sem se želel naučiti uporabljati programsko opremo CAD in narediti napreden projekt Arduino. To sem videl kot priložnost, da naredim vse te stvari.

1. korak: Izvirno oblikovanje in obseg

Izvirno oblikovanje in obseg
Izvirno oblikovanje in obseg

Programska oprema CAD, ki sem jo izbrala za ta projekt, je bila OnShape, prva stvar, ki sem jo modeliral, pa je analogni servo HiTec HS-422. Za servo sem se odločil, ker mi je bil na voljo lokalno in je bila primerna cena. To je bilo tudi dobra praksa za učenje OnShape, preden sem se lotil oblikovanja lastnih delov. Na tej zgodnji točki projekta sem imel splošno predstavo o tem, kaj želim, da je roka sposobna. Želel sem, da ima dostojen obseg gibanja in prijemalo za pobiranje stvari. Te splošne specifikacije so upoštevale zasnovo, ko sem jo nadaljeval z modeliranjem v CAD -u. Druga omejitev pri oblikovanju, ki sem jo imel na tej točki, je bila velikost tiskalne postelje na mojem 3D tiskalniku. Zato je osnova, ki jo vidite na zgornji fotografiji, relativno primitiven kvadrat.

V tej fazi projekta sem tudi razmišljal o tem, kako želim nadzorovati roko. Ena robotska roka, ki me je navdihnila v ustvarjalnem prostoru, je za nadzor uporabljala lutkovno roko. Drugi je uporabil intuitivno metodo programiranja poti, pri kateri je roko uporabnik premaknil v različne položaje. Roka bi nato krožila nazaj skozi te položaje.

Moj prvotni načrt je bil, da dokončam konstrukcijo roke in nato izvedem obe metodi nadzora. Prav tako sem želel po tem narediti računalniško aplikacijo za nadzor. Kot verjetno lahko vidite, sem na koncu zmanjšal obseg tega vidika projekta. Ko sem začel delati na prvih dveh metodah nadzora, sem hitro ugotovil, da je programiranje intuitivne poti bolj zapleteno, kot sem mislil, da bo. Takrat sem se odločil, da se osredotočim nanj in druge metode nadzora postavim v nedoločen čas.

2. korak: Nadzor

Nadzor
Nadzor

Način nadzora, ki sem ga izbral, deluje takole: roko premaknete z rokami v različne položaje in te položaje »shranite«. Vsak položaj vsebuje podatke o kotu med vsakim členom roke. Ko končate s shranjevanjem položajev, pritisnete gumb za predvajanje in roka se zaporedno vrne na vsako od teh pozicij.

Pri tej metodi nadzora je bilo treba ugotoviti veliko stvari. Da bi se vsak servo vrnil v shranjeni kot, sem moral te kote nekako "shraniti". To je zahtevalo, da je Arduino Uno, ki sem ga uporabljal, sprejel trenutni kot vsakega servomotorja. Moj prijatelj Jeremy Paradie, ki je izdelal robotsko roko, ki uporablja to krmilno metodo, mi je nakazal uporabo notranjega potenciometra vsakega hobi servomotorja. To je potenciometer, ki ga servo uporablja za kodiranje svojega kota. Izbral sem preskusni servo, spajkal žico na srednji zatič notranjega potenciometra in v ohišju izvrtal luknjo za napajanje žice zunaj.

Zdaj bi lahko sprejel trenutni kot, tako da preberem napetost na srednjem zatiču potenciometra. Vendar sta se pojavili dve novi težavi. Najprej je prišlo do hrupa v obliki napetostnih konic na signalu, ki je prihajal iz srednjega zatiča. Ta težava je kasneje postala resnična. Drugič, obseg vrednosti za pošiljanje kota in sprejem kota je bil drugačen.

Če govorite, da se hobi servo motorji premaknejo pod kotom med 0 in 180 stopinjami, mu pošljemo signal PWM z visokim časom, ki ustreza kotu. Nasprotno, z uporabo analognega vhodnega zatiča Arduina za branje napetosti na srednjem zatiču potenciometra med premikanjem servoroga med 0 in 180 stopinjami se vrne ločeno območje vrednosti. Zato je bilo potrebno nekaj matematike za pretvorbo shranjene vhodne vrednosti v ustrezno izhodno vrednost PWM, potrebno za vrnitev servomotorja pod isti kot.

Moja prva misel je bila, da bi s preprostim zemljevidom razpona poiskali ustrezen izhodni PWM za vsak shranjeni kot. To je delovalo, vendar ni bilo zelo natančno. V primeru mojega projekta je bil obseg visokih časov PWM, ki ustrezajo kotnemu območju 180 stopinj, veliko večji od razpona analognih vhodnih vrednosti. Poleg tega oba razpona nista bila neprekinjena in sta bila sestavljena samo iz celih števil. Zato sem, ko sem preslikal shranjeno vhodno vrednost v izhodno vrednost, izgubil natančnost. Na tej točki sem ugotovil, da potrebujem krmilno zanko, da bom svoje servomotorje postavil tja, kjer morajo biti.

Napisal sem kodo za krmilno zanko PID, v kateri je bil vhod srednja napetost pina, izhod pa izhod PWM, vendar sem hitro ugotovil, da potrebujem le integralno krmiljenje. V tem scenariju sta izhod in vhod predstavljala kota, zato je dodajanje proporcionalnega in izvedenega nadzora povzročilo prekoračitev ali neželeno vedenje. Po uglaševanju integralnega krmiljenja sta obstajali še dve težavi. Prvič, če bi bila začetna napaka med trenutnim in želenim kotom velika, bi se servo prehitro pospešil. Lahko bi zmanjšal konstanto za integralno krmiljenje, vendar je bilo to celotno gibanje prepočasno. Drugič, gibanje je bilo nervozno. To je posledica šuma na analognem vhodnem signalu. Krmilna zanka je nenehno brala ta signal, zato so napetostni sunki povzročili tresenje. (Na tej točki sem se tudi premaknil z enega testnega servomotorja na zgornjo sliko. Sestavil sem tudi predmet krmilne zanke za vsak servo v programski opremi.)

Problem pretirano hitrega pospeševanja sem rešil tako, da sem na izhod postavil eksponentno utežen filter drsečega povprečja (EWMA). S povprečjem izhoda so se zmanjšali veliki konici v gibanju (vključno s tresenjem zaradi hrupa). Vendar je bil šum na vhodnem signalu še vedno problem, zato je naslednja faza mojega projekta poskušala to rešiti.

3. korak: hrup

Hrup
Hrup

Na sliki zgoraj

V rdeči barvi: izvirni vhodni signal

V modri barvi: vhodni signal po obdelavi

Prvi korak pri zmanjševanju šuma na vhodnem signalu je bilo razumevanje njegovega vzroka. Sondiranje signala na osciloskopu je pokazalo, da se napetostni skoki dogajajo s hitrostjo 50Hz. Naključno sem vedel, da je signal PWM, ki se pošilja na servomotorje, tudi s hitrostjo 50Hz, zato sem uganil, da imajo napetostni sunki nekaj opraviti s tem. Domneval sem, da gibanje servomotorjev nekako povzroča napetostne konice na V+ zatiču potenciometrov, kar posledično moti odčitke na srednjem zatiču.

Tu sem prvič poskusil zmanjšati hrup. Ponovno sem odprl vsak servo in dodal žico, ki prihaja iz vtiča V+ na potenciometru. Za branje sem potreboval več analognih vhodov, kot jih je imel Arduino Uno, zato sem se na tej točki preselil tudi na Arduino Mega. V moji kodi sem kotni vhod spremenil iz analognega odčitavanja napetosti na srednjem zatiču v razmerje med napetostjo na srednjem zatiču in napetostjo na zatiču V+. Upam, da bi se, če bi na zatičih prišlo do napetostnega trna, v razmerju izničilo.

Vse sem spet sestavil in preizkusil, vendar so se konice še vedno dogajale. Kar bi moral narediti na tej točki, je bilo, da preiskujem svoja tla. Namesto tega je bila moja naslednja ideja, da potenciometre v celoti postavim na ločeno napajanje. Odklopil sem žice V+ iz analognih vhodov na Arduinu in jih priključil na ločeno napajanje. Že prej sem preizkusil zatiče, zato sem vedel, na kakšno napetost jih napajam. Prav tako sem odrezal povezavo med nadzorno ploščo in V+ pin v vsakem servo. Vse sem spet sestavil, koto vhodnega kota obrnil na prejšnjo in jo nato preizkusil. Po pričakovanjih na vhodnem zatiču ni bilo več napetosti. Vendar pa je prišlo do nove težave - postavitev potenciometrov na ločeno napajanje je popolnoma zmotila notranje krmilne zanke servomotorjev. Čeprav so zatiči V+ prejemali enako napetost kot prej, je bilo gibanje servomotorjev neredno in nestabilno.

Nisem razumel, zakaj se to dogaja, zato sem končno preizkusil svojo zemeljsko povezavo v servomotorjih. Na tleh je prišlo do povprečnega padca napetosti za približno 0,3 volta, ki je še narasel, ko so servomotorji črpali tok. Takrat mi je bilo jasno, da teh zatičev ni več mogoče šteti za "ozemljene" in jih je bolje opisati kot "referenčne" zatiči. Krmilne plošče v servomotorjih so morale meriti napetost na srednjem zatiču potenciometra glede na napetost na V+ in referenčnih zatičih. Z ločenim napajanjem potenciometrov je ta relativna meritev zmotila, ker se je namesto napetostnega trna na vseh zatičih to zgodilo le na referenčnem zatiču.

Moj mentor, dr. Malloch, mi je pomagal odpraviti vse te napake in mi predlagal, da izmerim tudi napetost na srednjem zatiču glede na druge zatiče. To sem naredil za svoj tretji in zadnji poskus zmanjšanja hrupa kotnega vhoda. Odprl sem vsak servo, ponovno pritrdil žico, ki sem jo odrezal, in dodal tretjo žico, ki prihaja iz referenčnega zatiča na potenciometru. V svoji kodi sem kotni vnos naredil enakovreden naslednjemu izrazu: (srednji pin - referenčni pin) / (V+pin - referenčni pin). Preizkusil sem ga in uspešno zmanjšal učinke napetostnih trnov. Poleg tega sem na ta vhod dal tudi filter EWMA. Ta obdelani signal in izvirni signal sta prikazana zgoraj.

4. korak: Zaključite stvari

Zaključevanje stvari
Zaključevanje stvari

Ker sem po svojih najboljših močeh rešil problem hrupa, sem se lotil popravljanja in izdelave zaključnih delov zasnove. Roka je dajala preveliko težo na servo v bazi, zato sem naredil novo podlago, ki podpira težo roke z velikim ležajem. Natisnila sem tudi prijemalo in ga malo brusila, da je delovalo.

S končnim rezultatom sem zelo zadovoljen. Intuitivno načrtovanje gibanja deluje dosledno in gibanje je gladko in natančno, glede na vse. Če bi kdo drug želel narediti ta projekt, bi ga najprej močno spodbudil, naj naredi enostavnejšo različico. Če pogledamo nazaj, je bilo izdelava česa takega s pomočjo hobi servo motorjev zelo naivna in težave, ki sem jih imel pri delu, to dokazujejo. Menim, da je čudež, da roka deluje tako dobro. Še vedno želim narediti robotsko roko, ki lahko poveže z računalnikom, izvaja bolj zapletene programe in se premika z večjo natančnostjo, zato bom za naslednji projekt to naredil. Uporabil bom visokokakovostne servomotorje za digitalno robotiko in upam, da se bom tako izognil številnim težavam, s katerimi sem se srečal pri tem projektu.

CAD dokument:

cad.onshape.com/documents/818ea878dda7ca2f…

Priporočena: