AS-0.3200 Automaatio- ja systeemitekniikan projektityöt Loppuraportti

AS-0.3200 Automaatio- ja
systeemitekniikan projektity¨
ot
Loppuraportti
Toni Okuogume, 78982W, EST, [email protected]
Lammi Lauri, 69488F, AUT, [email protected]
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