iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 9
0
自我挑戰組

ROS自學筆記系列 第 9

Day 09 - ROS Topics

關於Node的知識我們已經學得差不多啦,接下來就是進入Topic囉!
我們現在已經知道可以用不同的node執行不同的功能,但他們之間的溝通需要透過topic,那麼到底topic是甚麼呢?

Topic

topic於我的理解有點像是hashtag的那種標籤的機制,就像T客邦的文章標籤的功能,如果我訂閱了某個標籤,那麼只要某個文章中有標記那個標籤,我就可以收到通知說有新的關於那個標籤的文章上線囉!可以去查看該文章這樣。node可以利用發布關於某種topic的資訊,而如果有node負責監聽該種topic的資訊,就可以接收得到這個資訊,這就是所謂的publisher(發布者)和subscriber(訂閱者)。
Topic 概念圖
publishersubscriber的關係可以是一對一、一對多、多對一和多對多,因為topic會檢查誰發布了新的資訊,也會檢查有誰訂閱該資訊,並發送出去喔!

至於怎麼做到這個機制呢? 他其實是透過TCP/IP來傳輸的,所以我們在使用rosnode info這個指令的時候,會看到該node底下的ip位址,以下圖來說,這個node的ip位址就是http://tegra-ubuntu:35475囉! ROS將這樣的傳輸方式定義為TCPROS,有沒有發現他不管用甚麼類似的指令或是概念,都要加上一個ROS呢? 那就表示你越來越熟悉ROS啦XD
rosnode info 執行畫面

Message

兩個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


上一篇
Day 08 - ROS Node 常用指令
下一篇
Day 10 - 使用Python撰寫Publisher
系列文
ROS自學筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言