在一個龐大的機器人系統中,通信是基礎,是重中之重。如果連各個模板之間的通信概念都含糊不清,不能融會貫通。那么,對機器人的開發也會捉襟見肘。
本文將會介紹ROS2中的通信基礎概念和模型,包括節點、話題、服務、動作
1. ROS2節點
ROS2節點,從本質上來說是一個可執行文件(C++或者Python)。它利用ROS2的通信網絡能與其他節點進行通信(數據交互)。ROS中每一個節點應該負責一個單一的,模塊化的用途(例如:一個節點用於控制電機,一個節點用於控制激光雷達),每個節點都可以通過主題、服務、動作或者參數向其他節點發送和接受數據。一個完整的機器人系統由許多協同工作的節點組成。如圖1所示:

2. ROS2話題
ROS2將復雜的系統分解成許多模塊化的節點,話題(Topic)是ROS2通信中的重要元素,充當節點交換信息的總線,如圖2所示。

當然,一個節點可以向任意數量的主題發布數據並同時訂閱任意數量的主題。因為在ROS2中,應用層方面,去中心化master后,所有的節點都是同一個級別。即可以實現一對多,多對一,多對多的通信模式。如圖3所示。

話題是數據在節點之間通信的主要方式之一,因此可以在系統的不同部分之間進行流動。
3. ROS2服務
服務(Server)在ROS2的通信網絡中,是節點的另一種通信方式。服務通信是基於C/S模型。而不是話題通信中的發布/訂閱模型。服務僅僅在客戶端調用時才提供。
圖4展示了一對一的服務通信模型,圖5展示了一對多的服務通信模型。

4. ROS2動作
動作通信是ROS2中的一種通信類型。用於長時間運行的任務。主要由三個部分組成:目標(goal)、反饋(feedback)、結果(result)。動作通信建立在話題和服務之上。類似與服務的C/S通信模型,但是不同之處在於,客戶端可以隨時取消動作。動作還提供穩定的反饋,而不是返回單一響應的服務。如圖6所示。

結語
知其然,知其所以然。雖然ROS2的通信在底層做了修改,但是基礎概念仍然沿用ROS1。因此,本文所提到的ROS2通信模型也適用於ROS1,可以幫助大家快速理解ROS的通信模型。
- End -
技術發展的日新月異,阿木實驗室將緊跟技術的腳步,不斷把機器人行業最新的技術和硬件推薦給大家。看到經過我們培訓的學員在技術上突飛猛進,是我們培訓最大的價值。如果你在機器人行業,就請關注我們的公眾號,我們將持續發布機器人行業最有價值的信息和技術。