Talaan ng mga Nilalaman:

Robotic Arm: Jensen: 4 Hakbang
Robotic Arm: Jensen: 4 Hakbang

Video: Robotic Arm: Jensen: 4 Hakbang

Video: Robotic Arm: Jensen: 4 Hakbang
Video: Theo Jansen Mechanism Four Legged Spider Bot Mechanical Project 2024, Nobyembre
Anonim
Robotic Arm: Jensen
Robotic Arm: Jensen

Si Jensen ay isang robotic arm na itinayo sa platform ng Arduino na may pagtuon sa intuitive na paggalaw ng paggalaw, na ginawa bilang isang 1 independiyenteng proyekto sa credit sa ilalim ng mentorship mula kay Charles B. Malloch, PhD. Maaari nitong kopyahin ang isang serye ng mga paggalaw na na-program sa pamamagitan ng manu-manong paggalaw ng braso. Nakuha ko ang inspirasyon upang maitayo ito mula sa pagkakita ng iba pang mga robotic arm na itinayo sa makasspace ng UMass Amherst M5. Bukod dito, nais kong malaman kung paano gamitin ang CAD software at nais kong gumawa ng isang advanced na proyekto ng Arduino. Nakita ko ito bilang isang pagkakataon na gawin ang lahat ng mga bagay na iyon.

Hakbang 1: Orihinal na Disenyo at Saklaw

Orihinal na Disenyo at Saklaw
Orihinal na Disenyo at Saklaw

Ang CAD software na pinili ko upang malaman para sa proyektong ito ay OnShape, at ang unang bagay na na-modelo ko ay isang HiTec HS-422 analog servo. Pinili ko ang servo dahil magagamit ito sa akin nang lokal at ito ay isang makatuwirang presyo. Nagsilbi din itong mahusay na kasanayan para sa pag-aaral ng OnShape bago magpatuloy sa pagdidisenyo ng aking sariling mga bahagi. Sa maagang puntong ito ng proyekto, mayroon akong pangkalahatang ideya tungkol sa kung ano ang nais kong maging kakayahan ng braso. Nais kong magkaroon ito ng disenteng hanay ng paggalaw at isang gripper para sa pagpili ng mga bagay. Ang mga pangkalahatang pagtutukoy na ito ay nagpapaalam sa disenyo habang nagpatuloy ako sa pagmomodelo nito sa CAD. Ang isa pang hadlang sa disenyo na mayroon ako sa puntong ito ay ang laki ng print bed sa aking 3D printer. Iyon ang dahilan kung bakit ang batayang nakikita mo sa larawan sa itaas ay isang medyo primitive square.

Sa yugtong ito ng proyekto, nag-brainstorming din ako kung paano ko nais makontrol ang braso. Ang isang robotic arm na pinasigla ko sa makerspace ay gumamit ng isang puppet arm para makontrol. Ang isa pa ay gumamit ng isang intuitive na paraan ng pagproseso ng path kung saan ang braso ay inilipat sa iba't ibang mga posisyon ng gumagamit. Pagkatapos ay babalik ang braso sa mga posisyong iyon.

Ang aking orihinal na plano ay upang tapusin ang pagbuo ng braso at pagkatapos ay ipatupad ang pareho ng mga pamamaraang ito sa pagkontrol. Nais ko ring gumawa ng isang application ng computer para sa pagkontrol nito sa ilang mga punto pagkatapos nito. Tulad ng maaari mong sabihin, natapos kong bawasan ang saklaw ng aspetong ito ng proyekto. Nang magsimula akong magtrabaho sa mga unang dalawang pamamaraan ng pagkontrol, mabilis kong nalaman na ang intuitive path ng programa ng isa ay mas kumplikado kaysa sa naisip ko. Iyon ay kapag nagpasya akong gawin itong aking pokus at ilagay ang iba pang mga pamamaraan ng kontrol sa walang katiyakan na paghawak.

Hakbang 2: Kontrolin

Kontrolin
Kontrolin

Ang pamamaraan ng kontrol na pinili ko ay gumagana tulad nito: igagalaw mo ang braso gamit ang iyong mga kamay sa iba't ibang mga posisyon at "i-save" ang mga posisyon na iyon. Ang bawat posisyon ay may impormasyon tungkol sa anggulo sa pagitan ng bawat link ng braso. Pagkatapos mong mag-save ng mga posisyon, na-hit mo ang isang pindutan ng pag-playback at bumalik ang braso sa bawat isa sa mga posisyon na magkakasunud-sunod.

Sa pamamaraang ito sa pagkontrol, maraming mga bagay upang malaman. Upang makabalik ang bawat servo sa isang naka-save na anggulo, kinailangan kong kahit papaano "i-save" ang mga anggulong iyon sa unang lugar. Kinakailangan nito ang ginagamit kong Arduino Uno upang matanggap ang kasalukuyang anggulo ng bawat servo. Ang aking kaibigan na si Jeremy Paradie, na gumawa ng isang robotic arm na gumagamit ng pamamaraang ito sa pagkontrol, na-clue ako sa paggamit ng panloob na potensyomiter ng bawat libangan na servo. Ito ang potentiometer na ginagamit ng servo mismo upang ma-encode ang anggulo nito. Pumili ako ng isang test servo, naghinang ng isang wire sa gitnang pin ng panloob na potensyomiter, at nag-drill ng isang butas sa enclosure upang pakainin ang kawad sa labas.

Natatanggap ko na ngayon ang kasalukuyang anggulo sa pamamagitan ng pagbabasa ng boltahe sa gitnang pin ng potensyomiter. Gayunpaman, mayroong dalawang bagong problema. Una, mayroong ingay sa anyo ng mga boltahe na spike sa signal na nagmumula sa gitnang pin. Ang problemang ito ay naging isang tunay na isyu sa paglaon. Pangalawa, ang saklaw ng mga halaga para sa pagpapadala ng isang anggulo at pagtanggap ng isang anggulo ay magkakaiba.

Ang pagsabi sa hobby servo motors upang lumipat sa ilang anggulo sa pagitan ng 0 at 180 degree ay nagsasangkot sa pagpapadala nito ng isang signal ng PWM na may mataas na oras na naaayon sa anggulo. Salungat, gamit ang isang analog input pin ng Arduino upang basahin ang boltahe sa gitnang pin ng potentiometer habang inililipat ang servo sungay sa pagitan ng 0 at 180 degree ay nagbabalik ng magkakahiwalay na hanay ng mga halaga. Samakatuwid, ang ilang matematika ay kinakailangan upang isalin ang isang nai-save na halaga ng pag-input sa kaukulang halaga ng output ng PWM na kinakailangan upang ibalik ang servo sa parehong anggulo.

Ang aking unang naisip ay ang paggamit ng isang simpleng saklaw na mapa upang hanapin ang kaukulang output PWM para sa bawat naka-save na anggulo. Nagtrabaho ito, ngunit hindi ito masyadong tumpak. Sa kaso ng aking proyekto, ang saklaw ng mga halaga ng mataas na oras ng PWM na naaayon sa isang saklaw ng anggulo na 180 degree ay mas malaki kaysa sa saklaw ng mga halaga ng pag-input ng analog. Bilang karagdagan, ang parehong mga saklaw na ito ay hindi tuloy-tuloy at binubuo ng mga integer lamang. Samakatuwid kapag nai-map ko ang isang nai-save na halaga ng pag-input sa isang halaga ng output, nawala ang katumpakan. Sa puntong ito naisip ko na kailangan ko ng isang control loop upang makuha ang aking mga servos kung saan kailangan nila.

Sumulat ako ng code para sa isang PID control loop kung saan ang input ay ang gitnang boltahe ng pin at ang output ay ang output ng PWM, ngunit mabilis na natuklasan na kailangan ko lamang ng integral na kontrol. Sa senaryong ito, ang output at ang input ay parehong kinakatawan ng mga anggulo, kaya't ang pagdaragdag ng proporsyonal at derivative na kontrol ay may kaugaliang gawin itong sobrang pag-overhoot o magkaroon ng hindi kanais-nais na pag-uugali. Matapos ang pag-tune ng integral control, mayroon pa ring dalawang mga problema. Una, kung ang paunang error sa pagitan ng kasalukuyan at nais na anggulo ay malaki, ang servo ay mas mabilis na magpapabilis. Maaari kong bawasan ang pare-pareho para sa integral na kontrol, ngunit ginawa itong masyadong mabagal sa pangkalahatang paggalaw. Pangalawa, ang galaw ay nakakaligaw. Ito ay isang resulta ng ingay sa signal ng input ng analog. Patuloy na binabasa ng control loop ang signal na ito, kaya't ang boltahe ng mga spike ay sanhi ng paggalaw ng paggalaw. (Sa puntong ito lumipat din ako mula sa aking isang test servo patungo sa pagpupulong na nakalarawan sa itaas. Gumawa rin ako ng isang control loop na object para sa bawat servo sa software.)

Nalutas ko ang problema ng sobrang mabilis na pagpabilis sa pamamagitan ng paglalagay ng isang exponentially weighted Moving average (EWMA) na filter sa output. Sa pamamagitan ng pag-average ng output, ang malalaking mga spike sa paggalaw ay nabawasan (kasama ang jitter mula sa ingay). Gayunpaman, ang ingay sa signal ng input ay isang problema pa rin, kaya't ang susunod na yugto ng aking proyekto ay sinusubukan na lutasin iyon.

Hakbang 3: Ingay

Ingay
Ingay

Nakalarawan sa Itaas

Sa pula: orihinal na signal ng pag-input

Sa asul: input signal pagkatapos ng pagproseso

Ang unang hakbang sa pagbawas ng ingay sa input signal ay pag-unawa sa sanhi nito. Ang paglalagay ng signal sa isang oscilloscope ay nagsiwalat na ang boltahe ng mga spike ay nangyayari sa isang rate na 50Hz. Nalaman ko na ang signal ng PWM na ipinapadala sa servos ay nasa rate ding 50Hz, kaya nahulaan ko na ang boltahe ng mga spike ay may kinalaman doon. Naisip ko na ang paggalaw ng mga servos ay kahit papaano ay nagdudulot ng boltahe na mga spike sa V + pin ng mga potentiometers, na siya namang ginulo ang pagbasa sa gitnang pin.

Dito ko ginawa ang aking unang pagtatangka na bawasan ang ingay. Binuksan ko ulit ang bawat servo at nagdagdag ng isang wire na nagmumula sa V + pin sa potentiometer. Kailangan ko ng mas maraming mga analog input upang mabasa ang mga ito kaysa sa Arduino Uno, kaya't lumipat din ako sa isang Arduino Mega sa puntong ito. Sa aking code, binago ko ang input ng anggulo mula sa pagiging isang analog na pagbabasa ng boltahe sa gitnang pin sa isang ratio sa pagitan ng boltahe sa gitnang pin sa boltahe sa V + pin. Ang aking pag-asa ay na kung mayroong isang boltahe na spike sa mga pin, makakansela ito sa ratio.

Pinagsama ko ang lahat at sinubukan ito, ngunit nangyayari pa rin ang mga pako. Ang dapat kong gawin sa puntong ito ay ang pagsisiyasat sa aking lupa. Sa halip, ang aking susunod na ideya ay ilagay ang mga potentiometers sa isang hiwalay na supply ng kuryente. Inalis ko ang pagkakakonekta sa mga wire na V + mula sa mga analog input sa Arduino, at isinabit ito sa isang magkakahiwalay na supply ng kuryente. Inusisa ko ang mga pin bago alam ko kung anong boltahe ang gagamitin sa kanila. Sinilip ko din ang koneksyon sa pagitan ng control board at V + pin sa bawat servo. Pinagsama ko ang lahat, ibinalik ang anggulo ng input code sa kung paano ito dati, at pagkatapos ay sinubukan ito. Tulad ng inaasahan, wala nang mga voltage spike sa input pin. Gayunpaman, mayroong isang bagong problema - ang paglalagay ng mga potentiometers sa isang hiwalay na supply ng kuryente ay ganap na ginulo ang panloob na mga loop ng kontrol ng mga servo. Kahit na ang mga V + pin ay tumatanggap ng parehong boltahe tulad ng dati, ang paggalaw ng servos ay hindi maayos at hindi matatag.

Hindi ko maintindihan kung bakit nangyayari ito, kaya't sa wakas ay inusisa ko ang aking koneksyon sa lupa sa mga servo. Mayroong isang average na pagbagsak ng boltahe na halos 0.3 Volts sa buong lupa, at mas mataas ang pagtaas nito nang gumuhit ang kasalukuyang servos. Malinaw sa akin noon na ang mga pin na iyon ay hindi na maituturing na "ground," at mas mahusay na mailalarawan bilang mga "sangguniang" pin. Ang mga control board sa servos ay dapat na sumusukat ng boltahe sa gitnang pin ng potentiometer na may kaugnayan sa parehong boltahe sa V + at mga sangguniang pin. Ang pagpapatakbo ng potentiometers ay hiwalay na ginulo ang kamag-anak na pagsukat dahil ngayon sa halip na isang boltahe na spike ang nangyayari sa lahat ng mga pin, nangyari lamang ito sa sangguniang pin.

Ang aking tagapagturo, si Dr. Malloch, ay tinulungan akong i-debug ang lahat ng ito at iminungkahing sukatin ko rin ang boltahe sa gitnang pin na may kaugnayan sa iba pang mga pin. Iyon ang ginawa ko para sa aking pangatlo at panghuling pagtatangka na bawasan ang ingay ng pag-input ng anggulo. Binuksan ko ang bawat servo, muling ikinabit ang kawad na na-snip ko, at nagdagdag ng pangatlong kawad na nagmula sa sangguniang pin sa potensyomiter. Sa aking code, ginawa kong katumbas ng input ng anggulo sa sumusunod na ekspresyon: (gitnang pin - sanggunian na pin) / (V + pin - sanggunian na pin). Sinubukan ko ito at matagumpay na nabawasan ang mga epekto ng boltahe spike. Bilang karagdagan, naglagay din ako ng isang EWMA filter sa input na ito. Ang naprosesong signal na ito at ang orihinal na signal ay nakalarawan sa itaas.

Hakbang 4: Pagbabalot ng Mga Bagay

Pagbabalot ng Bagay
Pagbabalot ng Bagay

Nalutas ang problema sa ingay sa abot ng aking kakayahan, nagtakda ako tungkol sa pag-aayos at paggawa ng mga huling bahagi ng disenyo. Ang braso ay naglalagay ng sobrang timbang sa servo sa base, kaya gumawa ako ng isang bagong base na sumusuporta sa bigat ng braso gamit ang isang malaking tindig. Nag-print din ako ng gripper at gumawa ng kaunting sanding dito upang gumana ito.

Masayang-masaya ako sa huling resulta. Gumagana ang intuitive na pagpaplano ng paggalaw at ang paggalaw ay makinis at tumpak, isinasaalang-alang ang lahat. Kung may ibang nais na gumawa ng proyektong ito, una kong hihimokin sila na gumawa ng isang mas simpleng bersyon nito. Kung iisipin, ang paggawa ng isang bagay tulad nito gamit ang hobby servo motors ay napaka walang muwang, at ang paghihirap na pinapagana ko ito ay upang ipakita iyon. Isaalang-alang ko ito na isang himala na gumagana ang bisig pati na rin ang ginagawa nito. Nais ko pa ring gumawa ng isang robotic arm na maaaring mag-interface sa isang computer, magpatakbo ng mas kumplikadong mga programa, at lumipat nang may mas tumpak, kaya para sa aking susunod na proyekto ay gagawin ko iyon. Gumagamit ako ng de-kalidad na mga digital robot servo, at sana ay payagan akong iwasan ang marami sa mga problemang nakasalamuha ko sa proyektong ito.

Dokumento ng CAD:

cad.onshape.com/documents/818ea878dda7ca2f…

Inirerekumendang: