Table of Contents

ROS kontseptsioon

ROSi teegid

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

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.

Avaldaja ja Tellija

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.

Rostopic

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"

Rqt_graph

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:

Rosnode

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.