Kasutaja tarvikud

Lehe tööriistad


juhendid:player_stage

Roboti simuleerimine Player/Stage keskkonnas

Roboti simuleerimine on vajalik kahel põhjusel. Esiteks võimaldab see programmeerijatel alustada koodi testimist enne kui mehaanikud on roboti füüsiliselt valmis ehitanud. Teiseks lihtsustab simuleerimine koodi testimist, sest roboti ümberprogrammeerimisele pole vaja aega kulutada ning roboti kõiki parameetreid on võimalik jälgida igal ajahetkel. Loomulikult on vaja lõpuks kõike ka päris roboti peal katsetada, aga suurem jagu probleeme peaks juba simulatsioonidest välja tulema.

Käesolev juhend on kirjutatud robootikule, kellel esimese roboti ehitamine juba selja taga ning kes plaanib järgmise roboti programmeerimiseks kulutada rohkem kui paar nädalavahetust. Nende jaoks on simulatsiooni kasutamisest võidetud aeg tuntav. Lugejalt eeldatakse mõningast programmeerimiskogemust, et ta teaks omast käest, kui oluline on kirjutada modulaarset ja mitme abstraktsioonikihiga koodi.

Mis ja miks Player/Stage?

Playeri ja Stage'i lühikirjeldus

Player on robotite programmeerimiseks mõeldud abstraktsioonikiht. Kui lihtsate robotite programm koosneb kahest kihist – tööloogika ja riistvara ajurid – siis keerukamate projektide jaoks tasub nende vahele lisada abstraktsioonikiht. Taoline vahekiht võimaldab riistvaras muudatusi teha nii, et tööloogika koodi ei ole vaja puutuda. Ekstreemseks näiteks siinkohal on kogu füüsilise roboti asendamine arvutis simuleeritud robotiga. Boonusena lihtsustab abstraktsioonikihi (ehk hästi defineeritud liidese) kasutamine programmeerimistöö jaotamist mitme robootiku vahel.

Stage on Playeriga hästi ühilduv 2,5D simulaator (2D füüsika, 3D graafika). Stage võimaldab mitme roboti üheaegset simuleerimist, näiteks saab maha pidada sumomatši. Simulaatori arendamisel on rõhku pandud simuleerimiskiirusele, et ka keerukamad stsenaariumid võiks tavalise arvuti peal reaalajas töötada. Kuigi simulatsioon ei ole väga realistlik, saab Stage'i abil väga hästi arendada selliseid klassikalisi hobiroboteid nagu näiteks sumorobotid, joonejärgijad, labürindi lahendaja jne.

Keerukamate robotite füüsikaliselt realistlikuks 3D simuleerimiseks on kõige mugavam kasutada Gazebo simulaatorit. Kahjuks ei ole Gazebo töölesaamine nii lihtne kui Playeri ja Stage'i paigaldamine. Siiski on asjad paremuse poole liikuma hakanud, sest alates 2011. aasta lõpust toetab Gazebo arendamist tuntud robootikafirma Willow Garage.

Miks kasutada Player/Stage kombinatsiooni?

Player/Stage on hästi läbimõeldud ja väga paindlik süsteem. Nii Playerit kui ka Stage'i saab kasutada eraldi ja kombineerida muu tarkvaraga. Tänu modulaarsele arhitektuurile võivad ühes simulatsioonis koos töötada erinevates programmeerimiskeeltes kirjutatud, erinevates arvutites asuvad virtuaalrobotid ning reaalses maailmas ringi sõitvad pärisrobotid. Player/Stage on väga populaarne akadeemilises maailmas, selle abil arendatakse uudseid robotite käitumise algoritme. Heaks näiteks on TTÜ biorobootika keskuses kaitstud doktoritöö Intrinsic Robot Safety through Reversibility of Actions.

Kuna Player/Stage on vaba lähtekoodiga tarkvara, võib igaüks seda täiendada. Käesolevas juhendis näiteks lisatakse simulaatorile uut tüüpi sensor, mida ametlikult jagatav Player/Stage veel ei toeta. Lisaks ei suruta peale konkreetset programmeerimiskeelt. Tänu sellele on võimalik kirjutada C++-koodi, mis töötab nii simulaatoris kui ka mikrokontrolleril. Käesolevas juhendis näeme, kuidas programmeerida nii, et reaalselt robotile laaditavas koodis Playeri vahekiht kompileerimise ajal välja jäetakse. Kui keerukamatel platvormidel, nagu meie jalgpallirobotitel, on mõistlik kasutada Playeri laadset vahekihti, siis piiratud arvutusvõimsusega mikrokontrolleritel, millega näiteks joonejärgijaid ehitame, selline modulaarsus ei töötaks. Player/Stage annab vabaduse lihtsate robotite programmeerimiseks.

Robotisimulaatorid on loodud erinevaid kasutusjuhte silmas pidades. Näiteks Microsoft Robotics Developer Studio (mille kohta on Robotiklubi wikis eestikeelne juhend) sisaldab paljude populaarsete robotiplatvormide (nt Roomba) ja sensorite (nt Kinect) mudeleid ja graafilist programmeerimiskeelt, tänu millele on lihtne simulaatoris erinevaid ideid katsetama hakata. Samas uute robotite ja sensorite mudelite tekitamine nõuab palju tööd. Olles kaalunud erinevaid võimalusi, leian et klassikaliste võistlusrobotite (joonejärgijad, minisumo robotid ja labürindi lahendajad) arendamiseks Robotiklubis sobib kõige paremini Player/Stage(/Gazebo).

Wikipedias on hea nimekiri robotisimulaatoritest. Kui alles valid simulaatorit, siis tasub see nimekiri üle vaadata, sest õige tööriista valik projekti alguses säästab palju peavalu hiljem.

Alustamine

Player/Stage tarkvara peaks töötama kõigis populaarsemates personaalarvutite operatsioonisüsteemides. Käesolev juhend on kirjutatud Ubuntu jaoks, lähtuvalt autori isiklikest eelistustest. Loodetavast täiendab keegi seda wikit teiste paltvormide kohta käiva infoga.

Paigaldamine

Järgnev peatükk kirjeldab, kuidas paigaldada Player/Stage viimased versioonid (sept 2012 seisuga) 64-bitisele Ubuntu 12.04-le.

Alustuseks tekita kaust, kuhu kogu simulaator paigutada. Terminalis:

rasmus@kast:~$ mkdir playerstage
rasmus@kast:~$ cd playerstage

Player

Järgmise sammuna tõmba uusim Playeri lähtekood. Selleks vajad SVN-i.

rasmus@kast:~/playerstage$ sudo apt-get install subversion

Tõmba Playeri lähtekood.

rasmus@kast:~/playerstage$ svn co https://playerstage.svn.sourceforge.net/svnroot/playerstage/code/player/trunk player

Tekita kompileerimiseks tühi kaust ja liigu sellesse kausta.

rasmus@kast:~/playerstage$ cd player
rasmus@kast:~/playerstage/player$ mkdir build
rasmus@kast:~/playerstage/player$ cd build

Tekita Makefile'id cmake abil. Sealjuures määra, millisesse kausta tahad Playerit paigaldada. Eeldame, et selleks kaustaks on /home/KASUTAJA/playerstage.

rasmus@kast:~/playerstage/player/build$ cmake -DCMAKE_INSTALL_PREFIX=~/playerstage ../

Cmake annab nimekirja pistikprogrammidest, mis kompileeritakse, ja ka neist, mida ei kompileerita, sest kompileerimiseks on vaja mõnda konkreetset teeki. Näiteks Kinect sensori mudeli kompileerimiseks peab süsteemis olema libfreenect. Kui hiljem leiad, et mõni sensor on puudu, mida tahad kasutada, siis paigalda vastav teek, käivita taas ülaltoodud käsk ning paigalda Player uuesti vastavalt alltoodud infole.

Kompileeri ja paigalda Player.

rasmus@kast:~/playerstage/player/build$ make
rasmus@kast:~/playerstage/player/build$ make install

Kui paigaldasid mujale kui kodukausta, siis peade viimasele reale ette lisama sudo.

Stage

Paigalda paketid, mida on vaja Stage'i kompileerimiseks.

rasmus@kast:~/playerstage/player/build$ sudo apt-get install git cmake g++ fltk1.1-dev libjpeg8-dev libpng12-dev libglu1-mesa-dev libltdl-dev

Tõmba Stage'i lähtekood.

rasmus@kast:~/playerstage/player/build$ cd ~/playerstage
rasmus@kast:~/playerstage/stage4$ git clone git://github.com/rtv/Stage.git

Võimalda Stage'il leida paigaldatud Playeri failid.

rasmus@kast:~/playerstage/stage4$ export PKG_CONFIG_PATH+=~/playerstage/lib/pkgconfig

Nüüd peaks pkgconfig Playeri üles leidma. Testi igaks juhuks.

rasmus@kast:~/playerstage/stage4$ pkg-config --modversion playercore
3.1.0-svn

Edasi käib kõik sama moodi nagu Playeri puhul.

rasmus@kast:~/playerstage$ cd Stage/
rasmus@kast:~/playerstage/Stage$ mkdir build
rasmus@kast:~/playerstage/Stage$ cd build/
rasmus@kast:~/playerstage/Stage/build$ cmake -DCMAKE_INSTALL_PREFIX=~/playerstage ../
rasmus@kast:~/playerstage/Stage/build$ make
rasmus@kast:~/playerstage/Stage/build$ make install

Kaustad

Selleks, et süsteem leiaks Player/Stage'i failid üles, tuleb muuta süsteemimuutujaid. /home/rasmus/playerstage asemel pane kausta nimi, kus sul Player/Stage on paigaldatud.

rasmus@kast:~/playerstage/Stage/build$ echo "export PATH=\"\$PATH:/home/rasmus/playerstage/bin\"" >> ~/.bashrc
rasmus@kast:~/playerstage/Stage/build$ echo "export LD_LIBRARY_PATH=\"/home/rasmus/playerstage/lib\"" >> ~/.bashrc
rasmus@kast:~/playerstage/Stage/build$ echo "export STAGEPATH=\"/home/rasmus/playerstage/lib:/home/rasmus/playerstage/lib64\"" >> ~/.bashrc
rasmus@kast:~/playerstage/Stage/build$ echo "export PLAYERPATH=\"/home/rasmus/playerstage/lib\"" >> ~/.bashrc
rasmus@kast:~/playerstage/Stage/build$ source ~/.bashrc

Testimine

Proovi, kas Stage läheb tööle

rasmus@kast:~/playerstage/Stage/build$ cd ~/playerstage
rasmus@kast:~/playerstage$ stage share/stage/worlds/simple.world

Avanenud aknas saad robotit (punane) hiirega tõsta, samuti saad hiire abil kaarti liigutada (hoia all Ctrl klahvi, et 3D vaatesuunda muuta).

Playeri testimine käib sarnaselt.

rasmus@kast:~/playerstage$ player share/player/config/simple.cfg

Viited

Autor

Arrayjuhendid/player_stage.txt · Viimati muutnud: 2016/09/03 15:44 persoon raivo.riiel

Lehekülje tarvikud