====== 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. {{:et:ros:ros_pubsub_2_.png?700|}} ===== 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 {{:et:ros:rqt_graph.png|}} 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: {{:et:ros:rqtslam.png?700|}} ====== 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.