7. Rubriigid ja sõnumid

Selles harjutuses tutvud ROSi sõlmede, rubriikide ja sõnumitega. Õpid nende käsurealt uurimiseks kasutama ROSi tööriistu.

Harjutuse sooritamiseks on vaja Ubuntu ja ROSiga arvutit, kuhu on paigaldatud kimbud teleop_twist_keyboard, robotont_description, robotont_driver ja robotont_msgs. Kui kasutad kursuse korraldajate poolt pakutud süsteemi, siis on need kimbud juba paigaldatud.

Harjutus ei ole mõeldud läbimiseks füüsilise robotiga.

Samm-sammulise juhendi vaatamiseks klikka harjutuse vahepealkirjadele.

Alustuseks on selles harjutuses hea mõte käivitada roscore eraldi:

roscore

Nüüd käivita uues aknas robotondi digikaksik käsuga

roslaunch robotont_driver fake_driver.launch

Jäta need käsklused nendes kahes terminaliaknas jooksma (ära sulge neid Ctrl+C abiga) ja võta vajadusel uute käskude jaoks lahti veel uusi terminaliaknaid.

ROSi sõlmed (ingl k. node) on protsessid, mis teevad ROSi süsteemis arvutusi. Tavaliselt toimetavad sõlmed paralleelselt ja saadavad üksteisele info vahetamiseks sõnumeid.

Kõiki aktiivseid ROSi sõlmi on võimalik näha käsuga

rosnode list

Käsk rosnode info <sõlme_nimi> näitab infot konkreetse sõlme kohta.

Vaata ka ise lähemalt ühe sõlme sisu. Selleks kirjuta käsureale näiteks

rosnode info /fake_driver_node

Peaksid nägema vaadet, mis sarnaneb allolevale pildile:

[[{“fid”:72994,”view_mode”:”default”,”type”:”media”,”attributes”:{“height”:”458″,”width”:”690″,”alt”:”Käsu “rosnode info /fake_driver_node” väljund”,”class”:”media-element file-default”}}]]

ROSi rubriigid (ingl k. topic) on nimelised suhtluskanalid, mille kaudu saavad sõlmed omavahel sõnumeid vahetada.

ROSi sõlmed saavad rubriike kasutada kahel viisil: nad võivad sinna sõnumeid kuulutada (ingl k. publish) või sealt sõnumeid tellida (ingl k. subscribe).

Rubriigis kuulutamine tähendab, et sõlm saadab selles rubriigis sõnumeid välja eesmärgiga anda infot teistele sõlmedele. Sõlm, mis sõnumeid kuulutab, on kuulutaja (ingl k. publisher).

Rubriigist tellimine tähendab, et sõlm kuulab, kas rubriigis on sissetulevaid sõnumeid, mida on selles rubriigis kuulutanud mõni teine sõlm. Sõlm, mis tellib sõnumeid, on tellija (ingl k. subscriber).

.

 

Sellel joonisel on sõlmed tähistatud ellipsitena ja rubriigid nendevaheliste nooltena. Sõlmest väljuv nool näitab, et sõlm kuulutab rubriigis sõnumeid. Sõlme sissetulev nool näitab, et sõlm tellib rubriigist sõnumeid. Jooniselt on näha, et teleop_twist_keyboard sõlm kuulutab sõnumeid cmd_vel rubriiki ja fake_driver_node tellib sõnumeid samalt rubriigist.

Sõlm võib samaaegselt olla ka nii kuulutaja kui tellija, tavaliselt küll erinevate rubriikide suhtes. Sõlm võib ka kuulutada sõnumeid mitmes rubriigis või tellida sõnumeid mitmest rubriigist.

Samas rubriigis võib sõnumeid kuulutada mitu sõlme, samuti võib korraga mitu sõlme samast rubriigist sõnumeid tellida. On ka võimalik, et ROSi rubriik eksisteerib nii, et ükski sõlm sinna sõnumeid ei kuuluta või ei telli sealt sõnumeid.

Käivita käsk, mis väljastab nimekirja kõigist aktiivsetest ROSi rubriikidest:

rostopic list

Peaksid nägema rubriiki nimega cmd_vel. Selles rubriigis liiguvad sõnumid roboti liikumise kohta. Uurime lähemalt. Sisesta käsk

rostopic info /cmd_vel

Peaksid nägema umbes sellist vaadet:

.

Ilmselt näed, et ükski sõlm praegu selles rubriigis sõnumeid ei kuuluta, aga üks sõlm (täpsemini fake_driver_node) tellib cmd_vel rubriigist sõnumeid. See on ka loogiline, sest käivitasime enne roboti digikaksiku, aga ei ole veel kuulutanud sõnumeid, mis ütleksid sellele, kuidas liikuda.

Käivitame sõlme, mis oskab saata robotitele liikumiskäske:

rosrun teleop_twist_keyboard teleop_twist_keyboard.py

Saame uues terminaliaknas kasutada rosnode info käsku, et uurida, mis rubriikidega see uus sõlm suhtleb: rosnode info /teleop_twist_keyboard.

.

Näeme, et meie käivitatud sõlm kuulutab sõnumeid selles samas rubriigis, millelt fake_driver_node sõnumeid tellib: cmd_vel rubriigis. See tähendab, et nüüd saame me roboti digikaksikule sõnumeid saata.

Järgi juhiseid, mis on kuvatud terminaliaknas, kus käivitasid teleop_twist_keyboard sõlme. Kui see aken on aktiivne ja vajutad klaviatuuril õigeid klahve, näed RVizi aknas robotit liikumas.

Kui robot peaks RVizi aknas ära kaduma, võib tema otsimisest lihtsam olla fake_driver uuesti käivitada (vt sammu 1).

ROSi sõnumid on andmestruktuurid, mis sisaldavad informatsiooni. Sõnumid on need andmed, mida sõlmed üksteisele saadavad.

Igal ROSi sõnumil on kindel tüüp. Nägemaks, mis tüüpi sõnumeid igas rubriigis vahetatakse, saab kasutada tööriistu rostopic type ja rostopic info. Näiteks cmd_vel rubriigis vahetatakse tihti kasutatavaid geometry_msgs/Twist tüüpi sõnumeid.

Lähme sügavamale ja uurime, milline näeb välja geometry_msgs/Twist tüüpi sõnum. Selleks kasutame rosmsg tööriista. Sisesta käsk:

rosmsg info geometry_msgs/Twist

Uuri käsu väljundit.

Vahel on kasulik sõlmedevahelist suhtlust pealt kuulata. Leidub käsk, mis laseb meil käsureal näha kõiki sõnumeid, mis suvalises rubriigis kuulutatakse.

Vaata näiteks cmd_vel rubriigis kuulutatavaid sõnumeid, kui samaaegselt juhid simuleeritud robotit klahvivajutustega teleop_twist_keyboard sõlme kaudu. Sisesta uues aknas käsk:

rostopic echo /cmd_vel

Vajuta õiges aknas erinevaid klahve roboti liigutamiseks ja jälgi, kuidas sõnumid muutuvad. Samal ajal vaata, mis toimub RVizi aknas.

Tööriistad rosnode, rostopic ja rosmsg on kasulikud vigade leidmise ja täiendava info saamise tööriistad ROSis. Neil on veel palju võimalusi, millega saad tutvuda nende abitekstide kaudu. Abitekstide nägemiseks sisesta käsureal

rosnode -h
rostopic -h
rosmsg -h

Kui soovid, võid uurida ka käsureatööriista roswtf.