AS-0.3200 Automaatio- ja systeemitekniikan projektityöt Loppuraportti Toni Okuogume, 78982W, EST, toni.okuogume@aalto.fi Lammi Lauri, 69488F, AUT, lauri.lammi@aalto.fi 17. joulukuuta 2012 Opintopisteet 4 op Projektityön nimi Robottialustan instrumentointi ja käyttöönotto Aloituspäivä 11. syyskuuta 2012 Lopetuspäivä 31. joulukuuta 2012 Ohjaaja Matthieu Myrsky
Sisältö 1 Projektin kuvaus 1 2 Robot Operating System (ROS) 1 3 Simulaattori 3 4 Graafinen käyttöliittymä 4 4.1 Lasertutka............................. 4 4.2 Teleoperointi........................... 6 5 Ajanhallinta 6 6 Yhteenveto 8 A Liite: LaserScan-viestirakenne 9
1 Projektin kuvaus Alun perin projekti oli tarkoitus toteuttaa 2-3 hengen ryhmässä. Pian projektin alun jälkeen tosin selvisi, että projektissa käytetty Pioneer-robottialusta oli myös kurssin AS-84.3144 Kenttä- ja palvelurobotiikka käytössä ja että osa projektiin ilmoittautuneista henkilöistä oli myös kyseisellä kurssilla mukana. Lopputuloksena projektin osallistujamäärä paisui kahdeksaan henkilöön. Osallistujat jaettiin kahteen ryhmään, joista suurempi kuuden hengen ryhmä koostui niistä henkilöistä, jotka olivat myös kenttä- ja palvelurobotiikan kurssilla mukana. Suuremman ryhmän tehtävä vastasi alkuperäistä tehtävänantoa, kun taas pienemmälle ryhmälle annettiin tehtäväksi tutustua ROS-pohjaiseen ohjelmointiin ja toteuttaa Pioneer-robotille esimerkkiohjelma, joka demonstroi ROSin käyttöä mahdollisimman monipuolisesti. Tässä raportissa esitellään Pioneerin ohjelmoinnista vastanneen ryhmän projektityö. Työssä luotiin ROSia käyttävä graafinen käyttöliittymä, joka piirtää Pioneeriin asennettujen antureiden mittausdataa ja jolla voi teleoperoida robottia. Käyttöliittymän on tarkoitus olla modulaarinen siten, että se toimii eri ROS-alustoilla riippumatta siitä, mitä antureita niihin on asennettu. Työhön kuului myös ohjelmiston kattava dokumentointi ja käyttöohjeen laatiminen. Ohjelmistoa on tarkoitus käyttää esimerkkinä tulevien vuosien kenttä- ja palvelurobotiikan kurssilla. Projektityössä käytettiin Pioneer P3-DX -robottialustaa. Edeltämainittu toinen projektityöryhmä asensi siihen tietokoneen, 270 SICKin laseretäisyysskannerin sekä Microsoft Kinectiä vastaavan Asus Xtion PRO LIVE -liiketunnistimen, jossa on myös stereokameraa vastaavaa toiminnallisuutta. Näiden lisäksi robottialustassa on valmiiksi kahdeksan eteenpäin suunnattua ultraäänianturia sekä odometriadatan keräykseen tarvittavat enkooderit. Työssä käytetty robotti on esitetty kuvassa 1. 2 Robot Operating System (ROS) ROS on robottiohjelmistojen kehitykseen tarkoitettu avoimen lähdekoodin metakäyttöjärjestelmä. Se tarjoaa työkaluja ja kirjastoja matalan tason laitteistonhallintaan, prosessienhallintaan, monen tietokoneen ylitse toimivien ohjelmistojen pyörittämiseen yms. Käytännössä ROS-ohjelma koostuu rinnakkaisista, keskenään kommunikoivista prosesseista, joita ROSissa kutsutaan noodeiksi. Täysimittainen ROS-ohjelmisto koostuu monesta eri noodista, jotka yhdessä muodostavat vertaisverkon prosesseja. ROS-ohjelmiston pienimpiä komponentteja, kuten yksittäisiä ohjelmia, kirjastoja yms. kutsutaan paketeiksi 1
Kuva 1: Projektityössä käytetty Pioneer P3-DX -robotti (package). Ohjelmistojen jakamisen helpottamiseksi kaikki tietyn ohjelmiston tarvitsemat paketit voi ROSissa koota pinoiksi (stack). Noodien välinen kommunikointi tapahtuu julkaisemalla dataa yleisille, kaikkien noodien nähtävissä oleville kanaville (topic). ROSissa on lukuisia valmiita viestimuotoja, joissa dataa voi julkaista. Noodin käynnistyksen yhteydessä ROS-mestarinoodille ilmoitetaan, mille noodeille käynnistettävä noodi julkaisee minkä muotoisia viestejä ja vastaavasti mitä kanavia se kuuntelee. Kanavien julkisuuden vuoksi tiettyä kanavaa voi kuunnella mielivaltainen määrä noodeja. Vastaavasti tietty noodi voi julkaista viestejä mielivaltaiselle määrälle kanavia. Julkaistut viestit voivat sisältää esimerkiksi anturilta saatua mittausdataa tai ohjauskäskyjä. Monesta moneen -tyyppiselle kanava- ja noodirakenteelle on myös vaihtoehtoinen kommunikaatiorakenne, jota RO- Sissa kutsutaan palveluiksi (service). Tässä rakenteessa viestien julkaiseminen ja niiden kuuntelu korvataan tietyn noodin tekemillä palvelupyynnöillä, johon jokin tietty noodi vastaa. Esimerkki viestin rakenteesta on liitteessä A, jossa on esitetty LaserScan-viestin rakenne. Tämän projektityön tapauksessa noodit jakautuvat robotilla ja etäkoneella ajettaviin. Robotin puolella on kerralla käynnissä sen sisäänrakennettujen laitteiden käyttöön tarkoitettu valmis RosAria-noodi, joka julkaisee mm. ultraääni- ja odometriadataa ja jota käytetään robotin ohjaamiseen. Sen lisäksi on käynnissä noodit laserskannerille ja liikkeentunnistimelle. Turvatoime- 2
na törmäyksien ja vaaratilanteiden ehkäisemiseksi robotin puolella on myös käynnissä erillinen turvanoodi. Etäkoneella on käynnissä käyttöliittymän ja teleoperoinnin tarvitsemat noodit, jotka kuuntelevat langattoman verkkoyhteyden välityksellä Pioneerin noodien julkaisemaa dataa ja lähettävät sille ohjauskomentoja. Jos robottia halutaan simuloida, täytyy myös käynnistää Stage-simulaattorille oma noodi. Käytännössä se julkaisee virtuaalirobotin mittaus- ja odometriadataa tietyille kanaville. Simulaattorissa pyörivän esimerkkiohjelmiston noodiverkosto on esitetty kuvassa 2. Kuvassa soikiot ovat noodeja, joiden välisten nuolten suunta kertoo kumpi noodi julkaisee ja kumpi kuuntelee viestejä. Nuolet on nimetty viestien kanavien nimillä. Kuva 2: Esimerkkiohjelmiston noodigraafi 3 Simulaattori Koska projektityön alkuvaiheissa oikeaa robottia ei ollut vielä käytettävissä, tarvittiin ohjelmiston kehitystä auttamaan jokin ROS-yhteensopiva simulaattori. Käytännössä tähän oli kaksi vaihtoehtoa, Gazebo ja Stage. Gazebo on erittäin monipuolinen 3D-simulaattori, joka mm. pystyy mallintamaan robottien yksittäisiä liikkuvia osia ja robottien fyysistä interaktiota ympäristöjen kanssa. Gazebo kuitenkin osoittautui raskaaksi ajettavaksi, eikä Pioneerin tapauksessa suurimmasta osasta sen ominaisuuksia ollut mitään hyötyä. Näin ollen projektia varten valittiin Stage-simulaattori. Stage on yksinkertainen mutta tehokas 2D-simulaattori, joka on alunperin tarkoitettu robottiparvien simulointiin. Simulaattorissa on helppo määritellä uusia robotteja tai karttoja. Stage osoittautui kevyeksi ja helppokäyttöiseksi, joten sitä voi suositella myös tulevia kenttä- ja palvelurobotiikan kursseja varten. Stagessa robotit mallinnetaan yksinkertaisina liikkuvina objekteina, joiden mahdolliset liikkuvat osat jätetään huomioimatta. Roboteilla ei ole 3
muita fyysisiä ominaisuuksia kuin niiden dimensiot ja mahdollisesti esimerkiksi huippunopeus, jos sellainen on niille määritelty. Robotteja voi kuitenkin olla monta, ja niitä on erittäin helppo määritellä Stagen omalla syntaksilla lisää. Simulaattori on nopea jopa heikkotehoisemmalla tietokoneella ja usealla robotilla. Roboteilla voi olla Stagen normaalissa käytössä mielivaltainen määrä etäisyysantureita, mutta ROSissa määrä on rajoitettu yhteen per robotti. Uusien karttojen määrittäminen on niinkin helppoa kuin uuden kuvatiedoston luominen halutun ympäristön pohjakaaviosta. Kuvassa 3 esitetään Stage-simulaatiossa otettu kuvankaappaus Pioneerista. Kuva 3: Stage-simulaattori 4 Graafinen käyttöliittymä Projektityötä varten tehty esimerkkiohjelma on Qt-pohjainen graafinen teleoperointikäyttöliittymä. Se lukee Pioneerin lähettämää anturidataa ja piirtää sitä käyttäen tutkakuvan robotin ympäristöstä. Se myös mahdollistaa robotin etäohjauksen mm. näppäimistökomennoilla langattoman verkon ylitse. 4.1 Lasertutka Laserskanneri-ohjelman tarkoitus on auttaa tulevia Kenttä- ja palvelurobotiikan kurssin opiskelijoita ohjaamaan Pioneer-robottia. Se näyttää robotilta saadut laserscanneri ja ultraäänidata ja kertoo sen lisäksi robotin sen hetkisen nopeuden. Käyttöliittymä on rakennettu käyttäen Qt:tä. Tämä valittiin, 4
koska Qt:tä käytetään monissa ROSin mukana tulevissa ohjelmissa ja uuden projektin aloittaminen on mutkatonta, kun käyttää qt ros -pakettia apuna. Tämä paketti tekee valmiin pohjan jota voi sitten muokata omiin tarkoituksiin. Kuva 4: Lasertutkan käyttöliittymä Kuva 4 näyttää tehtyn lasertutkan käyttöliittymän. Kuva on otettu simulaattorissa, joten lasermittauksissa ei ole kohinaa. Vasemmanpuoleisessa ikkunassa näkyy keskellä robotti ja sen ympärillä valkoisena pisteenä kaikki estepisteet mitkä laserscanneri näkee. Vihreä ympyrä näyttää laserskannerin maksimilukuetäisyyden sekä minimi- ja maksimikulmat. Kaikki nämä tiedot saadaan ROS lähettämästä LaserScan-viestistä, jonka ohjelma olettaa tulevan kanavalle /tilt scan. LaserScan-viestin rakenne on liitteessä A. Oikeanpuoleisista valintaruuduista voi valita haluuko vasemmanpuoleiseen näyttöön laserskannerin antamat tiedot ja/tai ultraäänianturin antamat tiedot. Ultraäänianturin tiedot merkitään ruutuun sinisellä. Ultraäänisensorin tiedot odotetaan tulevan topicille /sonar. Pieni ruutu oikealla puolella on tarkoitettu robotin Kinect-tyyppisen anturin videokuvaa varten. Heti ensimmäisen viestin tullessa laserskannerilta, Asuksen kameralta tai ultraääniajurilta lasertutka merkitsee sen oikeaan yläkulmaan tekstillä. Se myös poistaa nimen oikean yläkulman listalta, jos minuuttiin ei ole tullut yhtään viestiä kyseisestä osasysteemistä. Näin on tehty, koska ROSssa ei voi suoraan ohjelman sisältä saada selville onko kanavalle julkaiseva noodi päällä vai ei. 5
4.2 Teleoperointi Teleoperointi koostuu ohjelmistossa käytännössä kolmesta eri komponentista. Graafinen käyttöliittymä ohjaa kaikki näppäimistökomennot teleoperointikäyttöliittymälle, joka tunnistaa esimerkiksi nuolinäppäinten painallukset ja muuttaa ne ohjauskomennoiksi. Komennot välitetään sopivassa muodossa etäkoneella käynnissä olevalle teleoperointinoodille, joka julkaisee ne Pioneerin ohjauskomentoja varten tarkoitetulle kanavalle. Lopuksi Pioneerin puolellla käynnissä oleva turvanoodi tarkistaa, ettei ohjauskäsky esimerkiksi aja robottia päin seinää. Jos vaaratilannetta ei ole, ohjauskäsky julkaistaan robottia ohjaavan RosArian ohjauskanavalle. Teleoperointi siis koostuu kahdesta eri tietokoneilla toimivista noodista, sekä Qt-luokasta joka lukee näppäimistökomentoja. Tavallisen näppäimistöohjauksen lisäksi teleoperointikäyttöliittymässä on myös toteutettu esimerkkinä robotin ohjauksesta autonominen seinänseurantamoodi. Moodin voi kytkeä päälle ja pois oikeaa näppäintä painamalla. Seinänseurantamoodissa robotti ajaa lähimmän seinän suuntaisesti. Seinänseuranta on toteutettu kulmahistogrammilla. Kulmahistogrammi lasketaan ottamalla joka N:s laserskannauksen datapiste, ja muodostamalla niiden välille suuntavektori. Vektorin suunta suhteessa robottiin sijoitetaan sopivaan histogrammin lokeroon. Jos histogrammin laskentaetäisyyden sisällä on seinä, suurin osa näistä vektoreista on samansuuntaisia. Näin histogrammiin muodostuu piikki siihen kulma-arvoon, jonka suuntaan seinä kulkee. Kääntämällä robotti tähän suuntaan se saadaan seuraamaan seinää. Oikealla robotilla tehdyissä kokeissa havaittiin nopeasti, että ohjattaessa robottia verkon ylitse voi esiintyä varsin suuriakin verkkoviivepiikkejä. Piikkien aikana robotille ei voida lähettää ohjauskomentoja. Pahimmassa tapauksessa jokin vanha komento jää päälle, jolloin robotti voi ajaa päin seinää tai aiheuttaa jonkin muun vaaratilanteen. Viivepiikkien vaikutuksen minimoimiseksi ja robotin omaksi turvaksi robotille luotiin erillinen turvanoodi, joka on käynnissä robotin itsensä sisällä etäkoneen sijaan. Turvanoodi pysäyttää robotin, jos se yritetään ohjata liian lähelle seinää. Lisäksi jos uusia ohjauskomentoja ei vastaanoteta tiettyyn aikaan, turvanoodi pysäyttää robotin. 5 Ajanhallinta Alkuperäisessä projektisuunnitelmassa tehtiin virhearvioita projektin eri osaalueisiin kuluvista aikamääristä. Esimerkiksi oikeaa robottia pääsi käyttämään myöhemmin kuin alun perin oletettiin. Lisäksi varsinaisen robotin kanssa 6
työskennellessä ilmeni joitain ongelmakohtia, joihin ei osattu varautua etukäteen. Alkuperäinen aikataulusuunnitelma on esitetty taulukossa 1. ROSiin tutustuminen Laitteistoon tutustuminen ROS-simulaattori Esimerkkiohjelmien rakenne Esimerkkiohjelmien kirjoittaminen Robotin testaus Dokumentointi 0.5 vko 0.5 vko 3.5 vko 2.5 vko Taulukko 1: Alkuperäinen aikataulusuunnitelma Alkuperäisessä aikataulusuunnitelmassa oletettiin, että projektissa työskennellään vain yhden osa-alueen kanssa kerrallaan. Käytännössä näin ei kuitenkaan ollut, vaan useampaa osa-aluetta, esimerkiksi ROSiin ja laitteistoon tutustumista sekä simulaattoria, käsiteltiin rinnakkain yhtä aikaa. Varsinkin esimerkkiohjelmien kirjoittamiseen ja debuggaamiseen oikealla robotilla kului enemmän aikaa kuin oli alun perin suunniteltu. Lisäksi joulua lähestyttäessä ainoa valmiiksi rakennettu Pioneer-alusta oli yhä useammin kenttä- ja palvelurobotiikan kurssin käytössä, joka omalta osaltaan hidasti projektityön edistymistä. Loppuraportin palautushetkellä projektissa on vielä jonkin verran viimeistelyä jäljellä. Työtä olisi lähinnä tarkoitus debugata lisää. Projektityön toteutunut aikataulu on esitetty taulukossa 2. ROSiin tutustuminen Laitteistoon tutustuminen ROS-simulaattori Esimerkkiohjelmien rakenne Esimerkkiohjelmien kirjoittaminen Robotin testaus Dokumentointi 0.5 vko 5 vko 5 vko Taulukko 2: Toteutunut aikataulu Esimerkkiohjelmien kirjoittaminen ja testaaminen varsinkin oikealla robotilla ovat vahvasti riippuvaisia toisistaan ja etenevät rinnakkain. Lisäksi työn alla on käyttöohjeen kirjoittaminen ROSille ja esimerkkiohjelmalle. Tavoitteena on tehdä uusien ROS-projektien aloittaminen tuleville käyttäjille mahdollisimman helpoksi dokumentoimalla kaikki, mitä tarvitaan uuden ROSprojektin luomisesta sen kääntämiseen ja ajamiseen. 7
6 Yhteenveto Projektityössä tutustuttiin ROS-metakäyttöjärjestelmään. Sitä varten toteutettiin Qt-pohjainen graafinen käyttöliittymä ja teleoperaatio-ohjelmisto Pioneer P3-DX -robottialustalle. Ohjelmisto käyttää ROSia eri ohjelmistokomponenttien toteutukseen, rinnakkaisajoon ja robotin kanssa viestimiseen. Käyttöliittymä sekä vastaanottaa dataa kuuntelemalla ROS-viestejä, että lähettää ohjauskomentoja ROS-viesteinä. Lisäksi esimerkkinä robotin ohjauksesta toteutettiin autonominen seinänseurantamoodi robotille. Ohjelmiston on tarkoitus toimia esimerkkinä ROSin käytöstä tulevien vuosien kenttäja palvelurobotiikan kurssilla. Ohjelmistosta luodaan yksityiskohtainen dokumentaatio, jossa kerrotaan sen toimintaperiaatteet ja sen kääntämiseen ja käyttämiseen tarvittavat ohjelmapaketit. Dokumentin on myös tarkoitus toimia kevyenä käyttö-ohjeena ROSille. Syntynyttä ohjelmistoa testattiin sekä Stage-simulaattorissa että oikealla Pioneer-robotilla. Samalla saatiin käsitys ROSin potentiaalisista ongelmakohdista kuten verkkoviiveestä. 8
A Liite: LaserScan-viestirakenne # Single scan from a planar laser range-finder # # If you have another ranging device with different behavior (e.g. a sonar # array), please find or create a different message, since applications # will make fairly laser-specific assumptions about this data Header header float32 angle_min float32 angle_max float32 angle_increment float32 time_increment float32 scan_time float32 range_min float32 range_max # timestamp in the header is the acquisition time of # the first ray in the scan. # # in frame frame_id, angles are measured around # the positive Z axis (counterclockwise, if Z is up) # with zero angle being forward along the x axis # start angle of the scan [rad] # end angle of the scan [rad] # angular distance between measurements [rad] # time between measurements [seconds] - if your scanner # is moving, this will be used in interpolating position # of 3d points # time between scans [seconds] # minimum range value [m] # maximum range value [m] float32[] ranges # range data [m] (Note: values < range_min or > range_m float32[] intensities # intensity data [device-specific units]. If your # device does not provide intensities, please leave # the array empty. 9