關於Node的知識我們已經學得差不多啦,接下來就是進入Topic囉!
我們現在已經知道可以用不同的node執行不同的功能,但他們之間的溝通需要透過topic,那麼到底topic是甚麼呢?
topic於我的理解有點像是hashtag的那種標籤的機制,就像T客邦的文章標籤的功能,如果我訂閱了某個標籤,那麼只要某個文章中有標記那個標籤,我就可以收到通知說有新的關於那個標籤的文章上線囉!可以去查看該文章這樣。node可以利用發布關於某種topic的資訊,而如果有node負責監聽該種topic的資訊,就可以接收得到這個資訊,這就是所謂的publisher(發布者)和subscriber(訂閱者)。
publisher和subscriber的關係可以是一對一、一對多、多對一和多對多,因為topic會檢查誰發布了新的資訊,也會檢查有誰訂閱該資訊,並發送出去喔!
至於怎麼做到這個機制呢? 他其實是透過TCP/IP來傳輸的,所以我們在使用rosnode info這個指令的時候,會看到該node底下的ip位址,以下圖來說,這個node的ip位址就是http://tegra-ubuntu:35475囉! ROS將這樣的傳輸方式定義為TCPROS,有沒有發現他不管用甚麼類似的指令或是概念,都要加上一個ROS呢? 那就表示你越來越熟悉ROS啦XD
兩個node在透過Topic傳遞資料的時候,必須先講好這個傳遞的方式,也就是該訊息的格式啦! 以網站的方式講,大概就是打API的時候限定只能傳JSON格式的資料,這樣API撈的時候就可以從JSON檔中解析資料出來吧!
每個Topic都需要先定義好要使用怎樣的message type,有控制動作的actionlib_msgs、導航用的nav_msgs、感測器用的sensor_msgs等等,有些別人已經寫好的,也可以自定義自己的message,因為有蠻多不同的格式的,一一細講太麻煩了,就讓我們在之後的實作中來玩玩看這些訊息的格式吧!
ROS wiki - Topics
ROS tutorial - Understanding Topics
ROS wiki - Common messages