AS-0.3200 Automaatio- ja systeemitekniikan projektityöt Loppuraportti
Transcription
AS-0.3200 Automaatio- ja systeemitekniikan projektityöt Loppuraportti
AS-0.3200 Automaatio- ja systeemitekniikan projektity¨ ot Loppuraportti Toni Okuogume, 78982W, EST, toni.okuogume@aalto.fi Lammi Lauri, 69488F, AUT, lauri.lammi@aalto.fi 17. joulukuuta 2012 Opintopisteet 4 op Projektity¨ on nimi Robottialustan instrumentointi ja k¨aytt¨o¨onotto Aloitusp¨ aiv¨ a 11. syyskuuta 2012 Lopetusp¨ aiv¨ a 31. joulukuuta 2012 Ohjaaja Matthieu Myrsky Sis¨ alt¨ o 1 Projektin kuvaus 1 2 Robot Operating System (ROS) 1 3 Simulaattori 3 4 Graafinen k¨ aytt¨ oliittym¨ a 4.1 Lasertutka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Teleoperointi . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 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¨ass¨a. Pian projektin alun j¨alkeen tosin selvisi, ett¨a projektissa k¨aytetty Pioneer-robottialusta oli my¨os kurssin AS-84.3144 Kentt¨a- ja palvelurobotiikka k¨ayt¨oss¨a ja ett¨a osa projektiin ilmoittautuneista henkil¨oist¨a oli my¨os kyseisell¨a kurssilla mukana. Lopputuloksena projektin osallistujam¨a¨ar¨a paisui kahdeksaan henkil¨o¨on. Osallistujat jaettiin kahteen ryhm¨a¨an, joista suurempi kuuden hengen ryhm¨a koostui niist¨a henkil¨oist¨a, jotka olivat my¨os kentt¨a- ja palvelurobotiikan kurssilla mukana. Suuremman ryhm¨an teht¨av¨a vastasi alkuper¨aist¨a teht¨av¨anantoa, kun taas pienemm¨alle ryhm¨alle annettiin teht¨av¨aksi tutustua ROS-pohjaiseen ohjelmointiin ja toteuttaa Pioneer-robotille esimerkkiohjelma, joka demonstroi ROSin k¨aytt¨o¨a mahdollisimman monipuolisesti. T¨ass¨a raportissa esitell¨a¨an Pioneerin ohjelmoinnista vastanneen ryhm¨an projektity¨o. Ty¨oss¨a luotiin ROSia k¨aytt¨av¨a graafinen k¨aytt¨oliittym¨a, joka piirt¨a¨a Pioneeriin asennettujen antureiden mittausdataa ja jolla voi teleoperoida robottia. K¨aytt¨oliittym¨an on tarkoitus olla modulaarinen siten, ett¨a se toimii eri ROS-alustoilla riippumatta siit¨a, mit¨a antureita niihin on asennettu. Ty¨oh¨on kuului my¨os ohjelmiston kattava dokumentointi ja k¨aytt¨oohjeen laatiminen. Ohjelmistoa on tarkoitus k¨aytt¨a¨a esimerkkin¨a tulevien vuosien kentt¨a- ja palvelurobotiikan kurssilla. Projektity¨oss¨a k¨aytettiin Pioneer P3-DX -robottialustaa. Edelt¨amainittu toinen projektity¨oryhm¨a asensi siihen tietokoneen, 270◦ SICKin laseret¨aisyysskannerin sek¨a Microsoft Kinecti¨a vastaavan Asus Xtion PRO LIVE -liiketunnistimen, jossa on my¨os stereokameraa vastaavaa toiminnallisuutta. N¨aiden lis¨aksi robottialustassa on valmiiksi kahdeksan eteenp¨ain suunnattua ultra¨a¨anianturia sek¨a odometriadatan ker¨aykseen tarvittavat enkooderit. Ty¨oss¨a k¨aytetty robotti on esitetty kuvassa 1. 2 Robot Operating System (ROS) ROS on robottiohjelmistojen kehitykseen tarkoitettu avoimen l¨ahdekoodin metak¨aytt¨oj¨arjestelm¨a. Se tarjoaa ty¨okaluja ja kirjastoja matalan tason laitteistonhallintaan, prosessienhallintaan, monen tietokoneen ylitse toimivien ohjelmistojen py¨oritt¨amiseen yms. K¨ayt¨ann¨oss¨a ROS-ohjelma koostuu rinnakkaisista, kesken¨a¨an kommunikoivista prosesseista, joita ROSissa kutsutaan noodeiksi. T¨aysimittainen ROS-ohjelmisto koostuu monesta eri noodista, jotka yhdess¨a muodostavat vertaisverkon prosesseja. ROS-ohjelmiston pienimpi¨a komponentteja, kuten yksitt¨aisi¨a ohjelmia, kirjastoja yms. kutsutaan paketeiksi 1 Kuva 1: Projektity¨oss¨a k¨aytetty Pioneer P3-DX -robotti (package). Ohjelmistojen jakamisen helpottamiseksi kaikki tietyn ohjelmiston tarvitsemat paketit voi ROSissa koota pinoiksi (stack). Noodien v¨alinen kommunikointi tapahtuu julkaisemalla dataa yleisille, kaikkien noodien n¨aht¨aviss¨a oleville kanaville (topic). ROSissa on lukuisia valmiita viestimuotoja, joissa dataa voi julkaista. Noodin k¨aynnistyksen yhteydess¨a ROS-mestarinoodille ilmoitetaan, mille noodeille k¨aynnistett¨av¨a noodi julkaisee mink¨a muotoisia viestej¨a ja vastaavasti mit¨a kanavia se kuuntelee. Kanavien julkisuuden vuoksi tietty¨a kanavaa voi kuunnella mielivaltainen m¨a¨ar¨a noodeja. Vastaavasti tietty noodi voi julkaista viestej¨a mielivaltaiselle m¨a¨ar¨alle kanavia. Julkaistut viestit voivat sis¨alt¨a¨a esimerkiksi anturilta saatua mittausdataa tai ohjausk¨askyj¨a. Monesta moneen -tyyppiselle kanava- ja noodirakenteelle on my¨os vaihtoehtoinen kommunikaatiorakenne, jota ROSissa kutsutaan palveluiksi (service). T¨ass¨a rakenteessa viestien julkaiseminen ja niiden kuuntelu korvataan tietyn noodin tekemill¨a palvelupyynn¨oill¨a, johon jokin tietty noodi vastaa. Esimerkki viestin rakenteesta on liitteess¨a A, jossa on esitetty LaserScan-viestin rakenne. T¨am¨an projektity¨on tapauksessa noodit jakautuvat robotilla ja et¨akoneella ajettaviin. Robotin puolella on kerralla k¨aynniss¨a sen sis¨aa¨nrakennettujen laitteiden k¨aytt¨o¨on tarkoitettu valmis RosAria-noodi, joka julkaisee mm. ultra¨a¨ani- ja odometriadataa ja jota k¨aytet¨a¨an robotin ohjaamiseen. Sen lis¨aksi on k¨aynniss¨a noodit laserskannerille ja liikkeentunnistimelle. Turvatoime2 na t¨orm¨ayksien ja vaaratilanteiden ehk¨aisemiseksi robotin puolella on my¨os k¨aynniss¨a erillinen turvanoodi. Et¨akoneella on k¨aynniss¨a k¨aytt¨oliittym¨an ja teleoperoinnin tarvitsemat noodit, jotka kuuntelevat langattoman verkkoyhteyden v¨alityksell¨a Pioneerin noodien julkaisemaa dataa ja l¨ahett¨av¨at sille ohjauskomentoja. Jos robottia halutaan simuloida, t¨aytyy my¨os k¨aynnist¨a¨a Stage-simulaattorille oma noodi. K¨ayt¨ann¨oss¨a se julkaisee virtuaalirobotin mittaus- ja odometriadataa tietyille kanaville. Simulaattorissa py¨oriv¨an esimerkkiohjelmiston noodiverkosto on esitetty kuvassa 2. Kuvassa soikiot ovat noodeja, joiden v¨alisten nuolten suunta kertoo kumpi noodi julkaisee ja kumpi kuuntelee viestej¨a. Nuolet on nimetty viestien kanavien nimill¨a. Kuva 2: Esimerkkiohjelmiston noodigraafi 3 Simulaattori Koska projektity¨on alkuvaiheissa oikeaa robottia ei ollut viel¨a k¨aytett¨aviss¨a, tarvittiin ohjelmiston kehityst¨a auttamaan jokin ROS-yhteensopiva simulaattori. K¨ayt¨ann¨oss¨a t¨ah¨an oli kaksi vaihtoehtoa, Gazebo ja Stage. Gazebo on eritt¨ain monipuolinen 3D-simulaattori, joka mm. pystyy mallintamaan robottien yksitt¨aisi¨a liikkuvia osia ja robottien fyysist¨a interaktiota ymp¨arist¨ojen kanssa. Gazebo kuitenkin osoittautui raskaaksi ajettavaksi, eik¨a Pioneerin tapauksessa suurimmasta osasta sen ominaisuuksia ollut mit¨a¨an hy¨oty¨a. N¨ain ollen projektia varten valittiin Stage-simulaattori. Stage on yksinkertainen mutta tehokas 2D-simulaattori, joka on alunperin tarkoitettu robottiparvien simulointiin. Simulaattorissa on helppo m¨a¨aritell¨a uusia robotteja tai karttoja. Stage osoittautui kevyeksi ja helppok¨aytt¨oiseksi, joten sit¨a voi suositella my¨os tulevia kentt¨a- ja palvelurobotiikan kursseja varten. Stagessa robotit mallinnetaan yksinkertaisina liikkuvina objekteina, joiden mahdolliset liikkuvat osat j¨atet¨a¨an huomioimatta. Roboteilla ei ole 3 muita fyysisi¨a ominaisuuksia kuin niiden dimensiot ja mahdollisesti esimerkiksi huippunopeus, jos sellainen on niille m¨a¨aritelty. Robotteja voi kuitenkin olla monta, ja niit¨a on eritt¨ain helppo m¨a¨aritell¨a Stagen omalla syntaksilla lis¨a¨a. Simulaattori on nopea jopa heikkotehoisemmalla tietokoneella ja usealla robotilla. Roboteilla voi olla Stagen normaalissa k¨ayt¨oss¨a mielivaltainen m¨a¨ar¨a et¨aisyysantureita, mutta ROSissa m¨a¨ar¨a on rajoitettu yhteen per robotti. Uusien karttojen m¨a¨aritt¨aminen on niinkin helppoa kuin uuden kuvatiedoston luominen halutun ymp¨arist¨on pohjakaaviosta. Kuvassa 3 esitet¨a¨an Stage-simulaatiossa otettu kuvankaappaus Pioneerista. Kuva 3: Stage-simulaattori 4 Graafinen k¨ aytto a ¨liittym¨ Projektity¨ot¨a varten tehty esimerkkiohjelma on Qt-pohjainen graafinen teleoperointik¨aytt¨oliittym¨a. Se lukee Pioneerin l¨ahett¨am¨a¨a anturidataa ja piirt¨a¨a sit¨a k¨aytt¨aen tutkakuvan robotin ymp¨arist¨ost¨a. Se my¨os mahdollistaa robotin et¨aohjauksen mm. n¨app¨aimist¨okomennoilla langattoman verkon ylitse. 4.1 Lasertutka Laserskanneri-ohjelman tarkoitus on auttaa tulevia Kentt¨a- ja palvelurobotiikan kurssin opiskelijoita ohjaamaan Pioneer-robottia. Se n¨aytt¨a¨a robotilta saadut laserscanneri ja ultra¨a¨anidata ja kertoo sen lis¨aksi robotin sen hetkisen nopeuden. K¨aytt¨oliittym¨a on rakennettu k¨aytt¨aen Qt:t¨a. T¨am¨a valittiin, 4 koska Qt:t¨a k¨aytet¨a¨an monissa ROSin mukana tulevissa ohjelmissa ja uuden projektin aloittaminen on mutkatonta, kun k¨aytt¨a¨a qt ros -pakettia apuna. T¨am¨a paketti tekee valmiin pohjan jota voi sitten muokata omiin tarkoituksiin. Kuva 4: Lasertutkan k¨aytt¨oliittym¨a Kuva 4 n¨aytt¨a¨a tehtyn lasertutkan k¨aytt¨oliittym¨an. Kuva on otettu simulaattorissa, joten lasermittauksissa ei ole kohinaa. Vasemmanpuoleisessa ikkunassa n¨akyy keskell¨a robotti ja sen ymp¨arill¨a valkoisena pisteen¨a kaikki estepisteet mitk¨a laserscanneri n¨akee. Vihre¨a ympyr¨a n¨aytt¨a¨a laserskannerin maksimilukuet¨aisyyden sek¨a minimi- ja maksimikulmat. Kaikki n¨am¨a tiedot saadaan ROS l¨ahett¨am¨ast¨a LaserScan-viestist¨a, jonka ohjelma olettaa tulevan kanavalle /tilt scan. LaserScan-viestin rakenne on liitteess¨a A. Oikeanpuoleisista valintaruuduista voi valita haluuko vasemmanpuoleiseen n¨aytt¨o¨on laserskannerin antamat tiedot ja/tai ultra¨a¨anianturin antamat tiedot. Ultra¨a¨anianturin tiedot merkit¨a¨an ruutuun sinisell¨a. Ultra¨a¨anisensorin tiedot odotetaan tulevan topicille /sonar. Pieni ruutu oikealla puolella on tarkoitettu robotin Kinect-tyyppisen anturin videokuvaa varten. Heti ensimm¨aisen viestin tullessa laserskannerilta, Asuksen kameralta tai ultra¨a¨aniajurilta lasertutka merkitsee sen oikeaan yl¨akulmaan tekstill¨a. Se my¨os poistaa nimen oikean yl¨akulman listalta, jos minuuttiin ei ole tullut yht¨a¨an viesti¨a kyseisest¨a osasysteemist¨a. N¨ain on tehty, koska ROSssa ei voi suoraan ohjelman sis¨alt¨a saada selville onko kanavalle julkaiseva noodi p¨a¨all¨a vai ei. 5 4.2 Teleoperointi Teleoperointi koostuu ohjelmistossa k¨ayt¨ann¨oss¨a kolmesta eri komponentista. Graafinen k¨aytt¨oliittym¨a ohjaa kaikki n¨app¨aimist¨okomennot teleoperointik¨aytt¨oliittym¨alle, joka tunnistaa esimerkiksi nuolin¨app¨ainten painallukset ja muuttaa ne ohjauskomennoiksi. Komennot v¨alitet¨a¨an sopivassa muodossa et¨akoneella k¨aynniss¨a olevalle teleoperointinoodille, joka julkaisee ne Pioneerin ohjauskomentoja varten tarkoitetulle kanavalle. Lopuksi Pioneerin puolellla k¨aynniss¨a oleva turvanoodi tarkistaa, ettei ohjausk¨asky esimerkiksi aja robottia p¨ain sein¨a¨a. Jos vaaratilannetta ei ole, ohjausk¨asky julkaistaan robottia ohjaavan RosArian ohjauskanavalle. Teleoperointi siis koostuu kahdesta eri tietokoneilla toimivista noodista, sek¨a Qt-luokasta joka lukee n¨app¨aimist¨okomentoja. Tavallisen n¨app¨aimist¨oohjauksen lis¨aksi teleoperointik¨aytt¨oliittym¨ass¨a on my¨os toteutettu esimerkkin¨a robotin ohjauksesta autonominen sein¨anseurantamoodi. Moodin voi kytke¨a p¨a¨alle ja pois oikeaa n¨app¨aint¨a painamalla. Sein¨anseurantamoodissa robotti ajaa l¨ahimm¨an sein¨an suuntaisesti. Sein¨anseuranta on toteutettu kulmahistogrammilla. Kulmahistogrammi lasketaan ottamalla joka N:s laserskannauksen datapiste, ja muodostamalla niiden v¨alille suuntavektori. Vektorin suunta suhteessa robottiin sijoitetaan sopivaan histogrammin lokeroon. Jos histogrammin laskentaet¨aisyyden sis¨all¨a on sein¨a, suurin osa n¨aist¨a vektoreista on samansuuntaisia. N¨ain histogrammiin muodostuu piikki siihen kulma-arvoon, jonka suuntaan sein¨a kulkee. K¨a¨ant¨am¨all¨a robotti t¨ah¨an suuntaan se saadaan seuraamaan sein¨a¨a. Oikealla robotilla tehdyiss¨a kokeissa havaittiin nopeasti, ett¨a ohjattaessa robottia verkon ylitse voi esiinty¨a varsin suuriakin verkkoviivepiikkej¨a. Piikkien aikana robotille ei voida l¨ahett¨a¨a ohjauskomentoja. Pahimmassa tapauksessa jokin vanha komento j¨a¨a p¨a¨alle, jolloin robotti voi ajaa p¨ain sein¨a¨a tai aiheuttaa jonkin muun vaaratilanteen. Viivepiikkien vaikutuksen minimoimiseksi ja robotin omaksi turvaksi robotille luotiin erillinen turvanoodi, joka on k¨aynniss¨a robotin itsens¨a sis¨all¨a et¨akoneen sijaan. Turvanoodi pys¨aytt¨a¨a robotin, jos se yritet¨a¨an ohjata liian l¨ahelle sein¨a¨a. Lis¨aksi jos uusia ohjauskomentoja ei vastaanoteta tiettyyn aikaan, turvanoodi pys¨aytt¨a¨a robotin. 5 Ajanhallinta Alkuper¨aisess¨a projektisuunnitelmassa tehtiin virhearvioita projektin eri osaalueisiin kuluvista aikam¨a¨arist¨a. Esimerkiksi oikeaa robottia p¨a¨asi k¨aytt¨am¨a¨an my¨ohemmin kuin alun perin oletettiin. Lis¨aksi varsinaisen robotin kanssa 6 ty¨oskennelless¨a ilmeni joitain ongelmakohtia, joihin ei osattu varautua etuk¨ateen. Alkuper¨ainen aikataulusuunnitelma on esitetty taulukossa 1. ROSiin tutustuminen Laitteistoon tutustuminen ROS-simulaattori Esimerkkiohjelmien rakenne Esimerkkiohjelmien kirjoittaminen Robotin testaus Dokumentointi 0.5 0.5 1 1 3.5 2.5 1 vko vko vko vko vko vko vko Taulukko 1: Alkuper¨ainen aikataulusuunnitelma Alkuper¨aisess¨a aikataulusuunnitelmassa oletettiin, ett¨a projektissa ty¨oskennell¨a¨an vain yhden osa-alueen kanssa kerrallaan. K¨ayt¨ann¨oss¨a n¨ain ei kuitenkaan ollut, vaan useampaa osa-aluetta, esimerkiksi ROSiin ja laitteistoon tutustumista sek¨a simulaattoria, k¨asiteltiin rinnakkain yht¨a aikaa. Varsinkin esimerkkiohjelmien kirjoittamiseen ja debuggaamiseen oikealla robotilla kului enemm¨an aikaa kuin oli alun perin suunniteltu. Lis¨aksi joulua l¨ahestytt¨aess¨a ainoa valmiiksi rakennettu Pioneer-alusta oli yh¨a useammin kentt¨a- ja palvelurobotiikan kurssin k¨ayt¨oss¨a, joka omalta osaltaan hidasti projektity¨on edistymist¨a. Loppuraportin palautushetkell¨a projektissa on viel¨a jonkin verran viimeistely¨a j¨aljell¨a. Ty¨ot¨a olisi l¨ahinn¨a tarkoitus debugata lis¨aa¨. Projektity¨on toteutunut aikataulu on esitetty taulukossa 2. 1 vko ROSiin tutustuminen 0.5 vko Laitteistoon tutustuminen ROS-simulaattori 1 vko Esimerkkiohjelmien rakenne 1 vko 5 vko Esimerkkiohjelmien kirjoittaminen Robotin testaus 5 vko Dokumentointi 1 vko Taulukko 2: Toteutunut aikataulu Esimerkkiohjelmien kirjoittaminen ja testaaminen varsinkin oikealla robotilla ovat vahvasti riippuvaisia toisistaan ja etenev¨at rinnakkain. Lis¨aksi ty¨on alla on k¨aytt¨oohjeen kirjoittaminen ROSille ja esimerkkiohjelmalle. Tavoitteena on tehd¨a uusien ROS-projektien aloittaminen tuleville k¨aytt¨ajille mahdollisimman helpoksi dokumentoimalla kaikki, mit¨a tarvitaan uuden ROSprojektin luomisesta sen k¨a¨ant¨amiseen ja ajamiseen. 7 6 Yhteenveto Projektity¨oss¨a tutustuttiin ROS-metak¨aytt¨oj¨arjestelm¨a¨an. Sit¨a varten toteutettiin Qt-pohjainen graafinen k¨aytt¨oliittym¨a ja teleoperaatio-ohjelmisto Pioneer P3-DX -robottialustalle. Ohjelmisto k¨aytt¨aa¨ ROSia eri ohjelmistokomponenttien toteutukseen, rinnakkaisajoon ja robotin kanssa viestimiseen. K¨aytt¨oliittym¨a sek¨a vastaanottaa dataa kuuntelemalla ROS-viestej¨a, ett¨a l¨ahett¨a¨a ohjauskomentoja ROS-viestein¨a. Lis¨aksi esimerkkin¨a robotin ohjauksesta toteutettiin autonominen sein¨anseurantamoodi robotille. Ohjelmiston on tarkoitus toimia esimerkkin¨a ROSin k¨ayt¨ost¨a tulevien vuosien kentt¨aja palvelurobotiikan kurssilla. Ohjelmistosta luodaan yksityiskohtainen dokumentaatio, jossa kerrotaan sen toimintaperiaatteet ja sen k¨a¨ant¨amiseen ja k¨aytt¨amiseen tarvittavat ohjelmapaketit. Dokumentin on my¨os tarkoitus toimia kevyen¨a k¨aytt¨o-ohjeena ROSille. Syntynytt¨a ohjelmistoa testattiin sek¨a Stage-simulaattorissa ett¨a oikealla Pioneer-robotilla. Samalla saatiin k¨asitys ROSin potentiaalisista ongelmakohdista kuten verkkoviiveest¨a. 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 # # # # # # 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 float32 angle_min float32 angle_max float32 angle_increment # start angle of the scan [rad] # end angle of the scan [rad] # angular distance between measurements [rad] float32 time_increment float32 scan_time # # # # float32 range_min float32 range_max # minimum range value [m] # maximum range value [m] float32[] ranges float32[] intensities # # # # time between measurements [seconds] - if your scanner is moving, this will be used in interpolating position of 3d points time between scans [seconds] range data [m] (Note: values < range_min or > range_ma intensity data [device-specific units]. If your device does not provide intensities, please leave the array empty. 9