ROS2官方教程:ROS2 概念概覽

這是我對ROS官方ROS2教程的翻譯,純個人理解,對於文中的關鍵詞彙或不確定的語句標註了原文,如有錯誤或翻譯問題還請指出。

原文:https://index.ros.org/doc/ros2/Overview-of-ROS-2-concepts/

ROS2 概念概覽

ROS是一個基於匿名消息發佈(Publish)或訂閱(Subscribe)機制的中間層,這種機制可以幫助消息能夠在不同的ROS進程之間傳輸。

在ROS2系統中的核心是ROS圖(ROS Graph),ROS圖指的是一個ROS系統中的節點網絡以及它們之間通信時的聯絡。

快速概覽圖的概念

  • 節點(Nodes):一個節點就是一個ROS的實例,每個實例可以通過ROS來完成與其他節點之間的通信;
  • 消息(Messages):當發佈或訂閱一個主題(Topic)時,ROS的消息類型;
  • 主題(Topics):節點可以發佈消息到主題,或者訂閱主題從而來接收消息;
  • 發現(Discovery):一個自動化的過程,允許節點決定如何與其他節點進行通信;

節點

在ROS圖中,節點是必要的組成部分。ROS節點使用ROS客戶端程序庫(ROS Client Library, RCL)來實現與其他節點之間的通信。節點可以從主題中發佈或訂閱消息,同時也可以提供或使用服務。每個節點具有一些可以配置的參數。節點之間的通信是通過一個分佈式的發現進程(distributed discovery process)來建立的。節點可以在同一個進程中,也可以在不同的進程中,甚至是在不同的機器中。這些概念將會在之後的章節描述中詳細說明。

客戶端程序庫

ROS客戶端程序庫允許不同編程語言的節點之間進行通信。ROS客戶端程序庫是實現最通用功能的核心,實現了不同語言的ROS API所需要的通用功能。所以與特定編程語言相關的ROS客戶端程序庫是很容易編寫的,而且他們有很多一致的行爲特性。

ROS2的團隊維護着以下兩個客戶端程序庫:

  • rclcpp :是C++的客戶端程序庫
  • rclpy :是Python的客戶端程序庫

另外,其他語言的客戶端程序庫已經在ROS社區中被開發,可以參考ROS2 Client Libraries: https://index.ros.org/doc/ros2/Concepts/ROS-2-Client-Libraries/

發現

通過ROS2底層的中間件來實現自動化發現節點的任務,可以簡單描述如下:

  1. 當一個節點啓動後,它會向處於同一個ROS域(ROS demain)網絡中的其他節點廣播它存在的狀態,通過設置ROS_DOMAIN_ID環境變量來實現。其他節點響應這個廣播並回應各自的信息,從而建立起準確的連接,進而可以實現通信;
  2. 同時,所有節點週期性的廣播它存在的狀態,從而可以在新的節點建立之後能夠與該節點建立通信,甚至在最初的發現機制之後就可以建立連接;
  3. 當一個節點關閉時,它會廣播關閉的消息給其他節點;

節點僅僅會與兼容的QoS(Quality of Service)設置的其他節點建立連接。

一個例子

在一個終端中,啓動一個C++節點來發布消息到一個主題:

ros2 run demo_nodes_cpp talker

在另一個終端中,啓動第二個節點,可以選擇Python節點,用來從同一個主題中接收消息:

ros2 run demo_nodes_py listener

可以發現,兩個節點之間自動的實現了通信,開始交換數據。

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