INHOUDSOPGAWE:

Robotarm: Jensen: 4 stappe
Robotarm: Jensen: 4 stappe

Video: Robotarm: Jensen: 4 stappe

Video: Robotarm: Jensen: 4 stappe
Video: Humanoid - Jansen Walking Mechanism 🚶‍♀ 2024, November
Anonim
Robotarm: Jensen
Robotarm: Jensen

Jensen is 'n robotarm wat op die Arduino -platform gebou is, met die fokus op intuïtiewe bewegingsbeplanning, gedoen as 'n 1 -krediet -onafhanklike projek onder mentorskap van Charles B. Malloch, PhD. Dit kan 'n reeks bewegings herhaal wat geprogrammeer is deur die arm handmatig te beweeg. Ek het die inspirasie gekry om dit te bou deur ander robotarms te sien bou in die UMass Amherst M5 makerspace. Verder wou ek leer hoe om CAD -sagteware te gebruik, en ek wou 'n gevorderde Arduino -projek maak. Ek het dit as 'n geleentheid beskou om al die dinge te doen.

Stap 1: Oorspronklike ontwerp en omvang

Oorspronklike ontwerp en omvang
Oorspronklike ontwerp en omvang

Die CAD-sagteware wat ek gekies het om vir hierdie projek te leer, was OnShape, en die eerste ding wat ek gemodelleer het, was 'n HiTec HS-422 analoge servo. Ek het die servo gekies omdat dit plaaslik vir my beskikbaar was en dit teen 'n redelike prys was. Dit was ook 'n goeie praktyk om OnShape aan te leer voordat ek aan die ontwerp was van my eie onderdele. Op hierdie vroeë stadium van die projek het ek 'n algemene idee gehad van wat ek wil hê die arm moet in staat wees. Ek wou hê dat dit 'n behoorlike bewegingsbereik en 'n grijper het om dinge op te tel. Hierdie algemene spesifikasies het die ontwerp ingelig toe ek voortgegaan het om dit in CAD te modelleer. 'N Ander ontwerpbeperking wat ek op hierdie stadium gehad het, was die grootte van die drukbed op my 3D -drukker. Daarom is die basis wat u op die foto hierbo sien, 'n relatief primitiewe vierkant.

Gedurende hierdie fase van die projek het ek ook 'n dinkskrum gekry oor hoe ek die arm wil beheer. Een robotarm waarmee ek in die makersruimte geïnspireer was, het 'n marionetarm gebruik om te beheer. 'N Ander gebruik 'n intuïtiewe padprogrammeringsmetode waarin die arm deur die gebruiker in verskillende posisies beweeg is. Die arm sal dan deur die posisies terugbeweeg.

My oorspronklike plan was om die bou van die arm te voltooi en dan albei hierdie beheermetodes te implementeer. Ek wou ook op 'n stadium 'n rekenaarprogram maak om dit te beheer. Soos u waarskynlik kan sien, het ek uiteindelik die omvang van hierdie aspek van die projek verminder. Toe ek aan die eerste twee beheermetodes begin werk, het ek vinnig agtergekom dat die intuïtiewe padprogrammering meer ingewikkeld is as wat ek gedink het dit sou wees. Dit is toe dat ek besluit het om dit my fokus te stel en die ander beheermetodes op onbepaalde tyd te plaas.

Stap 2: Beheer

Beheer
Beheer

Die metode van beheer wat ek gekies het, werk soos volg: jy beweeg die arm met jou hande in verskillende posisies en "stoor" daardie posisies. Elke posisie bevat inligting oor die hoek tussen elke skakel van die arm. Nadat u die posisies gestoor het, druk u op die afspeelknoppie en die arm keer in volgorde terug na elkeen van die posisies.

In hierdie beheermetode was daar baie dinge om uit te vind. Om elke servo in 'n geredde hoek terug te keer, moes ek die hoeke op die een of ander manier 'red'. Dit vereis dat die Arduino Uno I gebruik word om die huidige hoek van elke servo te kan ontvang. My vriend Jeremy Paradie, wat 'n robotarm gemaak het wat hierdie beheermetode gebruik, het my ingelig om die interne potensiometer van elke stokperdjie -servo te gebruik. Dit is die potensiometer wat die servo self gebruik om sy hoek te kodeer. Ek het 'n toets servo gekies, 'n draad aan die middelste pen van die interne potensiometer gesoldeer en 'n gat in die omhulsel geboor om die draad buite te voer.

Ek kon nou die huidige hoek ontvang deur die spanning op die middelste pen van die potensiometer te lees. Daar was egter twee nuwe probleme. Eerstens was daar geraas in die vorm van spanningspieke op die sein wat van die middelste pen kom. Hierdie probleem het later 'n werklike probleem geword. Tweedens was die reeks waardes vir die stuur van 'n hoek en die ontvangs van 'n hoek anders.

Om vir die stokperdjie -servomotore te sê om tussen 0 en 180 grade in 'n hoek te beweeg, behels die stuur van 'n PWM -sein met 'n hoë tyd wat ooreenstem met die hoek. Met 'n analoog ingangspen van die Arduino, om die spanning op die middelste pen van die potensiometer te lees, word 'n aparte reeks waardes teruggekeer. Daarom was 'n mate van wiskunde nodig om 'n gestoorde invoerwaarde te vertaal in die ooreenstemmende PWM -uitvoerwaarde wat nodig is om die servo in dieselfde hoek terug te keer.

My eerste gedagte was om 'n eenvoudige afstandskaart te gebruik om die ooreenstemmende PWM -uitset vir elke gestoorde hoek te vind. Dit het gewerk, maar dit was nie baie presies nie. In die geval van my projek, was die omvang van PWM -hoë tydwaardes wat ooreenstem met 'n hoekafstand van 180 grade, baie groter as die reeks analoog insetwaardes. Boonop was beide hierdie reekse nie deurlopend nie en bestaan dit slegs uit heelgetalle. Daarom het ek presisie verloor toe ek 'n gestoorde insetwaarde na 'n uitsetwaarde gekarteer het. Op hierdie stadium het ek gedink ek het 'n stuurlus nodig om my servo's te kry waar hulle moet wees.

Ek het kode geskryf vir 'n PID -kontrolelus waarin die ingang die middelste penspanning was en die uitset die PWM -uitset was, maar het vinnig agtergekom dat ek slegs integrale beheer nodig het. In hierdie scenario verteenwoordig die uitset en die invoer beide hoeke, sodat die toevoeging van proporsionele en afgeleide beheer die neiging het om dit te oorskry of ongewenste gedrag te hê. Na die afstelling van die integrale beheer was daar nog twee probleme. Eerstens, as die aanvanklike fout tussen die huidige en gewenste hoek groot was, sou die servo te vinnig versnel. Ek kon die konstante vir die integrale beheer verminder, maar dit het die algehele beweging te stadig gemaak. Tweedens was die mosie onrustig. Dit was die gevolg van die geraas op die analoog ingangsein. Die bedieningslus lees hierdie sein voortdurend, sodat die spanningspieke jitterige beweging veroorsaak. (Op hierdie stadium het ek ook oorgegaan van my een test servo na die samestelling hierbo. Ek het ook 'n kontrolelus -voorwerp gemaak vir elke servo in die sagteware.)

Ek het die probleem van te vinnige versnelling opgelos deur 'n eksponensieel geweegde bewegende gemiddelde (EWMA) filter op die uitset te plaas. Deur die gemiddelde opbrengs te bereken, is die groot bewegingspieke verminder (die geraas ingesluit). Die geraas op die insetsein was egter steeds 'n probleem, en die volgende fase van my projek het dit probeer oplos.

Stap 3: Geraas

Geraas
Geraas

Op die foto bo

In rooi: oorspronklike insetsein

In blou: invoersein na verwerking

Die eerste stap om die geraas op die insetsein te verminder, was om die oorsaak daarvan te verstaan. Deur die sein op 'n ossilloskoop te ondersoek, blyk dit dat die spanningspieke teen 'n snelheid van 50Hz plaasvind. Ek het toevallig geweet dat die PWM -sein wat na die servo's gestuur word, ook 'n snelheid van 50Hz het, so ek het vermoed dat die spanningspieke iets daarmee te doen het. Ek het veronderstel dat die beweging van die servo's op een of ander manier spanningstygings op die V+ -pen van die potensiometers veroorsaak, wat op sy beurt die lesing op die middelste pen in die wiele gery het.

Hier het ek my eerste poging aangewend om die geraas te verminder. Ek maak elke servo weer oop en voeg 'n draad by wat uit die V+ -pen op die potensiometer kom. Ek het meer analoog insette nodig gehad om dit te lees as wat die Arduino Uno gehad het, so ek het op hierdie stadium ook oorgegaan na 'n Arduino Mega. In my kode het ek die hoekinvoer verander van 'n analoog lesing van die spanning op die middelste pen tot 'n verhouding tussen die spanning op die middelste pen tot die spanning op die V+ -pen. My hoop was dat as daar 'n spanningsverhoging op die penne was, dit in die verhouding sou kanselleer.

Ek het alles weer bymekaargemaak en dit getoets, maar die spykers het steeds gebeur. Wat ek op hierdie stadium moes gedoen het, was om my grond te ondersoek. My volgende idee was in plaas daarvan om die potensiometers heeltemal op 'n aparte kragtoevoer te plaas. Ek het die V+ -drade van die analoog -ingange op die Arduino ontkoppel en aan 'n aparte kragtoevoer gekoppel. Ek het die penne al voorheen ondersoek, en ek het geweet op watter spanning ek hulle moet dryf. Ek het ook die verbinding tussen die bedieningsbord en die V+ -pen in elke servo verbreek. Ek het alles weer bymekaargemaak, die invoerkode van die hoek verander na hoe dit voorheen was en dit toe getoets. Soos verwag, was daar nie meer spanningspieke op die ingangspen nie. Daar was egter 'n nuwe probleem: om die potensiometers op 'n aparte kragtoevoer te plaas, het die interne beheerlusse van die servo's heeltemal deurmekaar geraak. Alhoewel die V+ -penne dieselfde spanning as voorheen ontvang het, was die beweging van die servo's wisselvallig en onstabiel.

Ek het nie verstaan waarom dit gebeur nie, so ek het uiteindelik my grondverbinding in die servo's ondersoek. Daar was 'n gemiddelde spanningsval van ongeveer 0.3 Volt oor die grond, en dit het selfs hoër gestyg toe die servo's stroom trek. Dit was toe vir my duidelik dat hierdie penne nie meer as 'gemaal' beskou kan word nie, en beter as 'verwysings' penne beskryf kan word. Die bedieningsborde in die servo's moes die spanning op die middelste pen van die potensiometer gemeet het, sowel as die spanning op die V+ as die verwysingspenne. Deur die potensiometers afsonderlik aan te dryf, het die relatiewe meting 'n afwyking gemaak, want dit het net op die verwysingspen plaasgevind in plaas van 'n spanningspiek op al die penne.

My mentor, dr Malloch, het my gehelp om dit alles te ontfout en het voorgestel dat ek ook die spanning op die middelste pen meet ten opsigte van die ander penne. Dit is wat ek gedoen het vir my derde en laaste poging om die geraas van die hoekinvoer te verminder. Ek het elke servo oopgemaak, die draad wat ek afgesny het weer vasgemaak en 'n derde draad bygevoeg wat uit die verwysingspen op die potensiometer kom. In my kode het ek die hoekinvoer gelykstaande aan die volgende uitdrukking gemaak: (middelste pen - verwysingspen) / (V+pen - verwysingspen). Ek het dit getoets en dit het die gevolge van die spanningspieke suksesvol verminder. Boonop sit ek ook 'n EWMA -filter op hierdie invoer. Hierdie verwerkte sein en die oorspronklike sein word hierbo afgebeeld.

Stap 4: Pak dinge in

Sluit dinge aan
Sluit dinge aan

Terwyl die geraasprobleem na die beste van my vermoë opgelos is, het ek die laaste dele van die ontwerp gaan regmaak en maak. Die arm het te veel gewig op die servo in die basis, so ek het 'n nuwe basis gemaak wat die gewig van die arm ondersteun met 'n groot laer. Ek het ook die gryper gedruk en 'n bietjie geskuur om dit te laat werk.

Ek is baie tevrede met die finale uitslag. Die intuïtiewe bewegingsbeplanning werk konsekwent en die beweging is glad en akkuraat, met inagneming van alles. As iemand anders hierdie projek wil maak, wil ek hulle eers sterk aanmoedig om 'n eenvoudiger weergawe daarvan te maak. Agterna was dit baie naïef om so iets te maak met stokperdjieservomotors, en die moeilikheid waarmee ek dit kon laat werk, toon dit. Ek beskou dit as 'n wonderwerk dat die arm net so goed werk. Ek wil nog steeds 'n robotarm maak wat met 'n rekenaar verbind kan word, meer ingewikkelde programme kan uitvoer en met groter presisie kan beweeg, so vir my volgende projek sal ek dit doen. Ek sal digitale robotika -servo's van hoë gehalte gebruik, en dit sal my hopelik baie van die probleme wat ek in hierdie projek ondervind het, kan vermy.

CAD -dokument:

cad.onshape.com/documents/818ea878dda7ca2f…

Aanbeveel: