【ROS入門-5】深入瞭解ROS話題通信機制的過程

前言

在上一篇文章中簡單瞭解了ROS話題通信機制,但是它內部的通信過程,很多人都是不知道的,今天我看了 胡春旭的書籍——《ROS機器人開發實踐》,又加深了對ROS話題通信的理解,打算接着講解一下其過程是怎麼樣的。

ROS系列文章

節點的連接

一個節點需要與系統中其他節點進行通信纔有意義,系統中任何單獨的一個節點其實都是沒有意義的。下圖是一個話題通訊的過程示意圖,一個節點通過節點管理器連接到另一個節點,最終請求話題數據流。

ros016

ps:在ROS中有兩個節點:一個是發佈者Talker,另一個是訂閱者Listener,兩個節點分別發佈、訂閱同一個話題bar

①發佈者Talker註冊

在系統中,節點與節點是沒有任何關係的,都靠節點管理器來處理相關的請求與服務,首先第一步,發佈者Talker需要向節點管理器ROS Master註冊相關信息,包括節點的信息、需要發佈的話題名等,然後節點管理器ROS Master會記錄下來Talker節點的信息。

②訂閱者Listener註冊

同理訂閱者Listener也需要向節點管理器ROS Master註冊相關信息,這其實是啓動兩個節點時候就已經做了的事情。

③節點管理器ROS Master進行話題匹配

因爲發佈者Talker與訂閱者Listener節點都在節點管理器ROS Master註冊了信息,那麼節點管理器ROS Master就會發現有相同的話題信息,此時它就需要將訂閱與發佈話題的兩個節點匹配在一起,會通過RPC向訂閱者Listener發送Talker節點的RPC地址信息。

④訂閱者ListenerTalker發送連接請求

訂閱者Listener知道發佈者Talker後,就會主動找到它,並且通過RPC向TTalker
發送連接請求,傳輸訂閱的話題名、消息類型以及通信協議。

⑤發佈者Talker確認連接請求

Talker接收到Listener發送的連接請求後,繼續通過RPC向Listener確認連接信息,同時發送自身相關的信息。

Listener嘗試與Talker建立網絡連接

Listener接收到確認信息後,使用TCP嘗試與Talker建立網絡連接。

TalkerListener發佈消息

成功建立連接後,Talker開始向Listener發送話題消息數據。

總結

在節點與節點建立連接前,他們的通信協議都是RPC,而這主要都是依賴於節點管理器的,在節點與節點建立連接後,就直接是使用TCP協議進行數據傳輸,而不需要依賴節點管理器,此時節點管理器允許被關閉,但在關閉後,其他節點就不能訂閱、發佈這個話題消息了。

總之節點管理器ROS Master在節點建立連接的過程中起到了重要作用,但是並不參與節點之間最終的數據傳輸。

引用說明

本文的部分截圖來自書籍《ROS機器人開發實踐》 胡春旭 著

參考

ROS官方wiki

ROS筆記(7) 話題通信

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章