文章目錄
前言
在上一篇文章中簡單瞭解了ROS話題通信機制,但是它內部的通信過程,很多人都是不知道的,今天我看了 胡春旭的書籍——《ROS機器人開發實踐》,又加深了對ROS話題通信的理解,打算接着講解一下其過程是怎麼樣的。
ROS系列文章
節點的連接
一個節點需要與系統中其他節點進行通信纔有意義,系統中任何單獨的一個節點其實都是沒有意義的。下圖是一個話題通訊的過程示意圖,一個節點通過節點管理器連接到另一個節點,最終請求話題數據流。
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地址信息。
④訂閱者Listener
向Talker
發送連接請求
訂閱者Listener
知道發佈者Talker
後,就會主動找到它,並且通過RPC向TTalker
發送連接請求,傳輸訂閱的話題名、消息類型以及通信協議。
⑤發佈者Talker
確認連接請求
Talker
接收到Listener
發送的連接請求後,繼續通過RPC向Listener
確認連接信息,同時發送自身相關的信息。
⑥Listener
嘗試與Talker
建立網絡連接
Listener接收到確認信息後,使用TCP嘗試與Talker
建立網絡連接。
⑦Talker
向Listener
發佈消息
成功建立連接後,Talker
開始向Listener
發送話題消息數據。
總結
在節點與節點建立連接前,他們的通信協議都是RPC,而這主要都是依賴於節點管理器的,在節點與節點建立連接後,就直接是使用TCP協議進行數據傳輸,而不需要依賴節點管理器,此時節點管理器允許被關閉,但在關閉後,其他節點就不能訂閱、發佈這個話題消息了。
總之節點管理器ROS Master
在節點建立連接的過程中起到了重要作用,但是並不參與節點之間最終的數據傳輸。
引用說明
本文的部分截圖來自書籍《ROS機器人開發實踐》 胡春旭 著。