Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505...

41
“Main” — 2011/12/28 — 13:48 — page 503 — #499 IV Eranskina Player/Stage robot-zerbitzari eta -simulagailua Gaien aurkibidea IV.a Sarrera ........................... 504 IV.b Nola instalatu Player/Stage? ............... 505 IV.c Gailuak, interfazeak eta driver -ak ............ 509 IV.d Bezero/zerbitzari eredua ................. 510 IV.e Lehenengo harremana PSrekin .............. 511 IV.f Ingurumena nola definitu ................. 512 IV.f1. Ereduak ....................... 513 IV.f2. Leihoa ........................ 515 IV.f3. Oinarrizko .world fitxategi bat .......... 516 IV.g Robotaren definizioa .................... 517 IV.g1. Sentsoreak eta gailuak ............... 517 IV.g2. Robot baten adibidea ................ 520 IV.g3. Robotaren sentsoreak ................ 524 IV.h Beste elementu batzuk nola eraiki ............ 533 IV.i .cfg luzapeneko fitxategiak ............... 536 IV.i1. .cfg fitxategi baten adibidea ........... 538 IV.j Robota mugitzen ...................... 539 IV.j1. libplayerc : C lengoaiako bezero-liburutegia .... 540 503

Transcript of Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505...

Page 1: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 503 — #499✐

IV Eranskina

Player/Stage robot-zerbitzarieta -simulagailua

Gaien aurkibidea

IV.a Sarrera . . . . . . . . . . . . . . . . . . . . . . . . . . . 504

IV.b Nola instalatu Player/Stage? . . . . . . . . . . . . . . . 505

IV.c Gailuak, interfazeak eta driver -ak . . . . . . . . . . . . 509

IV.d Bezero/zerbitzari eredua . . . . . . . . . . . . . . . . . 510

IV.e Lehenengo harremana PSrekin . . . . . . . . . . . . . . 511

IV.f Ingurumena nola definitu . . . . . . . . . . . . . . . . . 512

IV.f1. Ereduak . . . . . . . . . . . . . . . . . . . . . . . 513

IV.f2. Leihoa . . . . . . . . . . . . . . . . . . . . . . . . 515

IV.f3. Oinarrizko .world fitxategi bat . . . . . . . . . . 516

IV.g Robotaren definizioa . . . . . . . . . . . . . . . . . . . . 517

IV.g1. Sentsoreak eta gailuak . . . . . . . . . . . . . . . 517

IV.g2. Robot baten adibidea . . . . . . . . . . . . . . . . 520

IV.g3. Robotaren sentsoreak . . . . . . . . . . . . . . . . 524

IV.h Beste elementu batzuk nola eraiki . . . . . . . . . . . . 533

IV.i .cfg luzapeneko fitxategiak . . . . . . . . . . . . . . . 536

IV.i1. .cfg fitxategi baten adibidea . . . . . . . . . . . 538

IV.j Robota mugitzen . . . . . . . . . . . . . . . . . . . . . . 539

IV.j1. libplayerc: C lengoaiako bezero-liburutegia . . . . 540

503

Page 2: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 504 — #500✐

504 Robot mugikorrak. Oinarriak

IV.a Sarrera

Player robotak programatzeko sareko zerbitzaria da, gaur egun robotak kon-trolatzeko gehien erabiltzen den softwarea, ziur asko. Player POSIX motakoplataformetan instalatu daiteke, Unix, Linux eta MacOS, hain zuzen ere,eta GNU lizentziapean banatzen da1. Player -en bitartez robotaren sentso-reak eta motorrak atzitu daitezke modu errazean, eta sare bidez gainera.Player zerbitzaria martxan jarri eta gero, erabiltzailearen programak Pla-

yer -ekin komunika daitezke TCP socket baten bitartez sentsoreak irakurrieta eragileetara aginduak bidali ahal izateko. Bezero-programak inplementa-tzeko programazio-lengoaia desberdinak erabil daitezke, hala nola C, C++,Python edo Java.

Hasiera batean ActivMedia (egungo MobileRobots) etxeko Pioneer mota-ko robotentzat garatu bazen ere, Player -ek hardware mota desberdinak onar-tzen ditu eta plataforma robotiko komertzial anitzetan erabil daiteke. Area-go, haren egitura modularrak gailu berrientzako driver -ak garatzea erraztendu eta, horregatik, arrakasta handia dauka software libreko komunitatean.

Player -en ezaugarri nagusietakoa hauxe da: ez du inongo murriztapenikjartzen garatu nahi den kontrol-arkitekturaren gainean. Programatzaileakberak erabakiko du nolako kontrola eraikitzen duen bezero-programa(k) idaz-tean, programa harianiztuna, sekuentziala nahiz portaera erreaktiboa eraku-tsiko duena.

Player -ek gailuak, driver -ak eta interfazeak bereizten ditu. Gailua hard-ware konkretua da, adibidez, robot baten mugimendu-sistema. Driver -a,hardware konkretu batekin aritzeko derrigorrezkoa den software unitatea edomodulua da. Interfazea, berriz, mota bereko hardwarea atzitzeko metodoaedo abstrakzioa. Horrela, mugimendu-sistema sinkronoa duen iRobot etxe-ko B21 robotaren eta mugimendu-sistema diferentziala duen Pioneer robo-taren mugimenduak position2d izeneko interfazearen bitartez kontrolatzendira, agindu berberak erabiliz.

Player -ek hamaika bezero-programa onar ditzake martxan, aldi berean.Zerbitzaria abiarazi den ordenagailu berdin zein desberdinetan exekuta dai-tezke bezeroak.

Bestalde, Stage robot anitzen simulatzailea da. Stage-k, beraz, robo-ten populazioa simulatzen du, alegia, sentsoreen eta motorren multzoak bit-mapen bitartez definitutako ingurumenetan. “2” bertsiora arte simulatzai-leak bi dimentsioko ingurunea bistaratzen zuen arren, “3” eta ondorengobertsioetan ingurunean 3D-ko ezaugarriak erakusten ditu.

1Player Windows-en konpila daitekeen arren (http://playerstage.sourceforge.net/wiki/Windows),Stage-k artelan dexente eskatzen du eta asetzea zaila gertatzen den zenbait dependentziaere

Page 3: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 505 — #501✐

Player/Stage robot-zerbitzari eta -simulagailua 505

Stage bi modutara erabil daiteke:

• libstageplugin: Player -en plugin moduan. Player -en bitartez exeku-tatzen da Stage. Hau da erabilera arruntena, erabiltzaileak kontrol-programak eta algoritmoak idazten ditu, sentsoreetatik jasotako ira-kurketak prozesatu, eta eragingailuei aginduak bidaliz. Horrela, fisikokieskuragarri ez ditugun gailuekin esperimentuak egin ditzakegu. Testuli-buru honetan era honetako erabilera nola burutzen den azalduko dugu.

• libstage: programak simulatzeko C-ko liburutegi gisa. Ez du Player

zerbitzariaren beharrik, bere gisa funtzionatzen du. Ordainean, ezinditu erabili Player -ek driver gisa eskaintzen dituen nabigazioko zenbaitalgoritmo.

IV.b Nola instalatu Player/Stage?

Sarreran aipatu dugu POSIX plataformetarako garatu dela Player/Stage(PS). Linux sistema eragilea da ondoen doakiona eta, hemen, sistema eragilehorretan instalazioa nola egin azalduko da2.

Bertsio desberdinak daude atzigarri Player/Stage-ren webgunean. “2”bertsioa egonkorrena eta baliabide gutxien behar duena izanik, zaharkitutageratu da hau ingurumena hiru dimentsiotan bistaratzeko gaitasun ezaga-tik. Bertsioa aukeratzeko gure gomendioa, instalatuta duzun Linux sistemaeragilearen arkitekturaren arabera doa:

• 32 biteko arkitektura: Player 3.0.2 eta Stage 3.2.2.

• 64 biteko arkitektura: Player 3.1 eta Stage 4.0.1. Ez dira bertsioegongorrak hauek, oraindik garapen-prozesuan daude esku artean du-zun testuliburua argitaratu denean.

Player -en bertsioan bainoago, Stage-ren bertsioan gertatzen dira aldaketakbatetik bestera. Instalazioa aurrera eramateko urratsak hauek dira:

1. Eskuratu nahi duzun bertsioa.

• Player 3.0.2 eta Stage 3.2.2: hauek honako webgunetik eskuraditzakezu:

http://sourceforge.net/projects/playerstage/files/

Bi fitxategi deskargatu behar dituzu: player-3.0.2.tar.gz

eta Stage-3.2.2-Source.tar.gz

2Macintosh-a baduzu, http://www.qwyck.co.uk/2011/installing-playerstage-on-mac-os-x estekan dauzkazu jarraibide egokiak “3” bertsioaren instalazio-prozesua aurrera erama-teko.

Page 4: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 506 — #502✐

506 Robot mugikorrak. Oinarriak

• Player 3.1 eta Stage 4.0.1. Player eskuratzeko, sartu honakowebgunean:

http://sourceforge.net/projects/playerstage/files/\

Player/

Ondoren, code etiketan, aukeratu svn, eta exekutatu hurrengokomandoa3:

svn co https://playerstage.svn.sourceforge.net/

svnroot/playerstage/code/player/trunk player-3.1

player-3.1 karpeta sortu eta Player -en azken bertsioari dago-kion iturburu-kodea izango duzu bertan. Stage-ren azken bertsioagit-en bidez lortzen da http://github.com/rtv/Stage es-tekan, aukeratu Downloads eta, ondoren, 4.0.1 bertsioa.rtv-Stage-v4.0.1-g4f0a60d.zip izena (edo antzekoa) duenfitxategia jaitsiko duzu zure ordenagailura.

2. Player -en konpilazio-ingurunea definitu. Horretarako, lehenengo des-konprimatu lortu berri duzun fitxategia,

tar xzvf player-3.0.2.tgz

eta sartu sortzen duen karpetan; edo, sartu svn exekutatu ondorensortutako player-3.1 karpetan. Hemendik aurrera, biak PLAYERkarpeta moduan erreferentziatuko ditugu, testua errazteko.

Bi bertsioak instalatzeko prozesu berari jarraitu behar zaio, ez dago des-berdintasunik. Konpilazio-ingurunea cmake aginduaren bitartez kon-figuratzen da. PLAYER karpetaren barnean, sortu build izeneko az-pikarpeta (mkdir build), bertan sartu (cd build), eta exekutatucmake ../ edo, aukeran, ccmake ../. Lehenengoa eraginkorragoada baina gordinagoa. Bigarrenak erantzun ulergarriagoak ematen di-tu. ccmake ../ exekutatu ondoren, “c” sakatu behar da konpilazio-ingurunea konfiguratzeko eta, ondoren, “g”, Player konpilatzeko ko-mandoak sortzeko.

PS proiektua martxan jartzeko ezinbestekoak dira sistema eragileakeskaintzen dituen zenbait liburutegi. Hona hemen zerrenda4:

autotools-dev, build-essential, cmake, cpp, gcc, g++, libboost-thread,libboost-thread-dev, libboost-signals, libboost-signals-dev, libcv, libcv-

3Komando osoa errenkada batean.4Paketeen bertsioak ez datoz adierazita, Linux-eko sistema zein banaketaren arabera

aldatzen baitira.

Page 5: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 507 — #503✐

Player/Stage robot-zerbitzari eta -simulagailua 507

dev, libgdk-pixbuf, libgdk-pixbuf-dev, libgnomecanvas2-0, libgnomecan-vas2-dev, libgsl0, libgsl0-dev, libjpeg-dev, libtool, libxmu-dev, swig,freeglut, freeglut-dev, libfltk, libfltk-dev, libgtk, libltdl, libltdl-dev, lib-png, libpng-dev, python-dev, libcvaux, libcvaux-dev, libhighgui, libhigh-gui-dev.

3. Konpilatzeko make erabili. Honek luze emango du.

4. Instalatzeko, sudo make install erabili. Instalazio arrunta “/usr/-local” karpetan egingo da, besterik adierazi ezean. Beste kokalekubat nahiago badugu, konfigurazio-garaian adierazi beharko dugu non.cmake ../ erabiliko baduzu,

export KARPETA=/home/nirekontua/ps

cmake -DCMAKE_INSTALL_PREFIX=$KARPETA

ccmake ../ erabili baduzu, berriz, CMAKE INSTALL PREFIX alda-gaiaren balioa aldatu beharko duzu konpilazio-ingurunea konfiguratze-ko “c” sakatzen duzunean azaltzen zaizun zerrendan.

5. Stage instalatu:

• Deskonprimatu jaitsi duzun fitxategia:

tar xzvf Stage-3.2.2-Source.tgz edounzip Stage-4.0.1-g4f0a60d.zip

eta sartu deskonprimatzean sortu berri den karpetan. Karpetahorri STAGE moduan egingo diogu erreferentzia testua errazteko.

• Konpilazio-ingurunea konfiguratu: Player instalatzean egindakourrats berdina da hau. STAGE karpetaren barnean, sortu build

izeneko karpeta eta, bertan, ccmake ../ exekutatu.

Stage-k Player behar du libstageplugin liburutegia sortzeko. Horidela-eta, Player ez badugu kokaleku lehenetsian instalatu (“/usr/-local” karpetan) PKG CONFIG PATH ingurune-aldagaia egokitubeharko dugu Stage instalatu aurretik, “player.pc” fitxategia to-pa dezan. Horretarako nahikoa da honako agindua exekutatzeaterminal berean5:

export PKG CONFIG PATH=/home/nirekontua/ps/lib/pkgconfig:$PKG CONFIG PATH$

5Agindu hori zure erro-direktorioan dagoen “.bashrc” fitxategian idaztea gomendatzenda, irekitzen den terminal bakoitzean automatikoki gerta dadin.

Page 6: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 508 — #504✐

508 Robot mugikorrak. Oinarriak

Berriro ere, instalazio arrunta “/usr/local” karpetan egondo da.Kokalekua aldatzeko, orain da garaia adierazteko non. cmake

../ erabiliko baduzu,

export KARPETA=/home/nirekontua/ps

aginduaren bidez emango zaio balio egokia KARPETA izeneko in-gurumen-aldagaiari. Ondoren, cmake exekutatu, honela:

cmake -DCMAKE_INSTALL_PREFIX=$KARPETA ../

ccmake ../ erabiltzen baduzu, konpilazio-ingurunea konfigura-tzeko “c” sakatzerakoan bistaratzen den aldagaien artean, bilatuCMAKE INSTALL PREFIX eta aldatu balioa.

• make

• sudo make install. Esan bezala, konfigurazio-garaian besterikadierazi ezean, “/usr/local” karpetan egingo da instalazioa etahortik, supererabiltzaile moduan exekutatzeko beharra.

Stage-k karpeta desberdinetan instalatuko ditu bere osagaiak. Adibi-dez, KARPETA/bin direktorioan exekutagarriak jarriko ditu; KARPE-TA/lib direktorioan, libstageplugin eta gainerako liburutegiak; etaKARPETA/share karpetatik zintzilik, irudiak eta beste datu-baliabideak.

Instalazioa ondo gertatu dela egiaztatzeko bi urrats emango ditugu:

• Stage deskonprimatu den karpetara jo, “worlds” azpidirektorioansartu eta player simple.cfg exekutatu.

Honako arazoak arruntak dira:

– libstageplugin.so liburutegia aurkitzen ez duela esaten ba-digu, orduan LD LIBRARY PATH egoera-aldagaia egokitubeharko da liburutegiaren kokapena adierazteko, honela6:

export LD LIBRARY PATH=/home/nirekontua/ps/lib:$LD LIBRARY PATH$

Ondoren, sudo ldconfig exekutatu.

– “/usr/X11R6/lib/X11/rgb.txt not found” edo antzeko mezuaazaltzen bada, “rgb.txt” fitxategira esteka sinboliko bat sor-tu beharko da, Stage-k fitxategia bilatzen duen kokagunera.Adibidez,

sudo ln -s /usr/share/X11/rgb.txt /usr/X11R6/lib/X11/rgb.txt

Arazo hau antzeman daiteke ere konfigurazio-garaian.

6Berriro ere, agindua zure erro-direktorioko “.bashrc” fitxategian gehitzea gomendatzenda, esleipena automatikoki gerta dadin.

Page 7: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 509 — #505✐

Player/Stage robot-zerbitzari eta -simulagailua 509

• Terminal berri bat ireki, PLAYER karpetara jo eta “examples/-libplayerc++” direktorioan bezero-programen zenbait adibide to-patuko dituzu. Exekutatu adibidez: ./laserobstacleavoid

Robotak oztopoak ekidingo ditu noraezean dabilela laser sentso-rearen irakurketak oinarri bezala erabiliz.

IV.c Gailuak, interfazeak eta driver-ak

Sarreran aipatu bezala, Player -ek gailuak, interfazeak eta driver -ak bereiztenditu. Gailuak hardware-elementuak dira, adibidez, Hokuyo etxeko URG-04LX-UG01 laser sentsorea, edo robot baten mugimendu-sistema. Player -engailuen kontzeptua UNIXeko bera da, entitate abstraktuak dira, interfazebaten edo, batzuetan, gehiagoren) bitartez atzitzen direnak, eta zerbitzurenbat ekaintzen dutenak. Driver -ak hardwarearekin zuzenean aritzen direnkode zatiak dira. Ez da beharrezkoa driver bat nola idazten den jakiteadriver -a bera erabili ahal izateko. Interfazeek, berriz, Player -ek eta driver -ek elkarren artean eragiteko sintaxia eta semantika zehazten dute. Driver

baten sarrera eta irteerak interfaze batera (edo gehiagora) egokitu beharkodira. Era horretan, programatzaileak ez du zuzenean driver -a atzituko, baiziketa bere hardwarearen abstrakzioa den interfazea. Gailu berri bat Player

bitartez atzitu nahiko bagenu, orduan driver egokia idatzi beharko litzateke.Player -ek gailu baten instantzia desberdinak kontrolatzea ahalbidetzen

du. Robotak bi laser sentsore baditu, laser motako bi interfazeren bitar-tez atzitu ahal izango dira eta, biak bereizteko, interfaze bakoitzari indizedesberdina esleituko zaio.

Player -en mezu guztiak gailuen artean trukatzen dira, beren interfazeenbitartez. Ondorioz, robot erreal batean Player gailu fisiko batekin komuni-katzen bada, simulatutako robotean bere simulazioarekin komunikatu ahalizango da. Bezero-programaren aldetik ez dago diferentziarik robot erreala-rekin aritu edo simulazioan aritu. Areago, interfaze berdina erabiltzen du-ten gailuek ere, sintaxi bera erabiliko dute nahiz eta gailuak desberdinakizan. Adibidez, p2os eta rflex Pioneer motako eta B21 motako robotenmugimendu-sistemak kontrolatzen dituzten driver -ak dira. Driver hauek po-

sition2d interfazearen bitartez kontrolatzen dira. Ondorioz, formato berekomezuak sortzen dituzte, eta modu berean atzitzen dira bezero-programetatik.Honela:

driver driver

( (

name "rflex" name "p2os"

provides ["position2d:0"] provides ["position2d:0"]

) )

Page 8: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 510 — #506✐

510 Robot mugikorrak. Oinarriak

Driver gehienek interfaze bakarra onartzen dute. Horrela, sicklms200

driver -ak laser motako interfazea eskaintzen du, urglaser driver -ak bezala.Baina badira beste batzuk interfaze desberdinak eskaintzen dituztenak. Ho-rien artean dago p2os driver -a, position2d motako hiru interfaze desberdineskaintzen dituena (odometria, iparrorratza eta gps-a atzitzeko) eta, gainera,sonar, power, gripper eta blobfinder interfazeak ere. Zergatik desberdin-tasuna? Laserrak, hardware pieza asko bezala, normalean ordenagailuarenserie-lerroetara edo USB portuetara konektatzen dira, eta funtzio bakarraduten gailuak dira. p2os, aldiz, Pioneer robotek duten plaka bat da, beremikrokontrolagailu eta guzti, eta gailu desberdinak konektatzen dira bertara,robot horiek duten sonarren gerrikoa, iparrorratza eta gps-a, besteak beste.

Badira zenbait gailu Player -eko gailuen liburutegian (libplayerdrivers.so)integratu gabe dauden driver -ak dituztenak. Driver independente horiekplugin dute izena. Normalean, hardware berri batentzako driver -a idatzibehar denean, plugin moduan garatzen da eta, funtzionaltasun egokia duelaziurtatzen denean, nahi izanez gero Player -en integratzen da. Horrek ba-du abantaila nabaria, ez da Player -en kode osoa birkonpilatu behar driver

horretan aldaketa bat egiten den bakoitzean. Unix sistemako “moduluen”antzera uler daitezke plugin-ak.

IV.d Bezero/zerbitzari eredua

Player -ek bezero/zerbitzari ereduari jarraitzen dio (ikus IV1. irudia). Al-de batetik Player izeneko zerbitzaria dago. Zerbitzaria hardwarea atzitzekoarduraduna da, sentsoreen irakurketak egin eta eragileetara aginduak bida-liko ditu. Player zerbitzaria hardwarea konektatuta dagoen ordenagailuanbertan exekutatu behar da, robotean alegia.

Bestetik, erabiltzaileak idazten dituen kontrol-programak player -en beze-ro izango dira. Player -i beharrezkoak dituzten datuak eskatu eta, interfazeegokien bitartez, zerbitzariari mezu egokiak bidaliko dizkiote robotaren ekin-tzak adierazteko.

Zerbitzariak zein zerbitzu eskaini behar dituen, konfigurazio-fitxategi ba-tean adierazi behar da. Bertan, sistemaren driver eta interfazeak zehaztubehar dira. Gainera, robotaren ezaugarri fisikoak zeintzuk diren eta, si-mulazioan arituz gero, ingurumenaren deskripzioa ere eman behar zaizkioPlayer -i. Horretarako daude .cfg, .inc eta .world fitxategiak.

Page 9: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 511 — #507✐

Player/Stage robot-zerbitzari eta -simulagailua 511

HARIIDAZLEA

0 BEZEROAREN

HARIIDAZLEA

N BEZEROAREN

HARIIRAKURLEA

0 BEZEROAREN

aginduak

datuak

aginduak

datuakFISIKOAN GAILU

FISIKOA0 GAILU

uneko agindua

uneko datuak

HARIA

BUFERRADATU

AGINDUBUFERRA

N GAILUAREN

N GAILUAREN

N GAILUAREN

AGINDUBUFERRA

0 GAILUAREN

BUFERRADATU

0 GAILUAREN

uneko agindua

uneko datuak

HARIA0 GAILUAREN

gailu guztien datuak

gailu guztiei aginduak

gailu guztien datuak

gailu guztiei aginduak

HARIA0 GAILUAREN

HARIAN GAILUAREN

HARIIRAKURLEA

N BEZEROAREN

Partekatutako helbide-espazio orokorra

serie-lerroa)(adibidez,espezifikoa

Gailuenkonexio

TCP konexioa

IV1. irudia. Player -en arkitektura orokorra.

IV.e Lehenengo harremana PSrekin

Egin dezagun froga txiki bat. Joan Stage-ren worlds karpetara (instalaziokodirektorioa aldatu ez baduzu, /usr/local/share/stage/worlds) etaexekutatu honako komandoa:

player simple.cfg

IV2. irudiko edukia duen leihoa bistaratuko zaizu.Robota mugitzen hasiko bada ere, oraingoz ez gara horretaz arduratuko.

PS martxan jartzeko, .cfg luzapeneko konfigurazio-fitxategia pasatu diogukomando lerrotik. .cfg fitxategien egitura aurrerago zehaztuko dugun arren,merezi du begirada botatzea. Honako atala aurkituko dugu lehenengo:

driver

(

name "stage"

plugin "libstageplugin"

provides ["simulation:0"]

worldfile "simple.world"

Horrelako atala beti izan behar da lehenengoa .cfg fitxategian simula-zioan arituko bagara. Paragrafo horretan, stage izeneko driver -a erabiliko

Page 10: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 512 — #508✐

512 Robot mugikorrak. Oinarriak

IV2. irudia. simple.cfg ingurumena.

dela adierazten da, libstageplugin liburutegian definituta dagoena. Horrekemango dio simulation interfazeari egokitzen zaion informazioa Player -i. Si-mulazioa eraikitzeko, Player -ek simple.world fitxategian begiratuko du..world luzapeneko fitxategian simulatu behar diren elementu guztien zehaz-tasunak azaldu behar dira. Horretarako, Stage ereduen definizioan oinarri-tzen da.

IV.f Ingurumena nola definitu

Goazen bada ingurumenaren definizioa aztertzera. Hau da, ziur asko, Sta-ge-ren 3 bertsiotik 4 bertsiora aldatzen den atal nagusia. Stage-ren 3 ber-tsioan mundua nola definitu ondo azaltzen da Jennifer Owen-ek idatzitakoeskuliburuan. Dokumentua sarean daukazu eskuragarri7. Guk, eskuliburuhori egokitu eta zabaldu egin dugu Stage-ren 4 bertsiorako ere balio dezan,bertsio honen dokumentazioa urria baita. Gomendagarria da, halere, auke-

7http://www-users.cs.york.uk/jowen/index.php esteka.

Page 11: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 513 — #509✐

Player/Stage robot-zerbitzari eta -simulagailua 513

ratutako Stage-ren bertsioarekin datorren worlds karpetan dauden .inc

eta .world adibideak aztertzea, baita PSren webgunean linean dauden es-kuliburuak kontsultatzea ere.

IV.f1. Ereduak

.world fitxategiaren edukia, oinarrian, simulazioko elementuak deskriba-tzen dituen ereduen zerrendak osatzen du, hala nola oinarrizko ingurume-nak, robotek eta beste elementuek. Oinarrizko elementuak model du izenaeta honelakoa da haren sintaxia:

define izena model

(

#parametroak"

)

Honen bitartez esaten zaio PSri izena karaktere-katearen bitartez erre-ferentziatuko den eredua definitzen dela. Ereduek eduki ditzaketen para-metroen zerrenda ezagutzeko, map.inc fitxategiari botako diogu begirada.Hemen, floorplan izeneko eredua dago, oinarrizko ingurumena definitzekoerabili behar dena:

define floorplan model

(

# sombre, sensible, artistic

color "gray30"

# mapa gehienek muga beharko dute ertzetan

boundary 1

gui_nose 0

gui_grid 0

gui_move 0

gui_outline 0

gripper_return 0

fiducial_return 0

ranger_return 0.5

)

Parametro hauen esanahia honakoa da:

• color: zein koloretan bistaratu ingurumena. Adibidean, grisa da hau-tatutako kolorea.

Page 12: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 514 — #510✐

514 Robot mugikorrak. Oinarriak

• boundary: eredua inguratuko duen laukizuzena bistaratuko den edoez. Bitarra da parametro hau, 0 balioa hartzen badu ez da laukizu-zen beltzik azalduko ingurumenaren muga gisa, bai, ordea, 1 edo baliohandiagoa esleituz gero.

• gui nose: ereduaren orientazioa erakutsiko duen marka bistaratu edoez adierazten da parametro honen bitartez.

• gui grid: ereduaren gainean gelaxka-sarea bistaratu edo ez adieraztendu.

• gui move: eredua ingurumenean saguarekin arrastatu daitekeen edoez adierazten du.

• gui outline: eredua profilatu behar denetz adierazten du. Ez dau-ka eraginik mapa definitzean, baina erabilgarria izan daiteke elementudesberdinen ereduak definitzean.

• fiducial return: sentsorearenizena return erako parametroek deskri-batzen dute nola erreakzionatu behar duen sentsore horrek ereduarenaurrean. Fiduziala aurrerago definituko dugun sentsorea izanik (ikusIV.g1. atala), fiducial return parametroari 0 balioa esleitzen ba-zaio, fiduzialak ez du mapa detektatuko.

• gripper return: aurrekoaren moduan, gripper return parametro-ak PSri adierazten dio nola erreakzionatu behar duen sentsoreak (kasuhonetan, matxarda) ereduaren aurrean. Horrela, bada, 0 balioa esleituzgero, matxardak ez du eredua harrapatzerik izango.

map.inc erabilitzeko nahikoa da honako direktiba erabiltzea gure .worldfitxategian:

include "map.inc"

map.inc eta zure .world fitxategia karpeta berean egon behar dira au-rreko include aginduak funtzionatuko badu. Horrela ez bada, map.incfitxategia kokatuta dagoeneko bide osoa adierazi beharko da, komatxoen ar-tean.

Prest gaude, bada, simulazioan erabiliko dugun ingurumenaren mapareneredua osatzeko. Adibidez,

floorplan

(

bitmap "kuku.png"

size [16 8 0.8]

)

Page 13: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 515 — #511✐

Player/Stage robot-zerbitzari eta -simulagailua 515

floorplan eredua erabili dugu, bi parametrorekin. PSri esaten ari ga-tzaizkio aldez aurretik map.inc fitxategian definitutako floorplan ere-dua erabiliko dugula, aipatutako parametro sortaren balio lehenetsiekin, eta,gainera, floorplan ereduari beste bi parametro gehitzen dizkiogu:

• bitmap: bit-mapa baten fitxategiari eginiko erreferentzia da. bmp,jpg, gif edo png formatuak onartzen dira. Irudiaren eskualde beltzekingurumenaren geometria definitzen dute, gainerakoa, zonalde libreaizango da. Kontuz, lehen, floorplan ereduaren parametroen artean

color "gray30"

jarri dugu. Horrek ez du eragiten ingurumenaren geometriaren inter-pretazioa, bistaraketa baizik. PSk zuri-beltzeko irudia behar du ozto-poak eta espazio librea bereizteko, simulazioan ingurumena bistaratze-ko erabiliko den kolore grisa bada ere.

• size: simulatuko den ingurumenaren tamaina adierazten du, metrotan.3 osagaiko bektorea eskatzen du parametro honek, x, y eta z balioakadierazteko. Adibidean, 16×8 m tamainako ingurumena da eta, altue-ra, berriz, 0,8 metrokoa (ikus IV3. irudia).

IV3. irudia. Kuku.png irudia mundu gisa bistaratuta. Tamaina: 16×8×0, 8.

IV.f2. Leihoa

Stage-k simulazioa leiho batean erakutsiko du. Leiho horrek menu-barra batdu goikaldean, simulatzen den ingurunea erakusteko gunea eta egoera-barrabat ere behealdean. Leiho horretan agerian geratzen den ingurune zatiamugatuta dagoenez, handitu/txikitu daiteke ikuspegia sagua erabiliz. Eginproba eta mugitu gurpila kurtsorea leihoaren gainean dagoela, edo arrastatukurtsorea ezker zein eskuin botoiak sakatuta dauzkazula.

Page 14: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 516 — #512✐

516 Robot mugikorrak. Oinarriak

.world fitxategian leihoari buruzko xehetasunik jarri gabe ere, PSk au-tomatikoki leiho bat irekitzen du simulazioarentzat. Halere, batzuetan ko-menigarria izaten da leihoari buruzko informazioa finkatzea. Sintaxia:

window

(

#parametroak

)

Leihoa aldez aurretik definitutako eredua da eta, beste ereduek bezala,parametro asko dauzka. Inportanteenak:

• size: leihoaren tamaina pixeletan. Zabalera eta altuera, biak emanbehar dira, honela:

size [zabalera altuera]

• scale: simulatutako ingurumenaren zenbat metro dagozkion pixel ba-koitzari. Zenbat eta handiagoa izan, orduan eta txikiagoa da simula-zioa. Balio egokiena leihoarentamaina

munduarentamainada, behera biribilduta, simulazioa

leihoa baino zerbait txikiagoa izan dadin.

IV.f3. Oinarrizko .world fitxategi bat

.world fitxategietan agertu behar diren oinarrizko elementuak azaldu di-tugu iada: ereduak eta leihoa. Badira beste zenbait parametro, ez eredueneta ez leihoaren deskripzioei ez dagozkienak, eta hautazkoak direnak. Stage-ren on lineko eskuliburuan azter ditzakezu. Guk nahikoa daukagu horiekinoinarrizko .world fitxategi bat idazteko:

include "map.inc"

window

(

# leihoa konfiguratu

size [700 700]

scale 41

)

#kargatu ingurumenaren bit-mapa

floorplan

(

bitmap "cave.png"

size [15 15 1.5]

)

Fitxategi hau hutsik.world izenarekin gordeko dugu, eta osatzen joan-go gara elementu desberdinak deskribatu ahala, bertan txertatuz.

Page 15: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 517 — #513✐

Player/Stage robot-zerbitzari eta -simulagailua 517

IV.g Robotaren definizioa

Arestian azaldutakoak baino zerbait konplexuagoa den eredua da robota PSn.Sentsore eta gailu desberdinak definitzeko ereduak eskaintzen ditu PSk.

IV.g1. Sentsoreak eta gailuak

Robota eraikitzeko aurredefinituta dauden ereduak, sentsore eta eragileak de-finitzeko erabiltzen dira. Eredu hauek parametro batzuk dauzkate, eta hauenbitartez definitzen da zein sentsoreren bidez detekta daitezkeen ereduak, zeinsentsorerentzat diren ikusgai ereduak (lehenago aipatutako xxx return ba-lioak). Aurredefinitutako eredu hauek simulazioaren eta Player zerbitzaria-ren arteko interfaze moduan eragiten dute. Zure robotak hauetako sentsorebat badu, eredu egokia erabili beharko duzu sentsorea deskribatzeko, bestelazerbitzariak eta simulazioak ezingo diote elkarri daturik pasatu. Player -en in-terfazeen zerrenda luzea da (webguneko eskuliburuan begira dezakezu), bainahonakoak dira Stage-k onartzen dituenak:

camera. Eredu honek kamera eransten dio robotaren ereduari, eta zurebezero-kodeak simulatutako kamera horrekin eragin ahal izango du. Honakoparametroak onartzen ditu:

• resolution [x y]: kamerak jasoko duen irudiaren bereizmena, pixele-tan.

• range [x y]: kamerak atzitu ditzakeen distantzia minimo eta maxi-moak.

• fov <float>: kameraren atzipen-angelua (gradutan).

• pantilt [pan tilt]: kamera mugitu daitekeen angelu horizontalaren(pan) eta bertikalaren (tilt) balioak (gradutan). Adibidez, pantilt[90 20] jarriz gero, kamerak ahalmena izango du 45◦ ezker-eskuineramugitzeko, eta 10◦ egiteko gora eta behera.

blobfinder. Kamera batetik jasotako irudian kolorea identifikatzeko soft-warea simulatzen du, hau da, kolore bereko eskualde jarraituak identifikatzenditu. Blobfinder-a erabiltzeko ez da beharrezkoa kameraren eredua gehi-tzea, bere kabuz funtzionatuko du. Blobfinder-ak eredu bat detektatzeko,eredu horrek blobfinder return parametroa definituta eta 1 balioa es-leituta izan behar du. Blobfinder-aren parametro garrantzitsuenak hauekdira:

• colors count <osokoa>: identifikatuko dituen koloreen kopurura.

Page 16: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 518 — #514✐

518 Robot mugikorrak. Oinarriak

• colors [ ]: detektatu behar dituen koloreen zerrenda8. Adibidez,

colors ["black" "blue" "cyan" ]

• image [x y]: kameraren irudiaren tamaina, pixeletan.

• range <float>: atzipen-distantzia, metrotan.

• fov <float>: atzipen-angelua (radianetan).

fiducial. Fiduzial bat irudi baten puntu finkoa da. Fiduzial-sentsoreak, be-raz, irudi batean puntu finkoak lokalizatzen dituen softwarea simulatzen du.fiducial return parametroa 1 balioarekin esleituta daukaten simulaziokoelementuak detektatuko ditu. Stage-k mota desberdineko fiduzialak defini-tzeko aukera ematen du fiducial key parametroaren bitartez. Elementudesberdinei gako desberdina esleitzen bazaie, fiduzial-sentsore bakoitzak gakojakin bat identifikatu ahal izango du. Parametro garrantzitsuenak:

• range min <float>: atzipen minimoa, metrotan.

• range max <float>: atzipen maximoa, metrotan.

• fov <float>: fiduzialaren atzipen-angelua, radianetan.

sensor. Oztopoak detektatzeko edozein sentsore simulatzen du honek9, la-serra, sonar transduktore bat edo edo infragorri bat, adibidez. Parametroak:

• size [x y z]: sentsorearen tamaina, metrotan.

• range [min max]: sentsorearen atzipen minimoa eta maximoa defini-tzen ditu.

• fov <float>: atzipen-angelua (gradutan).

• samples <osokoa>: atzipen-angeluan egingo den laginaren tamaina.

• color rgba [r g b a]: sentsorearen irakurketa bistaratzeko oinarrizkokoloreen proportzioak.

8Koloreen zerrenda Linux sistema eragileak dakarren rgb.txt fitxategian dago, norma-lean /usr/share/X11/rgb.txt

9Stage 4-n bakarrik.

Page 17: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 519 — #515✐

Player/Stage robot-zerbitzari eta -simulagailua 519

ranger. Distantziak neurtzeko sentsore anitzeko gailuak definitzeko era-biltzen da, adibidez, sensor ereduaren bitartez definitutako sonar bakunengerrikoa, IV.g2. atalean ikusiko dugun moduan. Parametroak desberdinakdira Stage-ren 3 eta 4 bertsioetan.

• Stage 3-n:

– scount <osokoa>: sentsore kopurua ranger ereduan.

– spose[indizea] [x y yaw]: sentsoreen kokapena robotean.

– ssize [x y]: sentsoreen tamaina.

– sview [min max fov]: sentsoreen atzipen-eremua (metrotan) etaatzipen-angelua (gradutan).

• Stage 4-n (parametro gehienak, ezagunak):

– color: eredua bistaratzeko kolorearen izena, rgb.txt fitxategia-ren arabera.

– size [x y z]: tamaina, metrotan.

– pose [x y z a]: posizioa ereduan.

– alwayson <osokoa>: 1 balioa ematen badiogu, beti egongo daaktibatuta, bezeroren baten harpidetza itxaron gabe.

Eredu bat sentsore honen bitartez antzemateko, ereduaren ranger re-

turn parametroari 1 balioa esleitu behar zaio.

laser. Eredu hau10 desagertzear dago eta bateragarritasun-arazoei aurreegiteko soilik mantentzen da. Distantziak neurtzeko sentsore guztiak rangerinterfazearen bitartez definitu eta atzitzeko ahaleginetan daude PSren gara-tzaileak. Halere, hemen definituko dugu eskuliburua bi bertsioetarako ba-liozkoa izan dadin.

Laser sentsorea ranger berezia da, distantziak neurtzen dituen eta ba-lio bakarra ez, baizik eta ekorketa egiten duen sentsorea da, eta atzipen-eremuzabala duena gainera. Laserrak eredu bat detektatzeko, ereduak laser return

parametroa aktibatuta eduki behar du. Parametro erabilgarrienak:

• samples <osokoa>: ekorketak itzuliko duen balio kopurua. Laserra,robotaren zentroarekiko (x, y) koordenatu bera duten eta yaw angeludesberdina duten ranger sentsore multzoa bezala uler daiteke. Adi-bidez, atzipen-angelua 180◦-koa bada, eta samples parametroak 180balioa hartzen badu, sentsoreek 1◦-ko diferentzia dute orientazioan.

10Stage 3-n bakarrik.

Page 18: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 520 — #516✐

520 Robot mugikorrak. Oinarriak

• range max <float>: neurtuko duen distantzia handiena, metrotan.

• fov <float>: atzipen-angelua, radianetan.

gripper. Eredu honek Pioneer motako robotetan muntatzen den matxardasimulatzen du. Parametroak:

• size [x y z]: matxardaren x eta y dimentsioak.

• pose [x y z yaw]: matxardaren kokapena robotean.

position. Eredu honek robotaren mugimendu-sistema simulatzen du, robo-taren desplazamendua neurtzeko sistema eta guzti, gurpilek ematen dituztenbira kopuruetan oinarrituta. Eredu garrantzitsuena da hau, robota inguru-menean integratzeko aukera ematen baitu, obstacle return parametroaaktibatuta duten elementuekin tupust egiteko aukera emanez. position2dinterfazea erabiltzen du honek. Parametro inportanteenak:

• drive: mugimendu-sistemaren ezaugarriak adierazten ditu. Hiru ba-lio har ditzake: diff, diferentzialarentzat; car, ackerman mugimendu-sistemarentzat; eta omni, mugimendu-sistema omnidirekzionalarentzat.

• localization: parametro honen bitartez ereduari esaten zaio nola kal-kulatu behar duen odometria; omni balioa esleitzen bazaio, despla-zamendua neurtuko da robotaren mugimenduaren informazioa erabilizeta, gps esleitzen bazaio, berriz, robotak ez du ziurgabetasunik edukikoposizioan, simulazioak dirauen bitartean.

• odom error [x y angelua]: robotak egingo duen errorearen propor-tzioa odometriako kalkuluetan.

IV.g2. Robot baten adibidea

Atal honetan robot bat definituko dugu adibide gisa. Lehenengo, robotarenpropietate fisikoak adieraziko ditugu, hala nola tamaina eta forma. Ondoren,sentsoreak gehituko dizkiogu ingurumenarekin elkarreragiteko.

Robotaren gorputza. Demagun zaborra jasotzeko eredua nahi dugula;Bigbot izena jarriko diogu. Definitu beharreko lehenengo gauza robotarenoinarrizko itxura, forma da, eta, horretarako, robotaren dimentsioak ezagutubehar ditugu, metrotan. IV4. irudiak erakusten ditu Bigbot osatzen dutenhiru oinarrizko poligonoak, eta hauen koordenatuak.block ereduaren parametroak erabil ditzakegu gure eredua eraikitzeko, ho-nela:

Page 19: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 521 — #517✐

Player/Stage robot-zerbitzari eta -simulagailua 521

0.5

1.0

1.5

0.5 1.0 1.5

p0

p1

p2

0.00.0

(0,0)

(0,1) (0.8,1)

(1,0.8)

(1,0.6)

(1,0.4)

(1,0.2)

(1.3,0.8)

(1.3,0.6)

(1.3,0.4)

(1.3,0.2)

(0.8,0)

IV4. irudia. Bigbot robota, hiru poligonoz osatuta.

define bigbot position

(

#tamaina: zabalera (x, y) eta altuera (z)

size [1.3 1 0.5]

#Poligono nagusia (P0): gorputzaren forma

block

(

points 6

point[5] [0 0]

point[4] [0 1]

point[3] [0.8 1]

point[2] [1 0.8]

point[1] [1 0.2]

point[0] [0.8 0]

z [0 1]

)

#Lehenengo hatza (P1)

block

(

points 4

point[3] [1 0.8]

point[2] [1.3 0.8]

point[1] [1.3 0.6]

point[0] [1 0.6]

z [0 0.5]

)

Page 20: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 522 — #518✐

522 Robot mugikorrak. Oinarriak

#Bigarren hatza (P2)

block

(

points 4

point[3] [1 0.4]

point[2] [1.3 0.4]

point[1] [1.3 0.2]

point[0] [1 0.2]

z [0 0.5]

)

Kode honen lehenengo lerroan bigbot izeneko position motako ereduadefinitzen da. Ondorengo block gako-hitzak position ereduak block

eredu bat duela adierazten du; points 6 lerroak block ereduak sei ertzdituela adierazten du eta, point[indizea] [x y] agindu bakoitzak, po-ligonoa osatzen duten ertz bakoitzaren koordenatuak ematen ditu. Inpor-tantea da block-a definitzean erloju-orratzen noranzkoaren kontra zenbaki-tzea ertzak, PSk ondo bistaratu ditzan. Azkenik, amaierako z [z nondik

z nora] aginduak robotaren altuera zehazten du. Adibidean jarritako z

[0 1] balioak robotaren gorputza lurraren gainean kokatzen du, eta metrobateko altuera finkatzen du. Gorputza definitzen den modu berean definitzendira ere matxarda osatzen duten hatzak.

Robotaren tamaina size [x y z] parametroaren bidez definitzen da.Horrek, definitutako block-ak robotaren tamainara eskalatzea eragingo du,deskribatutako poligonoa x × y tamaina eta z altuerako kutxa izan dadin.size parametroaren balio lehenetsia 1 m × 1 m × 1 m da. Gure Bigbot-ahandiagoa delako, size parametroari balio egokiak esleitu dizkiogu PSk ro-bot txikiagoa erakuts ez zezan. size parametroa oso baliozkoa da robottxikiak definitu nahi direnean. Nabarmendu behar da ere ez daukala garran-tzirik non kokatzen den poligonoa; (0, 0) jatorrian izan ordez beste edononizan daiteke, adibidez (−1000, 12345). block ereduarekin robotaren formadefinitzen da eta ez robotaren tamaina, ez eta ere kokapena ingurumenean.

IV4. irudian robota eskuinera begira dago. PSko simulazioetan, edozeinelementu kokatzean, modu lehenetsian, simulazioko leihoaren eskuinalderabegira azalduko da. Horregatik bistaratzen da mapa eskuinera begira IV.f1.atalean deskribatutako gui nose parametroa aktibatzean. Elementu batenjatorrizko orientazioa aldatu nahi izanez gero (yaw angelua), sistema karte-siarretan egiten den moduan, angelua x ardatzarekiko eman behar da, etayaw lehenetsia 0◦ dela hartu behar da kontuan. IV5. irudiak erakusten dituyaw desberdinetara orientatutako robot-ereduak.

Modu lehenetsian, robotaren errotazio-zentroa bere zentro geometrikoandago, size parametroari emandako balioen arabera kalkulatuta. Eraikitzen

Page 21: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 523 — #519✐

Player/Stage robot-zerbitzari eta -simulagailua 523

IV5. irudia. Yaw desberdinetara orientatutako robotak.

ari garen adibidean, tamaina 1, 3 m×1 m×1 m. PSk Bigbot-en (0.65, 0.5, 0.5)puntuan kokatuko du zentroa eta, beraz, zentroa hatzetatik gertuegi egon-go da. Errotazio-zentroa desplazatzeko origin [x desp y desp z desp

yaw desp] komandoa erabili behar da. Adibidez, poligono nagusiaren zen-troan kokatzeko, hau da, (0.5, 0.5, 0.5) puntuan, origin [0.15 0 0 0]

erabiliko dugu, honela:

define bigbot position

(

#tamaina

size [1.3 1 0.5]

#errotazio-zentroarekiko desplazamendua

origin [0.15 0 0 0]

#bigbot-en forma

block

(

....

)

Amaitzeko, Bigbot-en mugimendu-sistema zehaztu behar dugu, lehenagodeskribatu dugun moduan:

define bigbot position

Page 22: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 524 — #520✐

524 Robot mugikorrak. Oinarriak

(

#tamaina

size [1.3 1 0.5]

#errotazio-zentroarekiko desplazamendua

origin [0.15 0 0 0]

#bigbot-en forma

block

(

....

)

block

(

....

)

block

(

....

)

drive "diff"

)

IV.g3. Robotaren sentsoreak

Bigbot-aren gorputza badugu, goazen bada sentsoreak kokatzera. Sonarraketa koloreak detektatuko dituen blobfinder kamera bat jarriko diogu. Erahorretan, paretak antzeman eta hauts partikula edo zabor gisa interpretatukodituen kolorezko elementuak identifikatu ahal izango ditu. Laser bat eremuntatuko dugu bi hatzen artean, esku artean zerbait daukanean nabaritudezan, nahiz eta ez diogun matxardari hatzak ireki eta ixteko gaitasunikesleituko.

Jarraitu aurretik, aipatu behar da ultrasoinu eta laserraren definizioe-tan ematen da Stage-ren azken bi bertsioetan aldaketa garrantzitsuak. Bibertsioetarako definizioa ematen saiatuko gara.

Has gaitezen sonarrekin. Lau sonar jarriko dizkiogu Bigbot-ari, IV6. iru-dian erakusten den lekuetan. Koordenatu absolutuak ditugu, baina robota-ren zentroarekiko koordenatuak behar ditugu. Bigbot robotaren gorputza de-finitu dugunean, koordenatu-sistemaren edozein kokaleku aukeratu ahal izandugu, eta poligonoak edozein distantziatara deklaratzea izan dugu, betieresize parametroaren bidez ereduaren tamaina egokituz gero. Sentsoreekin,ordea, ez da gauza bera gertatzen. Robotaren tamainaren eta jatorriaren ara-bera kokatu behar dira. Distantziak metrotan ondo kalkulatu ahal izateko,lagungarri da sentsoreen kokapena robotean adieraziko duen eta sentsoreendistantzia jatorriarekiko finkatuko duen irudia egitea. Adibidean, errotazio-

Page 23: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 525 — #521✐

Player/Stage robot-zerbitzari eta -simulagailua 525

zentroa (0.5, 0.5, 0.5) puntura desplazatu dugu eta, beraz, jatorri horrekikoadierazi beharko da sonarren kokapena gerrikoan. Erraz kalkulatzen dira:

Ezker alboa: [0.30.535]Ezker hatza: [0.80.20]Eskuin hatza: [0.8− 0.20]Eskuin alboa: [0.3 − 0.5− 35]

���

���

����

���

���

��������1.0

0.5 1.0 1.50.00.0

0.8

0.2

(1.3,0.3)

(1.3,0.8)

(0.8,1.0)

(0.8,0)

IV6. irudia. Sonarren koordenatuak.

Sentsoreen koordenatuak robotaren jatorriarekiko baditugu. Gerrikoarenereduarekin has gaitezke.

• Stage 3.2.2. Oraingoan, scount eta spose parametroak erabilikoditugu (ikus IV.g1. atalean ranger sentsoreari dagokion paragrafoa).spose parametroaren balioak [x y yaw] dira, yaw angelua x ardatza-rekiko neurtuta, gradutan.

define bigbot_sonarrak ranger

(

#sentsore kopurua

scount 4

#transduktore bakoitzaren posizioa

spose[2][0.3 0.5 30] #ezkerra

spose[0][0.8 0.2 0] #ezker hatza

spose[1][0.8 -0.2 0] #eskuin hatza

spose[3][0.3 -0.5 -30] #eskuina

)

Page 24: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 526 — #522✐

526 Robot mugikorrak. Oinarriak

Egin dugu gerrikoa definitzeko lan zailena. Gainerakoa, errazagoa da.Sonarren tamaina, atzipena eta atzipen-angelua definitzeko, dauzkagungailu fisikoen espezifikazio-orrietara joko dugu.

define bigbot_sonarrak ranger

(

#sentsore kopurua

scount 4

#transduktore bakoitzaren posizioa

spose[0][0.8 0.2 0] #ezker hatza

spose[1][0.8 -0.2 0] #eskuin hatza

spose[2][0.3 0.5 30] #ezkerra

spose[3][0.3 -0.5 -30] #eskuina

#Definitu transduktore bakoitzaren atzipen-eremua

# [minimoa maximoa angelua]

sview [0.3 2.0 10]

#definitu transduktore bakoitaren tamaina

# [xsize ysize] metrotan

ssize [0.01 0.05]

)

• Stage 4.0.1. Sonar gerrikoa osatuko duten transduktoreentzako ere-du bat definitu behar dugu lehenengo. Horretarako, sensor ereduaerabiliko dugu:

define transduktorea sensor

(

#Transduktore bakoitzaren tamaina

size [0.01 0.05 0.01]

#Transduktorearen atzipen-eremua

range [0.3 2.0]

#Atzipen-angelua

fov 10.0

#Atzipen-angeluan egingo den laginaren tamaina

samples 1

)

Page 25: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 527 — #523✐

Player/Stage robot-zerbitzari eta -simulagailua 527

Sonarren tamaina, atzipena eta atzipen-angelua definitzeko, dauzka-gun gailu fisikoen espezifikazio-orrietara joko dugu. Adibideko ultra-soinu transduktore baten atzipena 30 cm eta 2 m artekoa da, 10◦-koatzipen-angelua du, eta irakurketa bakuna ematen du aldi bakoitzean,ultrasoinuek egin ohi duten moduan.

define bigbot_sonarrak ranger

(

#Gerrikoa osatzen duten lau transduktoreak

# Ezker alboa

transduktorea ( pose [ 0.3 0.5 0 30] )

# Ezker hatza

transduktorea ( pose [ 0.8 0.2 0 0] )

# Eskuin hatza

transduktorea ( pose [ 0.8 -0.2 0 0] )

# Eskuin alboa

transduktorea ( pose [ 0.3 -0.5 0 -30] )

)

Atal horren bidez PSri esaten zaio sonar sentsore multzoa definitzendela, bigbot sonarrak izenekoa, eta ranger izeneko eredua erabilikodugu PSri esateko sonar gerrikoa distantziak neurtzen dituen gailuadela.

IV7. irudiak erakusten du sonarren irakurketak nola bistaratuko diren.Hurrengo urratsa, blobfinderra eranstea izango da:

define bigbot_begiak blobfinder

(

#parametroak

)

Bigbot zabor-biltzailea da. Bildu behar duen zaborraren kolorea zehaztubeharko dugu. Demagun Bigbot laranja-zuku fabrika batean aritu behar delaeta lurrean sakabanatuta topatzen dituen laranjak zein zuku-kartoiak jasokodituela. Laranjak laranja-kolorekoak dira eta, zuku-kartoiak, berriz, urdinilun moduan definituko ditugu. Blobfinder-a kolore horiek identifikatzekokonfiguratuko dugu, honela:

define bigbot_begiak blobfinder

(

#Berezi behar duen kolore kopurua

colors_count 2

Page 26: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 528 — #524✐

528 Robot mugikorrak. Oinarriak

IV7. irudia. Bigbot-en sonarren kokapena.

#Identifikatu behar dituen koloreak

colors ["orange" "DarkBlue"]

)

Jarraian, kameraren propietateak zehaztu behar dira, hauek ere gailuarenespezifikazio-orrian begiratu beharrekoak:

define bigbot_begiak blobfinder

(

#Berezi behar duen kolore kopurua

colors_count 2

#Identifikatu behar dituen koloreak

colors ["orange" "DarkBlue"]

#kameraren parametroak

image [160 120]

range 5.0

fov 1.047196667 #60 gradu = pi/3 radian

)

Azkeneko sentsorea falta dugu, laserra, zaborrik heldu den antzematekoerabiliko dena.

Page 27: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 529 — #525✐

Player/Stage robot-zerbitzari eta -simulagailua 529

Stage 3.2.2 bertsioan laser interfazea erabili behar da laser sentsore batdefinitzeko. Berrian, berriz, zuzenean ranger motako gailuak dira laserrak.Ikus ditzagun bi kasuak:

• Stage 3.2.2.

define bigbot_laserra laser

(

#atzipena, hatzen arteko distantzia da, metrotan

range_max 0.2

#atzipen-angelu txikia nahikoa da

fov 20

#Ekorketaren balio kopurua

samples 180

pose[0.625 0.2 -0.975 270] #

size [0.025 0.025 0.025]

)

• Stage 4.0.1. Laserrak ranger motako gailuak direnez, ultrasoinuenereduak definitzeko erabilitako arau berdinak erabiliko ditugu laserra-ren deskribapena finkatzeko.

define laser_sentsorea sensor

(

# Atzipen-eremua

range [0 0.2]

# Atzipen-angelua

fov 20

# Laginaren tamaina

samples 180

# Sentsorearen posizioa

pose [0 0 0 0]

# Irakurketan bistaratzeko kolorea

color_rgba [0 0 1 0.15]

)

Laserraren atzipen-distantzia moduan hatzen arteko distantzia definitudugu, atzipen-angelu moduan 20◦ aukeratu dugu, ausaz. Eta 180 balioitzuliko ditu egiten duen ekorketa bakoitzeko.

Page 28: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 530 — #526✐

530 Robot mugikorrak. Oinarriak

define laser_gailua ranger

(

color "blue"

size [0.025 0.025 0.1]

pose [0.65 0.1 -0.475 270]

alwayson 1

block

(

points 4

point[0] [0 0]

point[1] [0 1]

point[2] [1 1]

point[3] [1 0]

z [0 1]

)

Laserraren tamaina 2, 5 cm-ko kuboaren moduan definitu dugu, hatzenarteko tartea oztopatu ez dezan. Bestetik, kokapena transduktoreenpose-ak kalkulatutako modu berean kalkulatu dugu, laserraren posi-zioa robotaren jatorriarekiko neurtuz. Kontuz, pose parametroarenz balioa robotaren goiko mugarekiko eman behar da. Adibidean, ro-botaren altuera metro erdikoa definitu dugu; laserra −0, 475 altuerankokatzen dugu, lurraren parean egoteko. Laserraren yaw angelua 270◦

gradutan jarri dugu, hatzen arteko tartea erakuts dezan.

Jarraian, laserraren gorputza edo egitura definitu dugu, block eredua-ren bitartez, robota osatzen duten poligonoekin egin dugun moduan.alwayson parametroa aktibatu dugu laserraren irakurketak leihoanbistaratzeko (View menuko Data kontrol-laukia aktibatuta egonez ge-ro).

Azkenik, sentsorea eta oinarria bilduko dituen eredua definitu behardugu, honela:

define bigbot_laserra laser_gailua (laser_sentsorea())

Laserraren kokapena IV8. irudian erakusten da.Badugu robotaren gorputza baita sentsoreen ereduak ere. Guztia bildu

behar dugu eta ingurumenean kokatu. Sentsoreak robotean kokatzeko Bigbot-en position eredura itzuli behar gara:

define bigbot position

(

#tamaina

size [1.3 1]

Page 29: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 531 — #527✐

Player/Stage robot-zerbitzari eta -simulagailua 531

IV8. irudia. Beltzez, Bigbot-en laserraren kokapena.

#errotazio-zentroarekiko desplazamentua

origin [0.15 0 0]

#bigbot-en forma

block

(

....

)

block

(

....

)

block

(

....

)

drive "diff"

#sentsoreak bigbot-en

bigbot_sonarrak()

bigbot_begiak()

bigbot_laserra()

)

Page 30: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 532 — #528✐

532 Robot mugikorrak. Oinarriak

Hiru lerro gehitu ditugu, bakoitza definitu berri dugun sentsore-eredubatentzat. Honekin osatu dugu robotaren definizioa. Komeni da .inc lu-zapeneko fitxategi batean gordetzea beste simulazio batzuetan erabili ahalizateko, adibidez, bigbot.inc fitxategian.

Sortu dugu Bigbot robota lehen definitu dugun ingurumen hutsean koka-tzeko, hutsik.world fitxategian gehitu behar da robota:

include "map.inc"

include "bigbot.inc"

size [15 15]

window

(

# leihoa konfiguratu

size [700 700]

scale 41

)

#kargatu ingurumenaren bitmapa

floorplan

(

bitmap "cave.png"

size [15 15 1.5]

)

bigbot

(

name "bot"

pose [-5 -6 0.45]

color "green"

)

Eredu baten definizioa da bigbot, baina define gako-hitza erantsi ezdugunez, eredu horren instantzia egiten ari gara, bot izenekoa. Objektuetaraorientatutako programazio-lengoaien analogia erabiliz, bigbot klasea da etabot, berriz, objektua.

pose [x y yaw] parametroak beste ereduen pose [x y yaw] pa-rametroak bezala funtzionatzen du, desberdintasun batekin: koordenatueksimulazioaren zentroa erabiltzen dute erreferentzia gisa, eta, kasu honetan,pose-ak bot-en hasierako posizioa eta orientazioa finkatzen ditu, ez sentsorebatena. Amaitzeko, bot-en kolorea zehaztu dugu. Ezer jartzen ez badugu,gorria azalduko da. Bi parametro gehigarri hauek, pose eta color, bigbot-en ereduaren definizioan jarri zitezkeen, baina, era honetara, bigbot erako

Page 31: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 533 — #529✐

Player/Stage robot-zerbitzari eta -simulagailua 533

roboten kolorea eta hasierako posizioa alda ditzakegu. Hau da, tamaina, for-ma eta sentsore berdinak dituzten hamaika robot deklaratu daitezke, PSkkolore desberdinekin eta maparen puntu desberdinetan bistaratuko direlarik(gogoratu IV5. irudia!).

IV9. irudiak erakusten du hutsik.world fitxategiari dagokion leihoa.

IV9. irudia. Bigbot robota ingurumen hutsean.

IV.h Beste elementu batzuk nola eraiki

Bigbot robota laranja-zuku fabrika batean aritzen da eta lurrean sakaba-natuta topatzen dituen laranjak zein zuku-kartoiak jasotzea da haren lana.Oraindik, laranjak eta zuku-kartoiak definitu eta kokatu behar ditugu ingu-rumenean bot robotak horiekin elkarreragin dezan.

Lehenengo, laranjen forma definituko dugu. block parametroa erabildaiteke horretarako, eta, bloke txiki desberdinen bitartez, zirkuluen formaragerturatuko diren ereduak sortu. Beste aukera, bitmap komandoa erabiltzeada. Horrek, irudi bat jaso eta elkarren artean konektatuta dauden bloke mul-tzo batean deskonposatzen du, irudiak duen forma bereko eredua sortzeko.IV10. irudiak erakusten du honen adibidea.

Demagun honako kodea erabiltzen dugula:

define laranja model

(

Page 32: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 534 — #530✐

534 Robot mugikorrak. Oinarriak

IV10. irudia. Bit-mapatik eredura.

bitmap "zirkulua.png"

size [0.15 0.15 0.15]

color "orange"

)

Honen bidez, laranja izeneko eredua deskribatzen ari gara, bit-mapabat erabiltzen duena forma zehazteko, laranja-koloreko eta 15 cm× 15 cm×

15 cm tamainakoa.Zuku-kartoiak definitzea ere erraza da:

define kartoia model

(

#kartoiak laukizuzenak dira

#laukia definituko dugu eta, ondoren, size erabili

block

(

points 4

point[0] [1 0]

point[1] [1 1]

point[2] [0 1]

point[3] [0 0]

z [0 1]

)

#litro bateko kartoia 20cmx10cmx5cm

Page 33: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 535 — #531✐

Player/Stage robot-zerbitzari eta -simulagailua 535

size [0.1 0.2 0.2]

color "DarkBlue"

)

block komandoa erabili dugu kartoiek oso forma erregularra dutelako.Errazagoa da elementu erregularrak definitzea, bit-mapa bat sortu eta berauerabiltzea baino.

Definitu ditugu laranja eta zuku-kartoientzako ereduak. Ingurumenean,zenbait laranja eta kartoi kokatu behar ditugu simulazio-garaian bistaratzeko.Bot robotarekin egin dugun modu berean egiten da hori:

laranja

(

name "laranja1"

pose [-2 -5 0 0]

)

kartoia

(

name "kartoia1"

pose [-3 -5 0 0]

)

Laranja eta kartoiaren ereduak sortu eta eredu horien instantzia banasortu ditugu, laranja1 eta kartoia1 izenekoak, hurrenez hurren. Kolorea ere-duaren definizioan sartu dugu eta, ondorioz, ez dugu instantzia bakoitzarenazehaztu behar. Ez zaigu komeni bestelakorik, bigbot robotak laranja-kolorekolaranjak eta kolore urdin iluneko zuku-kartoiak identifikatuko baditu blob-

finder kameraren bidez. Noski, interesgarriagoa da laranja eta kartoi-zukugehiago egotea lurrean sakabanatuta. Horretarako:

laranja(name "laranja1" pose [-1 -5 0 0])

laranja(name "laranja2" pose [-2 -5 0 0])

laranja(name "laranja3" pose [-3 -5 0 0])

laranja(name "laranja4" pose [-4 -5 0 0])

kartoia(name "kartoia1" pose [-2 -4 0 0])

kartoia(name "kartoia2" pose [-2 -3 0 0])

kartoia(name "kartoia3" pose [-2 -2 0 0])

kartoia(name "kartoia4" pose [-2 -1 0 0])

Orain arte definitutako ereduetan, parametro bakoitza errenkada bateanjarri dugu. Programatzailearentzat irakurgarriagoa egiten du kodea, bainaez da beharrezkoa. Parametro guztiak lerro berean jar daitezke, goiko adibi-deak erakusten duen moduan. IV11. irudiak erakusten du simulazioan PSkerakusten digun leihoa kode guztia bilduta.

Page 34: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 536 — #532✐

536 Robot mugikorrak. Oinarriak

IV11. irudia. Bigbot robota eta laranjaz eta zuku-kartoiez hornitutako ingu-rumena.

IV.i .cfg luzapeneko fitxategiak

.cfg fitxategiak driver gako-hitzarekin hasten diren atalez daude osatuta, etaatal horiek honako sarrerak dituzte:

• name: derrigorrezko sarrera da hau, zeinak driver -aren izena adieraz-ten duen (karaktere-katea).

• plugin: liburutegiaren izena adieraziko duen karaktere-katea. Hautaz-ko eremua da.

• provides: driver -ak eskaintzen dituen interfazeak (karaktere-kateensegida) jarriko dira hemen eta derrigorrezko eremua da.

• requires: driver batzuek ez dute dependentziarik. Beste batzuek be-rriz, beste driver -en beharra dute funtzionatu ahal izateko. Eremuhonek driver -aren dependentziak adierazten ditu. Karaktere-kateen se-gidak dira.

• alwayson: 1 moduan definitzen bada, orduan, driver -a zerbitzaria bo-tatzean hasieratuko da, berarekin konektatu nahi duen bezerorik egonarte itxaron gabe.

Page 35: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 537 — #533✐

Player/Stage robot-zerbitzari eta -simulagailua 537

Karaktere-kate segida bakoitzak gailuaren helbidea adierazten du era ho-netara:

key:host:robot:interface:index

• key: mota bereko interfaze anitz onartzen dituzten driver -entzat dagodefinituta eremu hau, interfazeak gailu desberdinekin modu egokianmapeatzeko. Stage-rekin ez da beharrezkoa erabiltzea.

• host: gailua konektatuta dagoen ordenagailuaren helbidea. Gailuarobot bati konektatuta badago, robotaren IP helbidea izango da. Harenbalio lehenetsia localhost da, player zerbitzaria martxan dagoenordenagailuaren helbidea.

• robot: Player -ek datuak jasoko dituen TCP portuaren zenbakia. Por-tu lehenetsia 6665 da.

• interface: erabiliko den interfazearen izena.

• index: interfazearen indizea. Robotak mota bereko interfazeak baditu,hauek indizearen bitartez berezi behar dira.

Soilik interfazea eta indizea dira derrigorrezkoak. Gainerako eremuek baliolehenetsiak hartuko dituzte, besterik adierazten ez bada.

Demagun hurrengo adibidea:

driver

(

name "p2os"

provides ["odometry:::position2d:0"

"compass:::position2d:1"

"gyro:::position2d:2"]

)

driver

(

name "vfh"

provides ["position2d:1"]

requires ["position2d:0" "laser:0"]

)

Bertan, bi driver definitzen dira. Lehenengoak p2os du izena, eta Pioneer

motako robotek duten kontrolagailua da. position2d motako hiru interfazeeskaintzen ditu, horregatik key desberdina dute esleituta, eta, gainera, indi-ze desberdina ere, erabiltzailearen kontrol-programak jakin dezan zein atzitu

Page 36: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 538 — #534✐

538 Robot mugikorrak. Oinarriak

behar duen iparroratza (compass) kudeatzeko, zein giroskopoa (gyro) kudea-tzeko eta zein odometria (odometry) atzitzeko.

Bigarrenak vfh du izena eta driver birtuala da, ez du berez hardwarerikkudeatzen, nabigazioko algoritmo bat inplementatzen du. Horrek, laserraeta posizioaren informazioa behar ditu. Posizioaren informazioa odometriakosistematik eskuratuko du. Horregatik,

requires ["position2d:0" "laser:0"]

Bestetik, vfh algoritmoaren irteerek robotarentzako helburu-posizioak agin-tzen dituzte, berriro ere position2d interfaze baten bidez:

provides ["position2d:1"]

Beharrezkoak (required) diren driver -ak aldez aurretik adierazita egonbehar dira eta ez dira dependentzia zirkularrak onartzen. Horrez gain, driverbatek parametro multzoa izan dezake modu egokian konfiguratzeko. Adibi-dez,

driver

(

name "sicklms200"

provides [ "laser:0" ]

port "/dev/ttyUSB0"

resolution 50

serial_high_speed_mode 1

serial_high_speed_baudremap 230400

connect_rate [ 9600 500000 38400]

transfer_rate 38400

retry 2

alwayson 1

)

IV.i1. .cfg fitxategi baten adibidea

Definitu berri dugun Bigbot robotaren gailuak atzitzeko aukera emango digun.cfg fitxategia idatziko dugu.

Lehenengo urratsa, simulazioan arituko garela adierazi eta mundu fitxa-tegia zehaztea da, lehen aipatu bezala:

driver

(

name "stage"

plugin "stageplugin"

provides ["simulation:0"]

Page 37: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 539 — #535✐

Player/Stage robot-zerbitzari eta -simulagailua 539

worldfile "bigbot.world"

)

Ondoren, robotak dituen gailuetara atzitzeko interfazeen xehetasunak ja-rri behar ditugu. Bigbot-ek, mugimendu-sistemaz gain (position2d),ranger interfazearen bidez atzitzen diren ultrasoinu-gerrikoa eta laserra, etakolore jarraituko eskualdeak detektatuko dituen kamera atzitzeko blobfinderinterfazea behar ditu. Bi ranger dauzkagunez, indize desberdinak adierazibehar ditugu, biak desberdintzeko. 0 indizeduna ultrasoinuei dagokie beti,eta 1 indizeduna, berriz, laserrari. Beste interfazeetan edozein indize erabildaiteke, arruntena jarriko dugu: 0. Gauza bera gertatzen da portuarekin;gatazkarik ez daukagunez, gailu guztiei portu bera esleitzea daukagu, honela:

driver

(

name "stage"

provides ["6665:position2d:0" "6665:ranger:0"

"6665:ranger:1" "6665:blobfinder:0" ]

model "bot"

)

Laserra ranger motako interfazearen bidez atzitu badaiteke ere, aldake-ta berria da hau. Aurreko bertsioetan laser interfazea definituta zegoen.Stage-ren azken bertsioan oraindik zenbait gauza orraztu gabe daude etalaser interfazea mantentzen da beste zenbait driver -ekin bateragarritasunamantendu ahal izateko, baina honelako driver -a gehitu behar da:

driver

(

name "rangertolaser"

requires ["ranger:1"]

provides ["laser:0"]

)

Horrela gauzak, laserra bi modutara atzitu daiteke bezero-programetan:1 indizedun ranger interfazearen bitartez, edo 0 indizedun laser interfazearenbitartez.

IV.j Robota mugitzen

Robota mugitzeko bezero-programa idatzi behar da. Player -ek programazio-lengoaia desberdinak onartzen ditu bezero-programak idazteko. Guk C edoC++ gomendatzen ditugu, horiek baitira robotika-munduan gehien erabil-tzen direnak. Jarraian, C bezero-programa baten adibidea emango dugu.

Page 38: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 540 — #536✐

540 Robot mugikorrak. Oinarriak

IV.j1. libplayerc: C lengoaiako bezero-liburutegia

Bezero-programa C lengoaian idazteko libplayerc izeneko liburutegia erabili-ko dugu. Player -ek zenbait adibide ekartzen ditu examples/libplayerc

direktorioan. Aldez aurretik definitutako Bigbot robota eta hutsik.worldingurumena erabiliko ditugu eta robota noraezean mugitzen jarriko dugu,ahal duen neurrian, kokatu dizkiogun lau ultrasoinuen bidez oztopoak ekidi-nez.

Programaren hezurdura edo oinarrizko egitura honakoa da:

1. Behar diren goiburukoak gehitu:

#include <stdio.h>

#include <libplayerc/playerc.h>

2. Bezeroa eta erabiliko dituen interfazeak deklaratu. Kasu honetan, so-narren gerrikoa eta mugimendu-sistema baino ez ditugu erabiliko. Hirualdagai beharko ditugu, beraz:

playerc_client_t *bezeroa;

playerc_ranger_t *sonarra;

playerc_position2d_t *robota;

3. Bezero-objetua sortu eta zerbitzari egokiarekin konektatu (host-a, por-tua):

bezeroa = playerc_client_create(NULL,

"localhost", 6665);

if (playerc_client_connect(bezeroa) != 0)

{

fprintf(stderr, "Errorea: %s\n",

playerc_error_str());

return -1;

}

4. Simulatutako robotaren gailuekin aritzeko interfazeak sortu eta harpi-detza egin behar da, irakurri eta idazteko baimenekin.

// Mugimendu-sistemak position2d motako

// interfazea behar du

Page 39: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 541 — #537✐

Player/Stage robot-zerbitzari eta -simulagailua 541

robota = playerc_position2d_create(bezeroa, 0);

if (playerc_position2d_subscribe(robota,

PLAYERC_OPEN_MODE) != 0)

{

fprintf(stderr,

"Errorea: %s\n", playerc_error_str());

return -1;

}

// Sonarren gerrikoak ranger motako interfazea behar du

sonarra = playerc_ranger_create(bezeroa, 0);

if (playerc_sonar_subscribe(sonarra,

PLAYERC_OPEN_MODE) != 0)

{

fprintf(stderr,

"Errorea: %s\n", playerc_error_str());

return -1;

}

5. Begizta nagusia: komando egokiak exekutatu sentsoreen irakurketenarabera. Kasu honetan, ezker eta eskuin alboko sonarren irakurketakkonparatuko ditugu, eta abiadura angeluarraren zeinua finkatuko du-gu modu egokian. Era berean, bi hatzetan kokatutako transduktoreakerabiliko ditugu abiadura linealaren zeinua aukeratzeko. Biak ala biak,magnitudez, abiadura konstanteak izango dira. Kontuan izan, trans-duktoreen balioak irakurtzeko indizeek .inc fitxategian definitutakoordena berari jarraitzen diotela.

float aurre_batezb;

while (1)

{

playerc_client_read(bezeroa);

// Alboetako irakurketak konparatu

// abiadura angeluarra finkatzeko

if (sonarra->ranges[0] < sonarra->ranges[3])

w = -DTOR(40);

else

w = DTOR(40);

// Aurreko sonarren batezbestekoa kalkulatu

// abiadura lineala finkatzeko

aurre_batezb = 0.5 * (sonarra->ranges[1] +

Page 40: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 542 — #538✐

542 Robot mugikorrak. Oinarriak

sonarra->ranges[2]);

if (aurre_batezb < 1.5)

v = -0.3;

else

v = 0.3;

fprintf(stdout,

"Ezkerra: %f, %f %f Eskuina: %f, w=%f\n",

sonarra->ranges[0],

sonarra->ranges[1],

sonarra->ranges[2],

sonarra->ranges[3], w);

// Abiadurak agindu robotari

playerc_position2d_set_cmd_vel(robota, v, 0, w, 1);

}

6. Amaitu aurretik, zerbitzari, bezero eta interfazeen arteko esleipenakezabatu behar dira.

playerc_position2d_unsubscribe(robota);

playerc_position2d_destroy(robota);

playerc_ranger_unsubscribe(sonarra);

playerc_ranger_destroy(sonarra);

playerc_client_disconnect(bezeroa);

playerc_client_destroy(bezeroa);

return 0;

IV.j1.1 C bezero-programa konpilatu eta exekutagarria sortu

pkg-config tresna erabiliko dugu lana errazteko. Honek, zuzenean esatendigu zeintzuk diren .h fitxategiak bilatzeko dependentziak, baita exekuta-garria sortzeko garaian behar diren liburutegiak non topatu ere. Aurrekoadibidearen kodea bigbot-noraezean.c fitxategian baduzu,

gcc -c ‘pkg-config --cflags playerc‘ bigbot-noraezean.c

Eta linkatu eta exekutagarria sortzekoa:

gcc ‘pkg-config --cflags playerc‘ -o main bigbot-noraezean.c \

‘pkg-config --libs playerc‘

Komando horiek aldi bakoitzean idatzi behar izatea baino erosoagoa damake tresna erabiltzea. 4.1. programak erakusten du libplayerc liburu-tegia erabiltzen duen bezero-programa konpilatu eta linkatzeko Makefile

fitxategi sinple bat.

Page 41: Player/Stagerobot-zerbitzari eta-simulagailua · “Main” — 2011/12/28 — 13:48 — page 505 — #501 Player/Stage robot-zerbitzari eta -simulagailua 505 Stage bi modutara erabil

“Main” — 2011/12/28 — 13:48 — page 543 — #539✐

Player/Stage robot-zerbitzari eta -simulagailua 543

CC=gcc

CFLAGS = ‘pkg−c on f i g −−c f l a g s p layerc ‘LIBS = ‘pkg−c on f i g −− l i b s p layerc ‘

TARGETS = bigbot−noraezean

a l l : $ (TARGETS)

%: %.c$ (CC) $ (CFLAGS) −o $@ $ˆ $ (LIBS)

c l ean :rm ∗ . o ∗˜ $ (TARGETS)

4.1. programa: Makefile sinple bat.

Jarri zerbitzaria martxan player hutsik.cfg aginduarekin eta besteterminal batean exekutatu programa!