精通ROS機器人編程(原書第2版) 》 —1.4 理解ROS的文件系統">《精通ROS機器人編程(原書第2版) 》 —1.4 理解ROS的文件系統
1070
2025-03-31
1.5.6 ROS節點管理器
ROS節點管理器非常像一個DNS服務器,將唯一的名稱和ID與我們系統中活躍的 ROS元素關聯起來。當一個節點在ROS系統中啟動時,它就會查找ROS節點管理器,并在其中注冊節點的名稱。因此,ROS節點管理器記錄了目前ROS系統中運行的所有節點的詳細信息。當節點的任何信息發生變化時,它會生成回調并使用最新的詳細信息進行更新。為了將節點彼此連接,這些節點的詳細信息就非常有用。
當節點開始發布話題時,節點將話題的詳細信息(如名稱和數據類型)提供給ROS節點管理器。ROS節點管理器將檢查是否有其他節點訂閱了同一話題。如果有節點訂閱了同一話題,ROS節點管理器會將發布者的節點詳細信息共享給訂閱節點。獲取節點詳細信息后,這兩個節點將使用基于TCP/IP套接字的 TCPROS協議進行互連。兩個節點連接后,ROS節點管理器就不再起作用了。我們可以根據需要,停止發布者節點或停止訂閱者節點。停止任何一個節點,都會再次檢查ROS節點管理器。ROS服務也采用相同的方法。
節點使用ROS客戶端程序 (如 roscpp 和 rospy) 編寫。這些客戶端程序使用基于XML 遠程過程調用 (XMLRPC) 的 API與ROS節點管理器進行交互,這些API充當ROS系統 API的后端。
ROS_master_URI 環境變量包含ROS節點管理器的 IP 和端口。使用這個環境變量,ROS節點可以找到ROS節點管理器。如果該環境變量錯誤,節點之間將不會有通信。在單機系統中使用ROS時,可以使用本機的 IP 或localhost。但是在分布式網絡中,計算發生在不同的物理機上,我們應該以合適的方式定義ROS_master_URI。只有這樣,遠程節點才能找到彼此并相互通信。在分布式系統中,只需要一個ROS節點管理器。該節點管理器應該運行在某一臺計算機上,所有其他計算機都可以正確 ping這臺計算機,從而確保遠程ROS節點可以訪問ROS節點管理器。
圖1-8展示了ROS節點管理器如何與發布者節點和訂閱者節點進行交互。發布者節點發布了一個字符串類型話題,消息為Hello World,訂閱者節點訂閱了此話題。
圖1-8 ROS節點管理器和“Hello World”發布者和訂閱者間的通信
當發布者節點開始在某一個話題中發布 Hello World消息時,ROS節點管理器將獲取該節點的話題和詳細信息。ROS節點管理器將檢查是否有其他節點訂閱了同一話題。如果當時沒有節點訂閱該話題,節點間保持未連接狀態。如果發布者節點和訂閱者節點同時運行,ROS節點管理器會將發布者的詳細信息推送到訂閱者,這樣兩個節點將連接,并可以通過ROS消息交換數據。
軟件開發
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。