Përmbajtje:

Krah Robotik: Jensen: 4 Hapa
Krah Robotik: Jensen: 4 Hapa

Video: Krah Robotik: Jensen: 4 Hapa

Video: Krah Robotik: Jensen: 4 Hapa
Video: Лесли Морган Штайнер: Почему жертвы домашнего насилия не уходят от своих мучителей 2024, Nëntor
Anonim
Krahu robotik: Jensen
Krahu robotik: Jensen

Jensen është një krah robotik i ndërtuar në platformën Arduino me një fokus në planifikimin intuitiv të lëvizjes, i bërë si një projekt i pavarur me 1 kredi nën mentorim nga Charles B. Malloch, PhD. Mund të përsërisë një sërë lëvizjesh të programuara duke lëvizur dorën me dorë. Mora frymëzimin për ta ndërtuar duke parë krahë të tjerë robotikë të ndërtuar në hapësirën krijuese UMass Amherst M5. Për më tepër, doja të mësoja se si të përdorja softuerin CAD dhe doja të bëja një projekt të avancuar Arduino. E pashë këtë si një mundësi për të bërë të gjitha ato gjëra.

Hapi 1: Dizajni origjinal dhe fushëveprimi

Dizajni origjinal dhe fushëveprimi
Dizajni origjinal dhe fushëveprimi

Softueri CAD që zgjodha të mësoja për këtë projekt ishte OnShape, dhe gjëja e parë që modelova ishte një servo analoge HiTec HS-422. Zgjodha servo sepse ishte në dispozicion për mua në vend dhe ishte një çmim i arsyeshëm. Ajo gjithashtu shërbeu si praktikë e mirë për të mësuar OnShape para se të kaloja në hartimin e pjesëve të mia. Në këtë pikë të hershme të projektit, kisha një ide të përgjithshme për atë që doja që krahu të ishte i aftë. Doja që ajo të kishte një gamë të mirë lëvizjeje dhe një kapëse për marrjen e gjërave. Këto specifikime të përgjithshme informuan modelin ndërsa unë vazhdoja modelimin e tij në CAD. Një kufizim tjetër i projektimit që kisha në këtë pikë ishte madhësia e shtratit të printimit në printerin tim 3D. Kjo është arsyeja pse baza që shihni në foton e mësipërme është një shesh relativisht primitiv.

Gjatë kësaj faze të projektit, unë gjithashtu isha në stuhi mendimesh se si doja të kontrolloja krahun. Një krah robotik nga i cili isha frymëzuar në hapësirën krijuese përdori një krah kukullash për kontroll. Një tjetër përdori një metodë intuitive të programimit të rrugës në të cilën krahu u zhvendos në pozicione të ndryshme nga përdoruesi. Krahu pastaj do të kthehej përsëri në ato pozicione.

Plani im fillestar ishte të përfundoja ndërtimin e krahut dhe pastaj të zbatoja të dyja këto metoda kontrolli. Unë gjithashtu doja të bëja një aplikacion kompjuterik për ta kontrolluar atë në një moment pas kësaj. Siç mund ta kuptoni, përfundova duke zvogëluar fushën e këtij aspekti të projektit. Kur fillova të punoja në ato dy metodat e para të kontrollit, shpejt zbulova se programimi i rrugës intuitive ishte më i komplikuar nga sa mendoja se do të ishte. Atëherë vendosa ta bëj fokusin tim dhe të vendos metodat e tjera të kontrollit në pritje të pacaktuar.

Hapi 2: Kontrolli

Kontroll
Kontroll

Metoda e kontrollit që zgjodha funksionon kështu: ju lëvizni krahun me duart tuaja në pozicione të ndryshme dhe "ruani" ato pozicione. Çdo pozicion ka informacion në lidhje me këndin midis secilës lidhje të krahut. Pasi të keni mbaruar ruajtjen e pozicioneve, ju godisni një buton të riprodhimit dhe krahu kthehet në secilën prej atyre pozicioneve në rend.

Në këtë metodë kontrolli, kishte shumë gjëra për të kuptuar. Në mënyrë që çdo servo të kthehet në një kënd të ruajtur, më duhej t'i "ruaja" disi ato kënde në radhë të parë. Kjo kërkoi që Arduino Uno që po përdorja të ishte në gjendje të merrte këndin aktual të secilit servo. Miku im Jeremy Paradie, i cili krijoi një krah robotik që përdor këtë metodë kontrolli, më çoi në përdorimin e potenciometrit të brendshëm të secilit servo hobi. Ky është potenciometri që servo përdor vetë për të koduar këndin e tij. Zgjodha një servo provë, ngjita një tel në kunjin e mesëm të potenciometrit të brendshëm dhe shpova një vrimë në rrethim për të ushqyer tela jashtë.

Tani mund të marr këndin aktual duke lexuar tensionin në kunjin e mesëm të potenciometrit. Megjithatë, kishte dy probleme të reja. Së pari, kishte zhurmë në formën e pikave të tensionit në sinjalin që vinte nga kunja e mesme. Ky problem u bë një çështje e vërtetë më vonë. Së dyti, diapazoni i vlerave për dërgimin e një këndi dhe marrjen e një këndi ishin të ndryshme.

Thënia e motorëve serbo hobi që të lëvizin në një kënd midis 0 dhe 180 gradë përfshin dërgimin e tij një sinjal PWM me një kohë të lartë që korrespondon me këndin. Përkundrazi, përdorimi i një kunje hyrëse analoge të Arduino për të lexuar tensionin në kunjin e mesëm të potenciometrit gjatë lëvizjes së bririt të servo midis 0 dhe 180 gradë kthen një gamë të veçantë vlerash. Prandaj, disa matematikë ishin të nevojshme për të përkthyer një vlerë hyrëse të ruajtur në vlerën përkatëse të daljes PWM të nevojshme për të kthyer servo në të njëjtin kënd.

Mendimi im i parë ishte të përdorja një hartë të thjeshtë varg për të gjetur PWM dalëse përkatëse për çdo kënd të ruajtur. Kjo funksionoi, por nuk ishte shumë e saktë. Në rastin e projektit tim, diapazoni i vlerave të kohës së lartë të PWM që korrespondojnë me një gamë këndi prej 180 gradë ishte shumë më i madh se diapazoni i vlerave analoge të hyrjes. Për më tepër, të dyja këto vargje nuk ishin të vazhdueshme dhe të përbëra vetëm nga numra të plotë. Prandaj, kur hartova një vlerë hyrëse të ruajtur në një vlerë dalëse, saktësia humbi. Në atë moment kuptova se kisha nevojë për një lak kontrolli për t'i çuar shërbimet e mia atje ku duhej të ishin.

Shkrova kodin për një lak kontrolli PID në të cilin hyrja ishte tensioni i mesëm i pinit dhe dalja ishte dalja PWM, por shpejt zbulova se më duhej vetëm kontroll integral. Në këtë skenar, dalja dhe hyrja përfaqësonin të dyja këndet, kështu që shtimi i kontrollit proporcional dhe derivativ tentonte ta bënte atë të tejkalonte ose të kishte sjellje të padëshirueshme. Pas akordimit të kontrollit integral, kishte ende dy probleme. Së pari, nëse gabimi fillestar midis këndit aktual dhe atij të dëshiruar ishte i madh, servo do të përshpejtohej shumë shpejt. Unë mund të zvogëloj konstanten për kontrollin integral, por kjo e bëri lëvizjen e përgjithshme shumë të ngadaltë. Së dyti, mocioni ishte nervoz. Ky ishte rezultat i zhurmës në sinjalin hyrës analog. Laku i kontrollit po lexonte vazhdimisht këtë sinjal, kështu që rritjet e tensionit shkaktuan lëvizje të trazuar. (Në këtë pikë unë gjithashtu kalova nga një servo testi im në asamblenë e paraqitur më lart. Unë gjithashtu bëra një objekt loop kontrolli për secilin servo në softuer.)

Unë e zgjidha problemin e nxitimit tepër të shpejtë duke vendosur një filtër të mesatares lëvizëse të ponderuar në mënyrë eksponenciale (EWMA) në dalje. Me mesataren e prodhimit, goditjet e mëdha në lëvizje u zvogëluan (përfshirë nervozizmin nga zhurma). Sidoqoftë, zhurma në sinjalin hyrës ishte ende një problem, kështu që faza tjetër e projektit tim po përpiqej ta zgjidhë atë.

Hapi 3: Zhurma

Zhurmë
Zhurmë

Foto sipër

Me të kuqe: sinjali fillestar i hyrjes

Me blu: sinjali hyrës pas përpunimit

Hapi i parë në zvogëlimin e zhurmës në sinjalin hyrës ishte kuptimi i shkakut të tij. Vëzhgimi i sinjalit në një oshiloskop zbuloi se rritjet e tensionit po ndodhnin në një normë prej 50Hz. Unë rastësisht e dija se sinjali PWM që po dërgohej në servos ishte gjithashtu në një normë prej 50Hz, kështu që unë mendova se rritjet e tensionit kishin të bënin me këtë. Unë hipotezova se lëvizja e servos po shkaktonte disi rritje të tensionit në kunjën V+ të potenciometrave, e cila nga ana tjetër po prishte leximin në kunjin e mesëm.

Këtu kam bërë përpjekjen time të parë për të zvogëluar zhurmën. Hapa përsëri çdo servo dhe shtova një tel që vinte nga kunja V+ në potenciometër. Më duheshin më shumë hyrje analoge për t'i lexuar ato sesa kishte Arduino Uno, kështu që unë gjithashtu u transferova në një Arduino Mega në këtë pikë. Në kodin tim, unë ndryshova hyrjen e këndit nga një lexim analog i tensionit në kunjin e mesëm në një raport midis tensionit në kunjin e mesëm me tensionin në kunjin V+. Shpresa ime ishte që nëse do të kishte një rritje të tensionit në kunjat, do të anulohej në raport.

Vendosa gjithçka përsëri dhe e testova, por goditjet ende po ndodhnin. Ajo që duhet të kisha bërë në këtë pikë ishte studimi i bazës sime. Në vend të kësaj, ideja ime tjetër ishte vendosja e potenciometrave në një furnizim të veçantë të energjisë plotësisht. I shkëputa telat V+ nga hyrjet analoge në Arduino dhe i lidha me një furnizim të veçantë të energjisë. Unë i kisha hetuar kunjat më parë, kështu që e dija se në çfarë tensioni do t'i fuqizoja ato. Gjithashtu shkëputa lidhjen midis bordit të kontrollit dhe pinit V+ në secilën servo. Unë vendos gjithçka përsëri, e ktheva kodin e hyrjes së këndit në atë që ishte më parë, dhe pastaj e testova. Siç pritej, nuk kishte më rritje të tensionit në kunjin e hyrjes. Sidoqoftë, kishte një problem të ri - vendosja e potenciometrave në një furnizim me energji të veçantë kishte prishur plotësisht sythe të kontrollit të brendshëm të servos. Edhe pse kunjat V+ po merrnin të njëjtin tension si më parë, lëvizja e servos ishte e çrregullt dhe e paqëndrueshme.

Unë nuk e kuptoja pse po ndodhte kjo, kështu që më në fund hetova lidhjen time tokësore në servos. Kishte një rënie mesatare të tensionit prej rreth 0.3 Volt në tokë, dhe u rrit edhe më shumë kur servosët tërhoqën rrymë. Ishte e qartë për mua atëherë se ato kunja nuk mund të konsideroheshin më "të bluar" dhe mund të përshkruheshin më mirë si kunja "referencë". Bordet e kontrollit në servos duhet të kenë qenë duke matur tensionin në kunjin e mesëm të potenciometrit në raport me tensionin në kunjat V+ dhe referencën. Fuqizimi i potenciometrave e prishi veçmas atë matje relative sepse tani në vend që një rritje e tensionit të ndodhë në të gjitha kunjat, kjo ndodhi vetëm në kunjën e referencës.

Mentori im, Dr. Malloch, më ndihmoi të korrigjoja të gjitha këto dhe më sugjeroi të matja tensionin në kunjin e mesëm në krahasim me kunjat e tjera. Kjo është ajo që bëra për përpjekjen time të tretë dhe të fundit për të zvogëluar zhurmën e hyrjes së këndit. Hapa çdo servo, bashkova përsëri tela që kisha prerë dhe shtova një tel të tretë që vinte nga kunja e referencës në potenciometër. Në kodin tim, bëra hyrjen e këndit ekuivalente me shprehjen e mëposhtme: (kunja e mesme - kunja e referencës) / (V+kunja - kunja e referencës). E testova dhe ai zvogëloi me sukses efektet e rritjeve të tensionit. Përveç kësaj, unë gjithashtu vendos një filtër EWMA në këtë hyrje. Ky sinjal i përpunuar dhe sinjali origjinal janë paraqitur më sipër.

Hapi 4: Përfundimi i Gjërave

Përfundimi i Gjërave
Përfundimi i Gjërave

Me problemin e zhurmës të zgjidhur në maksimumin e aftësive të mia, fillova të rregulloj dhe të bëj pjesët përfundimtare të dizajnit. Krahu po i jepte shumë peshë servo -s në bazë, kështu që bëra një bazë të re që mban peshën e krahut duke përdorur një mbajtëse të madhe. Unë gjithashtu printova kapësen dhe bëra pak lëmues në të për ta bërë atë të funksionojë.

Jam shumë i kënaqur me rezultatin përfundimtar. Planifikimi intuitiv i lëvizjes funksionon vazhdimisht dhe lëvizja është e qetë dhe e saktë, duke marrë parasysh gjithçka. Nëse dikush tjetër dëshiron të bëjë këtë projekt, unë së pari do t'i inkurajoja ata që të bënin një version më të thjeshtë të tij. Në të kaluarën, bërja e diçkaje të tillë duke përdorur servo motorë hobi ishte shumë naive, dhe vështirësia që kisha për ta punuar atë shkon për ta treguar këtë. Unë e konsideroj një mrekulli që krahu punon aq mirë sa funksionon. Unë ende dua të bëj një krah robotik që mund të lidhet me një kompjuter, të ekzekutojë programe më komplekse dhe të lëvizë me saktësi më të madhe, kështu që për projektin tim të ardhshëm do ta bëj këtë. Unë do të përdor shërbime robotike dixhitale me cilësi të lartë, dhe shpresoj se kjo do të më lejojë të shmang shumë nga problemet që kam hasur në këtë projekt.

Dokumenti CAD:

cad.onshape.com/documents/818ea878dda7ca2f…

Recommended: