ROSis on tarkvara organiseeritud teekidesse. Teek võib sisalsada ROSi sõlmi, andmetekogu, konfiguratsiooni faili, kolmanda osapoole tarkvara või ükskõik mida vajalikku programmi töötamiseks. Teekide eesmärk on pakkuda kasulikke fuktsioone nii, et neid saaks lihtsalt erinevate eesmärkide täitmiseks ära kasutada.
Teeke saab paigaldada kasutades Linuxi paketihaldajat apt-get või paigutades need oma tööruumi src kataloogi. Pakett nimega ros-tutorials sisaldab teeke, mille abil on võimalik demonstreerida ROSi võimalusi ja mis on vajalikud selle õpetuse järgimiseks.
Paigalda pakett nimega ros-tutorials:
$ sudo apt-get install ros-kinetic-ros-tutorials
Kui pakett on edukalt paigaldatud tuleb töökeskkond uuesti kompileerida:
$ catkin_make #kompileeri töökeskkond
Roscore on kogumik sõlmedest ja programmidest, mis on ROS-põhise süsteemi eeltingimused. Selleks, et ROSi sõlmed saaksid omavahel suheda peab töötama ros master sõlm. Selle sõlme saab käivitada käsuga roscore.
Ava uus terminali aken(Ctrl+Alt+T) ja käivita roscore:
$ roscore
Kui kõik on õigesti seadistatud peaks terminali ilmuma midagi sellist:
... logging to ~/.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch-machine_name-13039.log Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://machine_name:33919/ ros_comm version 1.4.7 SUMMARY ====== PARAMETERS * /rosversion * /rosdistro NODES auto-starting new master process[master]: started with pid [13054] ROS_MASTER_URI=http://machine_name:11311/ setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf process[rosout-1]: started with pid [13067] started core service [/rosout]
Korraga tohib käia ainult üks roscore. Nüüd saavad ROSi sõlmed oma vahel suhelda.
Kogu ROSi süsteem on üles ehitatud sõlmedele ja teemadele. Sõlm on konkreetsele ülesandele pühendatud programm. Sõlmed saavad omavahel suhelda läbi erinevate teemade. Sõlmed saavad teemadesse sõnumeid avaldada ja teemasid tellida, et nendest sõnumeid lugeda. Eespool paigaldasid sa paketi nimega ros-tutorials. See pakett sisaldab kahte sõlme. Esimese sõlme nimi on talker, mis avaldab teksti “hello world” teemasse /chatter.
Kasutame käsku rosrun, et käivitada sõlm.
Ava uus terminali aken(Ctrl+Alt+T) ja käivita seal sõlm nimega talker:
$ rosrun rospy_tutorials talker
Veendu, et roscore käib, ilme selleta ei saa sõlme käivitada. Kui sõlme käivitamine õnnestub peaks terminali ilmuma:
[INFO] [WallTime: 1314931831.774057] hello world 1314931831.77 [INFO] [WallTime: 1314931832.775497] hello world 1314931832.77 [INFO] [WallTime: 1314931833.778937] hello world 1314931833.78 [INFO] [WallTime: 1314931834.782059] hello world 1314931834.78 [INFO] [WallTime: 1314931835.784853] hello world 1314931835.78 [INFO] [WallTime: 1314931836.788106] hello world 1314931836.79
Avaldaja käib ja avaldab sõnumeid teemasse /chatter, nüüd on vaja tellijat, mis antud sõnumeid loeb.
Teise sõlme nimi on listener ja see tellib teema /chatter ning hakkab sellesse teemasse saadetud sõnumeid ekraanile kuvama.
Ava uus terminali aken(Ctrl+Alt+T) ja käivita tellija nimega listener:
$ rosrun rospy_tutorials listener
Kui terminali ilmuvad talker poolt saadetud sõnumid, siis käivitas sõlm ennast edukalt, tellis teema /chatter ja sõlmed suhtlevad nüüd edukalt läbi ROSi:
[INFO] [WallTime: 1314931969.258941] /listener_17657_1314931968795I heard hello world 1314931969.26 [INFO] [WallTime: 1314931970.262246] /listener_17657_1314931968795I heard hello world 1314931970.26 [INFO] [WallTime: 1314931971.266348] /listener_17657_1314931968795I heard hello world 1314931971.26 [INFO] [WallTime: 1314931972.270429] /listener_17657_1314931968795I heard hello world 1314931972.27 [INFO] [WallTime: 1314931973.274382] /listener_17657_1314931968795I heard hello world 1314931973.27 [INFO] [WallTime: 1314931974.277694] /listener_17657_1314931968795I heard hello world 1314931974.28 [INFO] [WallTime: 1314931975.283708] /listener_17657_1314931968795I heard hello world 1314931975.28
ROSi baasil töötaval robotil on tavaliselt väga palju sõlmi, millest igal on oma eraldi ülesanne. Sõlmed võivad paikneda erinevates arvutites ja suhelda läbi erinevate protokollide. Nüüd tutvume aga ROSiga kaasnevate tööriistatega, mis võimaldavad meil sõlmi ja teemasid jälgida ja haldada.
Esimene tööriist, mida vaatame on rostopic. Rostopic on tööriist, mille abil on võimalik ROSi teemasid jälgida ja hallata.
rostopic käsu sisestamisel kuvatakse kõik viisid, kuidas seda kasutada saab:
$ rostopic rostopic bw display bandwidth used by topic rostopic echo print messages to screen rostopic hz display publishing rate of topic rostopic list print information about active topics rostopic pub publish data to topic rostopic type print topic type
Veendu, et taustal töötavad roscore, talker ja listener.
Kuvame kõik teemad, mis on hetkel kasutusel:
$ rostopic list /chatter /rosout /rosout_agg
/chatter on teema, mille kaudu suhtlevad talker ja listener
kasutame käsku rostopic info, et kuvada teema kohta vajalikku informatsiooni:
$ rostopic info /chatter Type: std_msgs/String Publishers: * /talker_12621_1542817185271 (http://raivo-HP-EliteBook:45495/) Subscribers: * /listener_12836_1542817212996 (http://raivo-HP-EliteBook:34711/)
Kuvatakse, millised sõlmed on teemat tellinud ja millised teemasse avaldavad, lisaks näeme ka sõnumi tüüp, milleks on std_msgs/String.
kasutame rostopic hz, et näha sõnumite sagedust:
$ rostopic hz /chatter subscribed to [/chatter] average rate: 10.005 min: 0.100s max: 0.100s std dev: 0.00017s window: 10
Näeme, et sõnumite keskmine sagedus on umbes 10 Hz. (Ctrl+C katkestab protsessi)
Kasutame käsku echo, et kuvada teemasse saadetud sõnumid ekraanile:
$ rostopic echo /chatter data: "hello world 1542817743.91" --- data: "hello world 1542817744.01" --- data: "hello world 1542817744.11" --- data: "hello world 1542817744.21" --- data: "hello world 1542817744.31" ---
Kasutame käsku pub, et avaldada sõnum teemasse:
$ rostopic pub /chatter std_msgs/String "data: 'tere maailm'" publishing and latching message. Press ctrl-C to terminate
Kui samal ajal teemat kuulata näeme, et meie saadetud sõnum avaldati:
data: "hello world 1542817787.91" --- data: "hello world 1542817788.01" --- data: "hello world 1542817788.11" --- data: "tere maailm" --- data: "hello world 1542817788.21" --- data: "hello world 1542817788.31" --- data: "hello world 1542817788.41"
ROSiga kaasnevad ka mõningad graafilised tööriistad. Rqt_graph kujutab graafiliselt, kuidas millised sõlmed omavahel suhtlevad. Võimalik on ka sõlmi ja teemasid erinevalt filtreerida. rqt_graph võimaldab graafiku pdf formaadis salvestada.
käivita rqt_graph:
$ rqt_graph
Käsu käivitamisel avaneb graafiline kasutajaliides. Näeme, et talker avaldab sõnumeid teemasse /chatter ja listener kuulab neid.
Keerukamate ülesannetega robotite peal töötab tavaliselt palju erinevaid sõlmi, mis suhtlevad mitmete teemade kaudu. Käsurea pealt on raske üldist pilti näha ja selleks kasutataksegi rqt_graph programmi.
Näide graafikust keerukama roboti peal:
Kasutame käsku rosnode list, et kuvada kõik hetkel töötavad sõlmed.
$ rosnode list /listener_12836_1542817212996 /rosout /talker_12621_1542817185271
Kasutame käsku rosnode info, et kuvada sõlme kohta vajalikku informatsiooni:
$ rosnode info /talker_12621_1542817185271 -------------------------------------------------------------------------------- Node [/talker_12621_1542817185271] Publications: * /chatter [std_msgs/String] * /rosout [rosgraph_msgs/Log] Subscriptions: None Services: * /talker_12621_1542817185271/get_loggers * /talker_12621_1542817185271/set_logger_level contacting node http://raivo-HP-EliteBook:45495/ ... Pid: 12621 Connections: * topic: /chatter * to: /listener_12836_1542817212996 * direction: outbound * transport: TCPROS * topic: /rosout * to: /rosout * direction: outbound * transport: TCPROS
Näeme, millises arvutis sõlm töötab ja läbi millise protokolli ta ROSiga ühendatud on.