ROS學習(二):消息通信介紹

    爲了最大化用戶的可重用性,ROS是以節點的形式開發的,而節點 是根據其目的細分的可執行程序的最小單位。節點則通過消息(message)與其他的 節點交換數據,最終成爲一個大型的程序。這裏的關鍵概念是節點之間的消息通信,它 分爲三種。單向消息發送/接收方式的話題(topic);雙向消息請求/響應方式的服務 (service);雙向消息目標(goal)/結果(result)/反饋(feedback)方式的動作 (action)。另外,節點中使用的參數可以從外部進行修改。這在大的框架中也可以被 看作消息通信。消息通信可以用一張圖來說明,如下圖所示。在對ROS進行編程時,爲每個目的使用合適的話 題、服務、動作和參數是很重 要的。

 話題

     話題消息通信是指發送信息的發佈者和接收信息的訂閱者以話題消息的 形式發送和接收信息。希望接收話題的訂閱者節點接收的是與在主節點中註冊的話題名稱 對應的發佈者節點的信息。基於這個信息,訂閱者節點直接連接到發佈者節點來發送和接 收消息。例如,通過計算移動機器人的兩個車輪的編碼器值生成可以描述機器人當前位置 的測位(odometry)28 信息,並以話題信息(x, y, i)傳達,以此實現異步單向的連續 消息傳輸。話題是單向的,適用於需要連續發送消息的傳感器數據,因爲它們通過一次的 連接連續發送和接收消息。另外,單個發佈者可以與多個訂閱者進行通信,相反,一個訂 閱者可以在單個話題上與多個發佈者進行通信。當然,這兩家發佈者都可以和多個訂閱者 進行通信。

服務

    服務消息通信是指請求服務的服務客戶端與負責服務響應的服務服務器之間的同步 雙向服務消息通信,如圖4-3所示。前述的發佈和訂閱概念的話題通信方法是一種異步方 法,是根據需要傳輸和接收給定數據的一種非常好的方法。然而,在某些情況下,需要一 種同時使用請求和響應的同步消息交換方案。因此,ROS提供叫做服務的消息同步方法。 一個服務被分成服務服務器和服務客戶端,其中服務服務器只在有請求(request) 的時候才響應(response),而服務客戶端會在發送請求後接收響應。與話題不同,服 務是一次性消息通信。因此,當服務的請求和響應完成時,兩個連接的節點將被斷開。該 服務通常被用作請求機器人執行特定操作時使用的命令,或者用於根據特定條件需要產生 事件的節點。由於它是一次性的通信方式,又因爲它在網絡上的負載很小,所以它也被用 作代替話題的手段,因此是一種非常有用的通信手段。例如,如圖4-3所示,當客戶端向 服務器請求當前時間時,服務器將確認時間並作出響應。

 

 動作

     動作 消息通信是在如下情況使用的消息通信方式:服務器收到請求後直到響應所需 的時間較長,且需要中途反饋值。這與服務非常相似,服務具有與請求和響應分別對應的目標(goal)和結果(result)。除此之外動作中還多了反饋(feedback)。收到請 求後需要很長時間才能響應,又需要中間值時,使用這個反饋發送相關的數據。消息傳 輸方案本身與異步方式的話題(topic)相同。反饋在動作客戶端(action client)和動 作服務器(action server)之間執行異步雙向消息通信,其中動作客戶端設置動作目標 (goal),而動作服務器根據目標執行指定的工作,並將動作反饋和動作結果發送給動作 客戶端。例如,如圖4-4所示,當客戶端將家庭服務器設置爲服務器時,服務器會時時地 通知客戶端洗碗、洗衣和清潔等進度,最後將結果值發送給客戶端。與服務不同,動作通 常用於指導複雜的機器人任務,例如發送一個目標值之後,還可以在任意時刻發送取消目 標的命令。

 在這種情況下,發佈者、訂閱者、服務服務器、服務客戶端、動作服務器和動作客戶 端都存在於不同的節點中,這些節點需要連接才能進行消息通信。這時候,主節點是幫助 節點之間的連接。主節點就像節點名稱、話題和服務、動作名稱、URI地址和端口以及參 數們的名稱服務器。換句話說,節點同時向主節點註冊自己的信息,並從主節點獲取其他 節點希望通過主節點訪問的節點的信息。然後,節點和節點直接連接進行消息通信。如下圖所示。

 

 參數

     信息通信主要分爲話題、服務和動作,而從大的框架來看,參數也可以看作一種消息 通信。可以認爲參數是節點中使用的全局變量。參數的用途與Windows程序中的*.ini配 置文件非常類似。默認情況下,這些設置值是指定的,有需要時可以從外部讀取或寫入參 數。特別是,由於可以通過使用來自外部的寫入功能來實時地改變設置值,因此它是非常 有用的,因爲它可以靈活地應對多變的情況。 儘管參數嚴格的來說並不是消息通信,但筆者認爲它們屬於消息通信的範疇,因爲它 們使用消息。例如,用戶可以設置要連接的USB端口、攝像機色彩校正值以及速度和命令 的最大值和最小值。

 

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