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.

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.

Hacklab Jyväskylä mukana yliopiston avajaismessuilla

Hacklab kävi tänään esittelemässä toimintaansa Jyväskylän yliopiston avajaismessuilla.

Mukana standilla oli jo perinteeksi muodostunut Elovalo-ledikuutio, Eskon 3D-tulostettu näppäimistö sekä kirjoittajan itsensä puukulhoja ja pyörän akku.

Kiinnostuneita oli ja muutama tulikin jo samana iltana avoimiin oviin katsomaan tiloja.

Illalla kerhoilta jatkui radioamatöörikilpailuun, josta kenties myöhemmin blogia.

Kerhoilta 16.7.: Tetris-palikoita

Tänään Hacklabilla mm. jyrsittiin tekstejä Tetriksen Suomenmestaruuskisojen palkintoihin:

Tekstit syntyivät varsin näppärästi CNC:llä V-kärkisellä terällä. Yhtään palikkaa ei onnistuttu tyrimään, mutta aikaa paloi kun eri palkintosarjoja oli varsin monta.

Muuta työn alla ollutta oli mm. kuksa, jonka työstö alkoi käsivoimin taltalla ja vasaralla:

Talon katolla puolestaan tehtiin antenniasennuksia.

Kerhoilta 6.4.2019: Työkaluseiniä

Tänään puuhasin puutyötilaan uusia työkaluseiniä. Olemassaolevat metallireikälevyt ovat sikäli näppäriä, mutta sopivia kiinnittimiä kaikelle on vaikea löytää. Lisäksi tasaiseen levyyn saa näppärästi piirrettyä työkalujen ääriviivat.

Samalla on tarkoitus järjestellä työkalut selkeämmin. Alla on hahmotelma ryhmittelystä:

Ja tänään valmistui tämän verran:

Tekstit on jyrsitty labin omatekoisella CNC-jyrsimellä, ja ne on tarkoitus vielä maalata mustaksi. Materiaali on lahjoituksena saatua pakkausvaneria, joka on paikoitellen aika heikossa kunnossa mutta kelpaa vielä tähän käyttöön.

Puristimien pidikkeeseen tein sirkkelillä hahlot, joihin puristimet solahtavat kivasti. Mutta Bilteman pikapuristimet eivät näköjään sopineet suoraan tuohon. Täytynee askarrella niille oma pidike viereen.

Toisaalla kerhoillassa mm. 3D-tulostettiin yagiantennin pidikkeitä, konffattiin 3D-tulostinta ja pelattiin flipperiä.