ROS 的工作過程及通信原理


  ROS可以形象的描述為一個工廠的運行機制,創建好一個工作空間(workspace)就像一個工廠,工廠里又有好多個生產車間,每個功能包(pkg)看作是一個生產車間,每個生產車間又有好多工人在配合,每個節點(node)看作是一個工人,節點是又是可執行程序的最小單位,工人們之間相互溝通通過消息(mesage)來完成.

  • 話題(topic)

  話題是單向的,一般用於連續發送數據的傳感器,建立一次聯系后,一個發布者可以向多個訂閱者發送信息,同樣,一個訂閱者也可以訂閱多個發布者的消息。

  • 服務(service)

  服務是同步雙向的通信機制,服務器只有在有請求的時候才響應,客戶端在發出請求后才接受響應。當服務的請求和響應完成時,兩個連接點自動斷開。

 

 

  •  動作(action)

  動作的通訊方式與服務有類似的情況,不同的是服務器收到請求后直至完成響應所需時間較長,中途需要反饋給客戶端目前完成的情況,報告當前的現狀。

  • 由以上三種通訊方式完成ROS節點間的信息交流,但是發布者,訂閱者,服務服務器,服務客戶端,動作服務器,動作客戶端分布在不同的節點中。這些節點需要一個讓它們建立聯系的主節點構建通信的橋梁。分布在外面的不同節點,向主節點注冊自己的信息,以便其它節點訪問,同時向主節點獲取那些訪問自己節點的信息。獲取后節點和節點間就可以通訊,不再需要主節點。

 通信步驟1:運行主節點roscore,聲明自己的RPC地址URI。

 

通信步驟2:訂閱者節點通過RPC向主節點注冊信息,告訴自己的節點名稱、話題名稱、消息類型及自己的RPC的URL地址和端口,運行小烏龜節點,向主節點注冊自身信息,rosrun turtlesim turtlesim_node. 

 

 

 通信步驟3:發布者節點通過RPC向主節點注冊信息,告訴自己的節點名稱、話題名稱、消息類型及自己RPC的URL地址和端口,運行鍵盤控制節點,向主節點注冊鍵盤的信息rosrun turtlesim turtle_teleop_key

通信步驟4:通知發布者消息,主節點通過RPC向小烏龜節點發送小烏龜希望訪問的鍵盤發布者的節點名稱,話題名稱,消息類型和鍵盤的RPC地址和端口,即主節點將鍵盤信息告知小烏龜。

 通信步驟5:小烏龜(訂閱者)得知鍵盤(發布者)要向自己發送信息,通過上面得知的鍵盤的RPC地址和端口向發布者請求直連,將小烏龜自己的節點名稱、話題名稱、和消息類型及TCP/IP地址端口告知鍵盤發布者,並請求獲得鍵盤的TCP/IP地址的端口。告知的過程仍采用RPC通信。

 通信步驟5:鍵盤發布者將響應小烏龜索要自己的TCP/IP地址端口的請求,將TCP服務器的URL地址和端口作為連接響應發送給小烏龜訂閱者。但在這次告知小烏龜的過程仍采用RPC通信。

 通信建立完成6:當小烏龜和鍵盤節點都知道了對方的TCP/IP地址及端口后不在走RPC通信,之后將通過TCP/IP通訊接受鍵盤發送的運動信號。可以用rqt_graph查看節點關系圖

 

  總的小烏龜節點模型為:

 話題服務動作最終的通訊都是建立在以上的連接過程,發布者,訂閱者,服務服務器,服務客戶端,動作服務器,動作客戶端分布節點中的,通訊建立過程都是基於節點單位來建立的在建立好通訊后才執行各自的信息交流。

發送消息:

服務請求和響應;

 

動作的目標、結果、反饋:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM