Jyrsinkara robokäteen

Toimiakseen CNC-jyrsimenä, robokäsi tarvitsee jyrsinkaran eli terää pyörittävän moottorin kouraansa. Tässä on mielenkiintoinen tasapainottelu monen tekijän välillä:

  • Liian painava kara ylikuormittaisi robottikäden. Maksimipaino on 3 kg, mutta jo se luultavasti heikentää tarkkuutta painovoiman vääntäessä rakenteita.
  • Heikkotehoinen moottori pakottaa jyrsimään hyvin ohuissa kerroksissa, moninkertaistaen jyrsintöihin kuluvan ajan. Tehoa olisi hyvä olla vähintään muutama sata wattia.
  • Fyysisesti liian iso moottori rajoittaa pääsyä ahtaisiin rakoihin.
  • Liian pieni kierrosluku estää käyttämästä pieniä teriä. Esimerkiksi piirilevyjen jyrsintään 0.3mm terillä olisi hyvä saada kierroksia vähintään 20kRPM.
  • Liian pieni vääntömomentti estää käyttämästä isoja teriä, joilla saa nopeammin isoja upotuksia leikattua. Esimerkiksi 3mm terälle alumiinissa riittää 0.02 Nm, mutta 6mm terällä optimi olisi jo 0.3 Nm.
  • Ilmajäähdytteiset moottorit ovat äänekkäitä ja ylikuumenevat herkästi.
  • Liian pienet laakerit eivät siedä jyrsinnässä tulevia kuormia, vaan kuluvat ennenaikaisesti ja vaativat usein vaihtamista.

Onneksi nykyään on saatavilla laaja valikoima harjattomia DC-moottoreita eli BLDC-moottoreita. Ne ovat teknisesti kolmivaihemoottoreita, joissa käämit pysyvät paikallaan ja joko käämien sisällä tai ympärillä pyörii kestomagneetti. Edistyneemmillä ohjausmenetelmillä kuten FOC saavutetaan hyvä vääntö laajalla kierroslukualueella, eli moottorin nopeutta voi pudottaa ohjelmallisesti ilman että vääntö pienenee. Tämä on usein tarpeen muoveja jyrsittäessä, ne kun tuppaavat sulamaan liian isolla kierrosnopeudella.

BLDC-moottoreita ajetaan nopeudensäätimellä eli ESC:llä. ESC:ssä on yleensä kuusi fettiä, joilla se pätkii eri käämeihin meneviä jännitteitä sopivan magneettikentän saavuttamiseksi. Samalla se toimii hakkurimuuntimena jännitteelle, eli esimerkiksi 48V/10A syötöstä saadaan moottorille vaikkapa 12V/40A. Suoraan 40A syötön kuljettamiseen tarvittaisiin paksut johdot virtalähteeltä asti, mutta ESC:n kanssa paksut johtimet tarvitaan vain muutaman sentin matkalle piirilevyltä moottorille.

Olen jo muutaman vuoden ajan käyttänyt omissa sähköpyörävirityksissä avoimen lähdekoodin VESC-nopeussäädintä, jossa on FOC-ohjaus. Se jaksaa ajaa satojen wattien tehoa, ja enimmillään 50 ampeerin jatkuvaa virtaa. eBaysta löytyy hieman jatkokehitettyjä FS-ESC malleja, jotka käyttävät samaa softaa. VESC:iä voi ohjata suoraan sarjaporttikomennoilla, ja vaikuttaisi että ROS:lle löytyy pari valmistakin kommunikointitoteutusta.

BLDC-moottorien spekseissä olennaisimmat parametrit ovat KV-luku ja käämien resistanssi. KV-luku tarkoittaa RPM/volt -suhdetta, eli esimerkiksi KV=1580 moottori pyörisi 10 voltin jännitteellä 15 800 kierrosta minuutissa. Tämä on maksiminopeus, nopeussäädin voi pyörittää moottoria hitaamminkin. Käämien resistanssi puolestaan määrää paljonko hukkalämpöä milläkin virralla syntyy. Esimerkiksi 0.08 ohmin käämeissä 40 ampeerin virralla syntyy 32 W lämpöä. Maksimivirta määräytyy hukkatehon ja jäähdytyskapasiteetin mukaan. Spekseissä olevat maksimivirrat vaihtelevat villisti, koska esim. RC-autossa jäähdytys on paljon vähäisempi kuin lentävässä tuulettimessa.

Moottorien spekseissä ei yleensä kerrota juuri mitään vääntömomentista. Sen voi kuitenkin johtaa KV-luvusta, ja tuloksena on T = 8 * I / KV, missä T on vääntö Newton-metreissä ja I on virta ampeereissa. Esimerkkimoottorilla 40 ampeerin virralla saataisiin siis 0.20 Nm vääntö.

Jyrsinnässä on kaksi kriittistä parametria: kierrosluku ja syöttönopeus, eli englanniksi speed ja feed. Nämä määräävät kuinka paksun siivun materiaalia terän reuna aina kerrallaan vuolee, ja kuinka nopeasti tämä reuna liikkuu. Optimaaliset arvot riippuvat materiaalista, ja niitä voi laskea esim. FSWizard-laskurilla. Erinomaista on, mikäli CNC-jyrsin toimii hyvin laajalla nopeusalueella jotta joka tilanteessa löytyy hyvä vaihtoehto. Käytännössä mekaniikan jäykkyys ja karamoottorin teho rajoittavat tätä, ja vaativat kompromisseja myös leikkuusyvyyden kanssa. Robokädessä on hyvin mahdollisuuksia isoihinkin syöttönopeuksiin, mutta jäykkyys ei ole niin hyvä kuin jyrsimeksi suunnitellussa laitteessa.

Isoissa jyrsinkoneissa karan laakerointi on hyvinkin massiivinen, koska leikkuuvoimat kasvavat niin isoiksi. Kun meidän robokätemme ei jaksa yli 30 Newtonin voimia muutenkaan, riittävät karalle aika pienetkin laakerit. Helpointa on hyödyntää suoraan moottorin laakereita. Ne ovat varsin hyvät sivusuuntaisille voimille, mutta akselin suuntaiset ”porausvoimat” lisäävät kulumista. Jyrsinterätkään eivät kuitenkaan leikkaa poraussuunnassa kovin hyvin, joten suurin osa työstöstä tehdään sivusuunnassa jos mahdollista.

Moottorin akselin laakeroinnin lisäksi on tärkeää, että jyrsinterä on tarkasti keskellä ja tukevasti kiinni akselin päässä. Usein tähän käytetään ER-sarjan monitahoisia istukoita, jotka hoitavatkin homman erinomaisesti. Harmillisesti sarjan pieninkin ER11-istukka on halkaisijaltaan 20 mm, mikä on aika massiivinen 3 mm jyrsinterään verrattuna ja tulee jyrsiessä ajoittain tielle. eBaysta saa myös Dremel-tyylisiä kolmileukaisia istukoita, jotka muistuttavat minikokoista porakoneen istukkaa. Päätin että tämä on kokeilemisen arvoinen, vaikka epäilyttääkin mahtaako se pitää terää riittävän hyvin.

Ei ole selvää mihin asentoon moottori kannattaa asentaa robottikäteen. Intuitio sanoisi, ettei sitä kannata laittaa osoittamaan suoraan eteenpäin kiinnityslevystä, koska tällöin rannemoottorin pyörityksellä ei olisi mitään merkitystä. Toisaalta jos moottori osoittaisi 90 asteen kulmassa sivulle, tulisi ranteen mekaniikka varsin lähelle jyrsittävää kappaletta ja voisi olla tiellä. Päädyin siihen että paras lienee laittaa se jotenkin vinoon.

Alustavaksi mekaniikaksi jyrsin omalla CNC3020-jyrsimelläni alumiinista palikan, jossa moottori on 15 asteen kulmassa. Tämä oli isoin kulma johon sain sen soviteltua niin, että palikan robokäteen kiinnittävät neljä kuusiokoloruuvia nurkissa ovat vielä avattavissa ilman koko homman purkamista.

Tarkoitus on laittaa vesijäähdytysputki kulkemaan alumiinipalikan läpi parista reiästä, jolloin se samalla jäähdyttää myös palikan kylkeen pultattavan nopeussäätimen. Myös moottorin yläosan ympäri voisi kiertää muutaman kierroksen ohutta kupariputkea. Tuohon sitten eBay-special istukka kiinni ja eikun kokeilemaan.

Tässä on niin paljon arvailujen varassa, että päätin lähteä liikkeelle halvemman pään moottorilla ja muilla osilla. Sitten kun näistä on kokemusta kertynyt ja tietää ongelmakohdat, voi päivittää tarpeelliset osat jykevämpiin.

Yhteisömiitti ti 8.10. klo 18

Hacklabin jäsenten kokous, tuttavallisemmin yhteisömiitti, pidetään seuraavan kerran ensi tiistaina, 8.10. klo 18 alkaen kerhotilassamme (Emännäntie 10). Miitti on tarkoitettu ihan kaikille jäsenille ja jäsenyydestä kiinnostuneille. Teemana on tulevat tapahtumat ja kurssit:

Hacklabin radioamatööriaseman asemalupa

  • Instanssi 27.2.-1.3.2020
    • Järjestäjiä tarvitaan!
    • Hacklab Jyväskylä ry:n ja Linkki Jyväskylä ry:n yhteistyö
  • Talvi-HSF:n järjestäminen
    • HSF on valtakunnallinen Hacklab-kokoontumisviikonloppu kevättalvella (edellisen tapahtuman sivut)
    • Halutaanko järjestää Jyväskylässä?
    • Instanssin yhteydessä vai erikseen?
  • Muita tapahtumia
    • Lanit?
  • Kurssien järjestäminen Hacklabin tiloissa
    • Mitkä aiheet voisi kiinnostaa?
    • Onko kiinnostuneita järjestäjiä?
    • Puitteiden parantaminen kurssinpitoa varten
  • Radioasema OH6DDR
    • Hacklab on saanut radioluvan!
    • Kerhoaseman valvoja kahvikello esittelee asemalaitteiston.
    • Kannattaisiko Hacklab Jyväskylän liittyä Suomen radioamatööriliittoon? Alustava keskustelu, ei päätöksentekoa.
  • Vapaata keskustelua

Ensi tiistain yhteisömiitin lisäksi tänä vuonna on vielä kolmas yhteisömiitti ti 12.11.2019, jonka aiheena on tilan käyttösääntöjen päivittäminen.

Tulkaa paikalle! PS. Jääkaapissa ja pakastimessa on kaikkea hyvää Ludum Daren jäljiltä!

ROS-integraatio robokädelle

Robokädestä ei ole paljonkaan hyötyä, ellei sitä voi ohjata järkevästi. Robotin omat RAPL-3 kieli sekä robcomm3-ohjaussovellus tuntuvat ehkä hieman.. vanhahtavilta. Eikä niille oikein ole suoraan tukea missään nykyaikaisessa sovelluksessa, joskin kaupallinen robodk luultavasti melko pienellä vaivalla tuottaisi myös RAPL-3-ohjauskoodia.


Kuvassa robcomm3.

Sen sijaan päädyin avoimen lähdekoodin Robot Operating Systemiin. Siinä on jo valmiiksi laaja tuki robokäsien ohjaukselle ja liikepolkujen suunnittelulle. Koska labin CRS F3 on mekaanisesti sama kuin Kuka Roboticsin alkuperäinen KR3-malli, löytyi suoraan Kukan sivuilta 3D-malli robokädestä. Tätä piti vähän pyöritellä FreeCADilla ja Blenderillä jotta sen sai sopivaan muotoon ROS:lle. Lisäksi piti tehdä URDF-muotoinen speksi siitä mitkä ovat tarkat etäisyydet ja kääntökulmat eri akseleille. Nämä muutokset on pistetty pull-requestina ros-industrial projektille, joten ehkä niistä on aikanaan hyötyä myös muille tätä robottia käyttäville.

Omalla koneella 3D-malli toimikin jo mainiosti, mutta robokäden koneella robotti oli pahaenteisesti räjähtänyt jo simulaatiossa:

Pienen googlettelun jälkeen selvisi että kyse on ROS:n bugista, jossa URDF-tiedostoa luetaan vahingossa käyttäjän LC_NUMERIC-localella. Robokäden Ubuntu oli oletuksena laittanut täksi fi_FI.UTF-8, vaikka kieli muuten onkin englanti. No, tuohan on täysin käyttökelvoton locale muutenkin kun joka paikkaan tulee pilkkuja desimaalipisteiden sijaan, ja tuo pilkkuvirhe rikkoi myös URDF:n luvun ja räjäytti 3D-mallin. Locale kuntoon ja jo näytti paremmalta.

Robotin ja ROS:n välille tarvitaan kaksisuuntainen kommunikaatio: ROS antaa liikekäskyjä robotille (joint trajectory action), ja robotti lähettää jatkuvasti sen hetkistä tilaansa (robot state reporting) takaisin ROS:lle. Turvallisempi ja helpompi on lähteä ensin toteuttamaan tuota robot state reporting -puolta, koska tällöin käsi ei ainakaan lähde lapasesta.

Aluksi lähdin toteuttamaan tätä rosserial-protokollan pohjalta, jolla voi lähetellä suoraan sarjaportin yli ROS:n rosmsg-viestiformaatissa olevaa dataa. Tämä tuli toteutettua RAPL-3:lla ja koodia kertyi n. 400 riviä. No, jotain pientä ongelmaa siinä oli mutta suunnilleen toimi.

Sitten satuin kuitenkin huomaamaan, että ROS:ssa on myös erityisesti robottikäsille tarkoitettu simple_message-protokolla. Nimensä mukaisesti se on huomattavasti simppelimpi toteuttaa, ja vie vähemmän tiedonsiirtokapasiteettiakin sarjaportista. Sen toteutus kävikin parilla sadalla rivillä.

Nyt ROS näkee robotin tilan ja liikkeet:

Jotain pientä ongelmaa kuitenkin vielä on. Sarjaporttiliikenteessä robokädeltä PC:lle päin tippuu joskus tavuja pois välistä. Tämä siitä huolimatta, että periaatteessa käytössä on RTS/CTS kättely. Ja yllättävää myös siltä kannalta, ettei PC:llä pitäisi olla mitään ongelmia käsitellä 11 kilotavua dataa sekunnissa, lähetti robokäsi sitä kuinka nopeasti tahansa.

Testailun myötä vaikuttaisi että nollamodeemikaapeli on kytketty oikein ja rts/cts menevät päästä päähän ja ristiin. Sen sijaan robokäsi jättää ne tyytyväisenä huomioimatta, sarjaporttiin pystyy kirjoittamaan vaikka CTS:n laittaisi 9 voltin paristolla jatkuvasti blokkaavaan tilaan.

Ilmeisesti robokäden CROS-käyttiksessä ei jollain tavalla toimi blokkaavat kirjoitukset sarjaporttiin. Sama ongelma on avasi portin O_NONBLOCK tilassa tai synkronisena. Noh, pahimmassa tapauksessa täytyy vain tehdä jokin purkka että koodissa mdelay():lla odotellaan sopivasti että puskuri ei täyty liikaa.

Game Jam Hacklabilla 4.-6.10.

Hacklab Jyväskylä järjestää paikallisen tapahtuman 45. Ludum Dare Game Jamille!

Seuraava informaatio on saatavilla vain englanniksi.

Ludum Dare #45 Jyväskylä site is arranged on Fri 4th – Sun 6th of October 2019 as a part of Ludum Dare #45 Game Jam. Join LD45 Jyväskylä by registering to this event. Spaces are limited.

The actual Game Jam is held from 01:00 Sat 5th (Finnish Timezone) and lasts 48h (Compo) or 72h (Jam) depending on which you’re taking part in. The local event is open from 3h before the beginning of the Jam (Fri 22:00), for 45h (Sun 22:00), which means that you still have time to finish the production at home after the venue has been closed.

The Hacklab Jyväskylä club space acts as the venue and offers free breakfast (and other snacks!), some fridge space, essentials (table, chair, electricity wifi, toilet, showers, microwave oven, electric kettle), …
and possibly 24 ACCESS TO SPACE (please do not get mad at us if we can’t make this happen, it depends on volunteers)

There is also a chance of Sauna!

There are 2 pizza restaurants right next to the venue and 2 stores nearby (of which one is 24/7 open!) to handle your nourishment needs.

Arrival guide: https://jyvaskyla.hacklab.fi/en/the-space/

PLEASE NOTICE THAT there is no parking space for the whole event period.

Latest information, schedule and registration can be found at Eventbrite below:

https://www.eventbrite.co.uk/e/jyvaskyla-ludum-dare-45-game-jam-tickets-73875755373

Robokoppi rakenteilla

Kesätouhujen jälkeen on taas aikaa keskittyä robokäden kanssa puuhailuun. Nyt on rakenteilla suojakoppi roboa varten. Tarkoitus on saada tästä tehtyä 5-akselinen CNC-jyrsin.

Kopin pöytä on vanerilevyä, jossa on 5cm välein M6:n ruuvikierteet kappaleiden kiinnittämistä varten. Mahdollisesti jos pöydän alle laittaa imurin niin levyt pysyisivät myös vakuumilla paikallaan, jolloin kiinnityspuoli on erityisen helppo.

Seiniin ja kattoon on käytetty sermeistä otettua akustiikkalevyä, joka toivottavasti vaimentaa jyrsintämelua. Oven 2mm polykarbonaatti pysäyttää mahdollisesti lentelevät puu- ja metallikappaleet. Oven alareunassa on rako, johon tulee irroitettava pleksinkappale. Tällä tavalla voi esim. pitkän laudan päätä jyrsiä ilman että ovi täytyy jättää kokonaan auki.

Ohjauspuoli on tarkoitus tehdä ROS MoveIt -alustan päälle. ROS:sta löytyy jo valmiina paljon toiminnallisuutta robokäsille, mukaanlukien esteiden välttely. Mahdollisesti Kinect:n kanssa voi tehdä niin että robotti automaattisesti tunnistaisi esim. kiinnityspalikat ja muut esteet ja välttäisi törmäykset.

Paljon on vielä puuhaa jäljelläkin, ainakin:

  • Loppujen seinien levyttäminen
  • Maalaaminen
  • Fyysiset napit ja vääntimet tärkeimmille toiminnoille
  • Jyrsimen karamoottorin kiinnitys ja johtovedot
  • Robotin omalle purkille RAPL3:lla kirjoitettava palikka, joka lukee ROS:n lähettämiä viestejä ja välittää ne robotille.
  • ROS:iin C++:lla tehtävä palikka jolla saa ajettua G-koodia.

Jos projektiin osallistuminen kiinnostaa niin kyselkää lisää!

Ja kiitokset myös kaikille jotka ovat lahjoittaneet/haalineet tarpeellisia osia tähän projektiin. Ensinnäkin Etteplanille robokäden lahjoittamisesta. Eetu toi räkkipalvelimen ohjauskoneeksi, ja sermitkin ovat aiemmin Eetun kautta tulleita. Hacklab maksoi puutavaran ja erinäiset tilpehöörit ovat hacklabin varastoista. Miikalta tuli näytönohjain, ja Mikolta/hacklabilta on Kinect.