Topic
系列告一段落啦,我們再來分享一些常用指令,還有好用的rqt_graph
指令:
$ rostopic list
這個指令基本上我們之前用過啦,也跟rosnode list
一樣,就是列出目前運行中的topic
有哪些。
$ rostopic info <topic_name>
這個指令就是關於某個topic
的詳細資料啦! 由下圖執行畫面可以看到我們之前寫的/chatter
這個topic
,需要輸入的訊息格式是std_msgs/String
,可以由/talker
發佈訊息,然後由/listener
監聽。
$ rostopic echo <topic_name>
接下來這個指令比較重要啦,就是去監聽某個topic
,也就是在我們寫完publisher
以後可以用的debug
工具,在前幾天寫publisher
的時候已經用過啦,我就不再截圖囉!
$ rostopic pub <topic-name> <topic-type> [data...]
這個指令跟echo
是相對的,也就是充當publisher
的指令,負責對某個topic
發送訊息,可以在我們寫完subscriber
以後debug
用。
可以看到我發送了一條hello from command line
訊息,而我的/listener
也確實收到囉!
講完Topic
,接著來講一下Graph
。ROS的資料結構是使用圖形(graph)的方式,並且提供一個好用的圖形化工具,可以看出每個node的連結狀況:
$ rosrun rqt_graph rqt_graph
$ rqt_graph
這兩個指令都可以執行,叫出我們的圖形化畫面:
可以看到我們有兩組的talker
和listener
,後面有亂數的是python
產生的node
,每個talker
都連結到另外兩個listener
,並且透過chatter
這個topic
傳輸資料。
但大家會不會覺得很奇怪,這個rqt_graph怎麼看就也像是某個node啊,怎麼沒有出現在圖形上呢?
這時候就要把上面的指令中的debug關掉,就可以看到隱藏的node囉!
是不是突然變得很複雜啊? 其實就只是多了一個rqt_gui_py_node
和rosout
,並且每個node
都會連到rosout
而已,因為rosout
是負責輸出錯誤訊息的node
嘛! 所以如果node
遇到甚麼狀況的時候,就會發送訊息到rosout
的topic
中,並由rosout
的node
接收下來,差不多就是這樣啦!rqt_graph
在大型專案中應該會蠻好用的,可以輕易看出node
之間的連結性。
ROS wiki - rostopic
ROS tutorials- understanding Topics
ROS wiki - rqt_graph