Satura rādītājs:

Robotiskā roka: Jensens: 4 soļi
Robotiskā roka: Jensens: 4 soļi

Video: Robotiskā roka: Jensens: 4 soļi

Video: Robotiskā roka: Jensens: 4 soļi
Video: Супер ИЗВЕСТНАЯ ПЕСНЯ на гитаре за 30 СЕКУНД 2024, Oktobris
Anonim
Robotu roka: Jensens
Robotu roka: Jensens

Jensens ir robotizēta roka, kas būvēta uz Arduino platformas un koncentrējas uz intuitīvu kustību plānošanu, un tas tika veikts kā 1 kredīta neatkarīgs projekts, ko vadīja doktorants Čārlzs B. Mallohs. Tas var atkārtot virkni kustību, kas ieprogrammēta, manuāli pārvietojot roku. Iedvesmu tās veidošanai guvu, redzot citas robotu ieročus, kas būvēti UMass Amherst M5 veidotājā. Turklāt es vēlējos iemācīties izmantot CAD programmatūru un vēlējos izveidot progresīvu Arduino projektu. Es to uztvēru kā iespēju darīt visas šīs lietas.

1. darbība: sākotnējais dizains un darbības joma

Oriģinālais dizains un darbības joma
Oriģinālais dizains un darbības joma

CAD programmatūra, kuru izvēlējos apgūt šim projektam, bija OnShape, un pirmā lieta, ko modelēju, bija HiTec HS-422 analogais servo. Es izvēlējos servo, jo tas man bija pieejams uz vietas un bija par saprātīgu cenu. Tas kalpoja arī kā laba prakse OnShape apgūšanai, pirms pāriet uz savu detaļu projektēšanu. Šajā projekta sākumā man bija vispārējs priekšstats par to, ko es vēlos, lai roka būtu spējīga. Es gribēju, lai tam būtu pienācīgs kustību diapazons un satvērējs lietu savākšanai. Šīs vispārējās specifikācijas informēja dizainu, kad turpināju to modelēt CAD. Vēl viens dizaina ierobežojums, kas man bija šajā brīdī, bija mana 3D printera drukas gultas izmērs. Tāpēc bāze, ko redzat fotoattēlā iepriekš, ir samērā primitīvs kvadrāts.

Šajā projekta posmā es arī domāju, kā vēlos kontrolēt roku. Viena robotu roka, kas mani iedvesmoja veidotāju telpā, vadībai izmantoja leļļu roku. Citā tika izmantota intuitīva ceļa programmēšanas metode, kurā lietotājs roku pārvietoja dažādās pozīcijās. Pēc tam roka atgriezīsies atpakaļ pa šīm pozīcijām.

Mans sākotnējais plāns bija pabeigt rokas konstrukciju un pēc tam ieviest abas šīs kontroles metodes. Es arī gribēju izveidot datora lietojumprogrammu, lai to kontrolētu kādā brīdī pēc tam. Kā jūs droši vien varat pateikt, es galu galā samazināju šī projekta aspekta apjomu. Kad es sāku strādāt pie šīm pirmajām divām vadības metodēm, es ātri atklāju, ka intuitīvā ceļa programmēšana ir sarežģītāka, nekā es domāju. Tieši tad es nolēmu koncentrēties uz to un pārējās kontroles metodes aizkavēt uz nenoteiktu laiku.

2. darbība: kontrole

Kontrole
Kontrole

Manis izvēlētā kontroles metode darbojas šādi: jūs ar rokām pārvietojat roku dažādās pozīcijās un "saglabājat" šīs pozīcijas. Katrā pozīcijā ir informācija par leņķi starp katru rokas saiti. Kad esat pabeidzis pozīciju saglabāšanu, nospiediet atskaņošanas pogu un roka pēc kārtas atgriežas katrā no šīm pozīcijām.

Šajā kontroles metodē bija jānoskaidro daudzas lietas. Lai katrs servo atgrieztos saglabātā leņķī, man vispirms bija kaut kā "jāsaglabā" šie leņķi. Tam bija nepieciešams Arduino Uno, kuru es izmantoju, lai varētu uztvert katra servo pašreizējo leņķi. Mans draugs Džeremijs Paradijs, kurš izgatavoja robotu roku, kas izmanto šo kontroles metodi, mani ieteica izmantot katra hobija servo iekšējo potenciometru. Tas ir potenciometrs, ko servo izmanto, lai kodētu savu leņķi. Es izvēlējos testa servo, pielodēju vadu pie iekšējā potenciometra vidējās tapas un izurbju korpusā caurumu, lai vadu padotu ārā.

Tagad es varētu saņemt pašreizējo leņķi, nolasot spriegumu potenciometra vidējā tapā. Tomēr bija divas jaunas problēmas. Pirmkārt, signāls, kas nāk no vidējās tapas, bija troksnis sprieguma tapas veidā. Šī problēma vēlāk kļuva par reālu problēmu. Otrkārt, leņķa nosūtīšanas un leņķa saņemšanas vērtību diapazons bija atšķirīgs.

Liekot hobija servomotoriem pārvietoties noteiktā leņķī no 0 līdz 180 grādiem, jānosūta tam PWM signāls ar ilgu laiku, kas atbilst leņķim. Gluži pretēji, izmantojot Arduino analogo ievades tapu, lai nolasītu spriegumu potenciometra vidējā tapā, pārvietojot servo ragu no 0 līdz 180 grādiem, tiek atgriezts atsevišķs vērtību diapazons. Tāpēc bija nepieciešama zināma matemātika, lai pārvērstu saglabāto ievades vērtību atbilstošajā PWM izvades vērtībā, kas nepieciešama, lai servo atgrieztos tajā pašā leņķī.

Mana pirmā doma bija izmantot vienkāršu diapazona karti, lai atrastu atbilstošo izejas PWM katram saglabātajam leņķim. Tas strādāja, bet nebija ļoti precīzs. Mana projekta gadījumā PWM augsto laika vērtību diapazons, kas atbilst 180 grādu leņķa diapazonam, bija daudz lielāks nekā analogo ievades vērtību diapazons. Turklāt abi šie diapazoni nebija nepārtraukti un sastāvēja tikai no veseliem skaitļiem. Tāpēc, kad es kartēju saglabāto ievades vērtību izvades vērtībai, tika zaudēta precizitāte. Tieši šajā brīdī es sapratu, ka man ir nepieciešama vadības cilpa, lai savus servos nogādātu tur, kur tiem bija jābūt.

Es uzrakstīju kodu PID vadības cilpai, kurā ieeja bija vidējā sprieguma spriegums un izeja bija PWM izeja, bet ātri atklāju, ka man nepieciešama tikai integrēta vadība. Šajā scenārijā gan izlaide, gan ievade pārstāvēja leņķus, tāpēc proporcionālās un atvasinātās vadības pievienošana mēdza to pārsniegt vai radīt nevēlamu uzvedību. Pēc integrētās vadības noregulēšanas joprojām bija divas problēmas. Pirmkārt, ja sākotnējā kļūda starp pašreizējo un vēlamo leņķi būtu liela, servo paātrinātu pārāk ātri. Es varētu samazināt integrālās vadības konstanti, bet tas padarīja kustību pārāk lēnu. Otrkārt, kustība bija nervoza. Tas bija trokšņa rezultāts analogā ieejas signālā. Vadības cilpa nepārtraukti lasīja šo signālu, tāpēc sprieguma kāpumi izraisīja nervozu kustību. (Šajā brīdī es arī pārcēlos no viena testa servo uz montāžu, kas attēlota iepriekš. Es arī izveidoju vadības cilpas objektu katram programmatūras servo.)

Pārāk ātra paātrinājuma problēmu es atrisināju, izejā ievietojot eksponenciāli svērtu slīdošā vidējā (EWMA) filtru. Vidēji aprēķinot izvadi, tika samazināti lieli kustību tapas (ieskaitot troksni). Tomēr ieejas signāla troksnis joprojām bija problēma, tāpēc mans projekta nākamais posms mēģināja to atrisināt.

3. solis: troksnis

Troksnis
Troksnis

Attēlā virs

Sarkanā krāsā: sākotnējais ieejas signāls

Zilā krāsā: ievades signāls pēc apstrādes

Pirmais solis, lai samazinātu ieejas signāla troksni, bija tā cēloņa izpratne. Zondējot signālu osciloskopā, atklājās, ka sprieguma lēcieni notiek ar frekvenci 50 Hz. Man gadījās zināt, ka PWM signāls, kas tika nosūtīts uz servos, arī bija ar frekvenci 50 Hz, tāpēc es domāju, ka sprieguma tapām ir kaut kas saistīts ar to. Es izvirzīju hipotēzi, ka servo kustība kaut kādā veidā izraisa sprieguma kāpumus potenciometru V+ tapā, kas savukārt izjauc vidējās tapas rādījumu.

Šeit es pirmo reizi mēģināju samazināt troksni. Es atkal atvēru katru servo un pievienoju vadu, kas nāk no potenciometra V+ tapas. Lai tos izlasītu, man vajadzēja vairāk analogo ieeju nekā Arduino Uno, tāpēc es arī šajā brīdī pārcēlos uz Arduino Mega. Savā kodā es mainīju leņķa ieeju no vidējā sprieguma analogā rādījuma uz attiecību starp vidējās tapas spriegumu un V+ tapas spriegumu. Es cerēju, ka, ja uz tapām būtu sprieguma lēciens, tas atceltu attiecību.

Es saliku visu kopā un pārbaudīju, bet tapas joprojām notika. Tas, kas man būtu jādara šajā brīdī, bija pārbaudīt manu zemi. Tā vietā mana nākamā ideja bija potenciometrus pilnībā novietot uz atsevišķu barošanas avotu. Es atvienoju V+ vadus no Arduino analogās ieejas un pievienoju tos atsevišķam barošanas avotam. Es jau iepriekš biju pārbaudījis tapas, tāpēc es zināju, ar kādu spriegumu tos barot. Katrā servo es arī izgriezu savienojumu starp vadības paneli un V+ tapu. Es saliku visu kopā, atgriezu leņķa ievades kodu tā, kā tas bija agrāk, un pēc tam to pārbaudīju. Kā gaidīts, ievades tapā vairs nebija sprieguma tapas. Tomēr radās jauna problēma - potenciometru novietošana atsevišķā barošanas avotā bija pilnībā izjaukusi servo iekšējās kontroles cilpas. Lai gan V+ tapas saņēma tādu pašu spriegumu kā iepriekš, servo kustība bija neparasta un nestabila.

Es nesapratu, kāpēc tas notiek, tāpēc es beidzot pārbaudīju savu zemes savienojumu servos. Vidējais sprieguma kritums zemē bija aptuveni 0,3 volti, un, palielinoties servos, tas pieauga vēl vairāk. Toreiz man bija skaidrs, ka šīs tapas vairs nevar uzskatīt par "maltām", un tās labāk var raksturot kā "atsauces" tapas. Servo vadības paneļos ir jāmēra potenciometra vidējās tapas spriegums attiecībā pret spriegumu uz V+ un atskaites tapām. Potenciometru barošana atsevišķi izjauca šo relatīvo mērījumu, jo tagad tā vietā, lai visās tapās notiktu sprieguma pieaugums, tas notika tikai uz atskaites tapas.

Mans mentors Dr Malloch palīdzēja man to visu atkļūdot un ieteica man arī izmērīt vidējās tapas spriegumu salīdzinājumā ar citām tapām. To es darīju trešajā un pēdējā mēģinājumā samazināt leņķa ievades troksni. Es atvēru katru servo, atkal pievienoju izgriezto vadu un pievienoju trešo vadu, kas nāk no potenciometra atskaites tapas. Savā kodā es padarīju leņķa ievadi līdzvērtīgu šādai izteiksmei: (vidējā tapa - atsauces tapa) / (V+tapa - atsauces tapa). Es to pārbaudīju, un tas veiksmīgi samazināja sprieguma tapas ietekmi. Turklāt šai ieejai es ievietoju arī EWMA filtru. Šis apstrādātais signāls un sākotnējais signāls ir attēloti iepriekš.

4. solis: lietu iesaiņošana

Iesaiņot lietas
Iesaiņot lietas

Tā kā trokšņa problēma tika atrisināta pēc iespējas labāk, es ķēros pie dizaina galīgo daļu labošanas un izgatavošanas. Roka uzlika pārāk lielu svaru servo pamatnē, tāpēc es izveidoju jaunu pamatni, kas atbalsta rokas svaru, izmantojot lielu gultni. Es arī izdrukāju satvērēju un mazliet noslīpēju, lai tas darbotos.

Esmu ļoti apmierināts ar gala rezultātu. Intuitīvā kustības plānošana darbojas konsekventi, un kustība ir vienmērīga un precīza, ņemot vērā visu. Ja kāds cits vēlas izveidot šo projektu, es vispirms ļoti mudinātu viņu izveidot vienkāršāku tā versiju. Gribot domāt, kaut kā šāda izgatavošana, izmantojot hobija servomotorus, bija ļoti naiva, un to pierāda grūtības, kas man radās, lai tas darbotos. Es uzskatu par brīnumu, ka roka darbojas tikpat labi. Es joprojām gribu izveidot robotu roku, kas varētu saskarties ar datoru, palaist sarežģītākas programmas un pārvietoties ar lielāku precizitāti, tāpēc nākamajā projektā es to darīšu. Es izmantošu augstas kvalitātes digitālos robotikas servus, un, cerams, tas ļaus man izvairīties no daudzām problēmām, ar kurām saskāros šajā projektā.

CAD dokuments:

cad.onshape.com/documents/818ea878dda7ca2f…

Ieteicams: