Sisällysluettelo:

Robottivarsi: Jensen: 4 vaihetta
Robottivarsi: Jensen: 4 vaihetta

Video: Robottivarsi: Jensen: 4 vaihetta

Video: Robottivarsi: Jensen: 4 vaihetta
Video: Prank interview with Elijah Wood 2024, Lokakuu
Anonim
Robottivarsi: Jensen
Robottivarsi: Jensen

Jensen on Arduino -alustalle rakennettu robotti, joka keskittyy intuitiiviseen liikesuunnitteluun. Se voi toistaa sarjan liikkeitä, jotka on ohjelmoitu käsin liikuttamalla käsivartta. Sain inspiraation rakentaa sen näkemällä muita robotti -aseita, jotka on rakennettu UMass Amherst M5 -tapahtumaan. Lisäksi halusin oppia käyttämään CAD -ohjelmistoa ja halusin tehdä edistyneen Arduino -projektin. Pidin tätä mahdollisuutena tehdä kaikki nämä asiat.

Vaihe 1: Alkuperäinen suunnittelu ja laajuus

Alkuperäinen muotoilu ja laajuus
Alkuperäinen muotoilu ja laajuus

CAD-ohjelmisto, jonka valitsin opiskelemaan tähän projektiin, oli OnShape, ja ensimmäinen mallinnamani asia oli HiTec HS-422-analoginen servo. Valitsin servon, koska se oli saatavilla paikallisesti ja se oli kohtuullinen hinta. Se toimi myös hyvänä käytännönä oppia OnShape ennen kuin aloitin omien osien suunnittelun. Tässä projektin alkuvaiheessa minulla oli yleinen käsitys siitä, mihin halusin käsivarren pystyvän. Halusin, että sillä olisi kunnollinen liikealue ja tarttuja esineiden keräämiseen. Nämä yleiset eritelmät kertoivat suunnittelusta, kun jatkoin mallintamista sen CAD -muodossa. Eräs toinen suunnittelurajoitus, joka minulla oli tässä vaiheessa, oli 3D -tulostimen tulostusalustan koko. Siksi pohja, jonka näet yllä olevassa kuvassa, on suhteellisen primitiivinen neliö.

Hankkeen tässä vaiheessa mietin myös, miten halusin hallita käsivartta. Yksi robotti käsivarsi, josta olin saanut inspiraatiota tuotantotilassa, käytti nuken käsivartta ohjaukseen. Toinen käytti intuitiivista polun ohjelmointimenetelmää, jossa käyttäjä siirsi käsivarren eri asentoihin. Käsi kiertäisi sitten takaisin näiden asentojen läpi.

Alkuperäinen suunnitelmani oli saada käsivarren rakentaminen päätökseen ja toteuttaa sitten molemmat nämä ohjausmenetelmät. Halusin myös tehdä tietokoneohjelman sen hallitsemiseksi jossain vaiheessa sen jälkeen. Kuten luultavasti voitte kertoa, päädyin vähentämään tämän hankkeen osan laajuutta. Kun aloin työskennellä näiden kahden ensimmäisen ohjausmenetelmän parissa, huomasin nopeasti, että intuitiivinen polun ohjelmointi oli monimutkaisempi kuin luulin sen olevan. Silloin päätin keskittyä siihen ja laittaa muut valvontamenetelmät määräämättömäksi.

Vaihe 2: Ohjaus

Ohjaus
Ohjaus

Valitsemani ohjausmenetelmä toimii näin: siirrät käsivartesi käsilläsi eri asentoihin ja "tallennat" nuo asennot. Jokaisessa asennossa on tietoa käsivarren jokaisen nivelen välisestä kulmasta. Kun olet tallentanut paikat, painat toistopainiketta ja käsivarsi palaa jokaiseen näistä paikoista peräkkäin.

Tässä valvontamenetelmässä oli paljon selvitettävää. Jotta jokainen servo palaisi tallennettuun kulmaan, minun piti jotenkin "tallentaa" nämä kulmat. Tämä vaati käyttämääni Arduino Unoa voidakseen vastaanottaa kunkin servon nykyisen kulman. Ystäväni Jeremy Paradie, joka loi robottivarren, joka käyttää tätä ohjausmenetelmää, vihjasi minut käyttämään jokaisen harraste -servon sisäistä potentiometriä. Tämä on potentiometri, jota servo käyttää itse kulmansa koodaamiseen. Valitsin testiservon, juotin langan sisäisen potentiometrin keskitappiin ja porasin koteloon reiän langan syöttämiseksi ulkopuolelle.

Voisin nyt vastaanottaa nykyisen kulman lukemalla jännitteen potentiometrin keskitapista. Kuitenkin oli kaksi uutta ongelmaa. Ensinnäkin keskitapista tulevasta signaalista kuului kohinaa jännitepiikkien muodossa. Tästä ongelmasta tuli todellinen ongelma myöhemmin. Toiseksi, kulman lähettämisen ja kulman vastaanottamisen arvoalueet olivat erilaisia.

Kun kerrot harraste servomoottoreille siirtymään johonkin kulmaan välillä 0 ja 180 astetta, siihen lähetetään PWM -signaali kulmaa vastaavan pitkän ajan. Päinvastoin, käyttämällä Arduinon analogista tulotappia potentiometrin keskimmäisen nastan jännitteen lukemiseen samalla kun servosarvea siirretään 0 ja 180 asteen välillä, palautuu erillinen arvoalue. Siksi tarvittiin jonkin verran matematiikkaa tallennetun tuloarvon kääntämiseksi vastaavaksi PWM -lähtöarvoksi, jota tarvitaan servon palauttamiseksi samaan kulmaan.

Ensimmäinen ajatukseni oli käyttää yksinkertaista aluekarttaa löytääkseen vastaavan PWM -tulostuksen jokaiselle tallennetulle kulmalle. Tämä toimi, mutta se ei ollut kovin tarkka. Projektini tapauksessa PWM -korkean aika -arvon alue, joka vastaa 180 asteen kulma -aluetta, oli paljon suurempi kuin analogisten tulojen arvojen alue. Lisäksi molemmat alueet eivät olleet jatkuvia ja koostuivat vain kokonaisluvuista. Siksi kun kartoitin tallennetun tuloarvon tulostusarvoon, tarkkuus menetettiin. Tässä vaiheessa ajattelin, että tarvitsen ohjaussilmukan, jotta saan servot paikalleen.

Kirjoitin koodin PID -ohjaussilmukalle, jossa tulo oli keskimmäinen nastajännite ja lähtö oli PWM -lähtö, mutta huomasin nopeasti, että tarvitsin vain integroitua ohjausta. Tässä skenaariossa sekä lähtö että tulo edustivat kulmia, joten suhteellisen ja johdannaissäädön lisääminen sai sen yleensä ylittämään tai käyttämään ei -toivottua toimintaa. Sisäisen ohjauksen virittämisen jälkeen oli edelleen kaksi ongelmaa. Ensinnäkin, jos alkuperäinen virhe nykyisen ja halutun kulman välillä oli suuri, servo kiihtyy liian nopeasti. Voisin vähentää kiinteän ohjauksen vakion, mutta se teki yleisestä liikkeestä liian hitaan. Toiseksi liike oli hermostunut. Tämä johtui analogisen tulosignaalin kohinasta. Ohjaussilmukka luki jatkuvasti tätä signaalia, joten jännitepiikit aiheuttivat tärinää. (Tässä vaiheessa siirryin myös yhdestä testiservostani yllä olevaan kokoonpanoon. Tein myös ohjaussilmukkaobjektin jokaiselle ohjelmiston servolle.)

Ratkaisin liian nopean kiihtyvyyden ongelman asettamalla ulostuloon eksponentiaalisesti painotetun liukuvan keskiarvon (EWMA) suodattimen. Keskimääräisellä tuotoksella vähennettiin suuria liikepiikkejä (mukaan lukien melun aiheuttama tärinä). Tulosignaalin melu oli kuitenkin edelleen ongelma, joten projektin seuraava vaihe yritti ratkaista sen.

Vaihe 3: Melu

Melu
Melu

Kuvassa yllä

Punaisena: alkuperäinen tulosignaali

Sinisenä: tulosignaali käsittelyn jälkeen

Ensimmäinen askel tulosignaalin melun vähentämisessä oli sen syyn ymmärtäminen. Signaalin mittaaminen oskilloskoopilla paljasti, että jännitepiikit tapahtuivat 50 Hz: n taajuudella. Satuin tietämään, että servoille lähetettävä PWM -signaali oli myös 50 Hz: n taajuudella, joten arvasin, että jännitepiikeillä oli jotain tekemistä sen kanssa. Oletin, että servojen liike aiheutti jotenkin jännitepiikkejä potentiometrien V+ -tapissa, mikä puolestaan sekoitti keskitapin lukeman.

Tässä tein ensimmäisen yritykseni vähentää melua. Avasin jokaisen servon uudelleen ja lisäsin langan, joka tuli potentiometrin V+ -nasta. Tarvitsin enemmän analogisia tuloja niiden lukemiseen kuin Arduino Unolla, joten siirryin myös Arduino Megaan. Koodissani muutin kulmatulon analogisesta keskitapin jännitteen lukemasta keskitapin jännitteen ja V+ -tapin jännitteen suhteeseen. Toivoin, että jos nastoissa olisi jännitepiikki, se kumoaisi suhteen.

Laitoin kaiken takaisin ja testasin sitä, mutta piikkejä tapahtui edelleen. Minun olisi pitänyt tehdä tässä vaiheessa maaperäni. Sen sijaan seuraava ajatukseni oli sijoittaa potentiometrit kokonaan erilliseen virtalähteeseen. Irrotin V+ -johdot Arduinon analogisista tuloista ja liitin ne erilliseen virtalähteeseen. Olin tutkinut nastat ennen, joten tiesin, millä jännitteellä ne saavat virtaa. Katkaisin myös liitännän ohjauskortin ja V+ -tapin välillä jokaisessa servossa. Laitoin kaiken takaisin yhteen, palautin kulman syöttökoodin entiseen tapaan ja testasin sen sitten. Kuten odotettiin, tulotapissa ei ollut enää jännitepiikkejä. Kuitenkin oli uusi ongelma - potentiometrien asettaminen erilliseen virtalähteeseen oli täysin sekoittanut servojen sisäiset ohjaussilmukat. Vaikka V+ -tapit saivat saman jännitteen kuin ennen, servojen liike oli epävakaa ja epävakaa.

En ymmärtänyt, miksi näin tapahtui, joten tutkin vihdoin maadoitusyhteyteni servoissa. Keskimääräinen jännitehäviö oli noin 0,3 volttia maan yli, ja se nousi vielä korkeammalle, kun servot vetivät virtaa. Minulle oli silloin selvää, että näitä tappeja ei enää voitu pitää "maadoitettuina" ja että niitä voitaisiin paremmin kuvata "vertailunapeiksi". Servojen ohjaustaulujen on täytynyt mitata potentiometrin keskitapin jännite suhteessa sekä jännitteeseen V+ että referenssitappeihin. Potentiometrien virran kytkeminen erikseen sekoitti tämän suhteellisen mittauksen, koska nyt sen sijaan, että jännitepiikki tapahtuisi kaikissa nastoissa, se tapahtui vain vertailutapissa.

Mentorini, tohtori Malloch, auttoi minua korjaamaan tämän kaiken ja ehdotti, että mittaisin myös keskitapin jännitteen suhteessa muihin nastoihin. Näin tein kolmannen ja viimeisen yritykseni vähentää kulmatulon kohinaa. Avasin jokaisen servon, kiinnitin katkaistun langan uudelleen ja lisäsin kolmannen johdon, joka tuli potentiometrin vertailutapista. Koodissani tein kulmatulon vastaavan seuraavaa lauseketta: (keskimmäinen nasta - vertailutappi) / (V+nasta - vertailutappi). Testasin sen ja se onnistui vähentämään jännitepiikkien vaikutuksia. Lisäksi laitoin tähän tuloon myös EWMA -suodattimen. Tämä käsitelty signaali ja alkuperäinen signaali on esitetty yllä.

Vaihe 4: Asioiden kääriminen

Asioiden kääriminen
Asioiden kääriminen

Kun meluongelma on ratkaistu parhaani mukaan, ryhdyin korjaamaan ja tekemään suunnittelun viimeiset osat. Varsi painoi liikaa painoa pohjan servolle, joten tein uuden pohjan, joka tukee käsivarren painoa suurella laakerilla. Tulostin myös tarttujan ja hiotin sitä hiukan, jotta se toimisi.

Olen erittäin tyytyväinen lopputulokseen. Intuitiivinen liikesuunnittelu toimii johdonmukaisesti ja liike on sujuvaa ja tarkkaa ottaen huomioon kaiken. Jos joku muu haluaa tehdä tämän projektin, suosittelen ensin voimakkaasti tekemään siitä yksinkertaisemman version. Jälkeenpäin ajateltuna tällaisen tekeminen harrastus -servomoottoreiden avulla oli hyvin naiivia, ja sen vaikeus saada se toimimaan osoittaa sen. Pidän ihmeenä, että käsivarsi toimii yhtä hyvin kuin se. Haluan silti tehdä robottivarren, joka pystyy yhdistämään tietokoneen, ajaa monimutkaisempia ohjelmia ja liikkua tarkemmin, joten seuraavassa projektissani teen sen. Käytän korkealaatuisia digitaalisia robotiikka -servoja, ja toivottavasti voin välttää monia ongelmia, joita kohtasin tässä projektissa.

CAD -asiakirja:

cad.onshape.com/documents/818ea878dda7ca2f…

Suositeltava: