ROS 2 index翻譯(五)——關於ROS 2客戶端庫

1.概述
客戶端庫(RCL,ROS Client Library)是容許用戶執行其ROS代碼的API。用戶使用客戶端庫來訪問ROS概念,如節點、主題、服務等。客戶端庫包含多種編程語言,所以用戶能夠使用最適合其應用程序的語言編寫ROS代碼。例如,您可能更喜歡在Python中編寫可視化工具,由於它能夠更快地進行原型設計迭代,而對於系統中與效率相關的部分,能夠用C ++更好地實現節點。編程

用不一樣客戶端庫編寫的節點可以彼此共享消息,由於全部客戶端庫都實現了代碼生成器,這些代碼生成器爲用戶提供了與相應語言的ROS接口文件交互的能力。api

除了特定語言的通訊工具以外,客戶端庫還向用戶展現了使ROS成爲「ROS」的核心功能。例如,如下是一般能夠經過客戶端庫訪問的功能列表:編程語言

  • 名稱和名稱空間
  • 時間(真實的或模擬的)
  • 參數
  • 控制檯記錄
  • 線程模型
  • 進程內通訊

2.支持的客戶端庫
C ++客戶端庫(rclcpp)和Python客戶端庫(rclpy)都是利用RCL中通用功能的客戶端庫。函數

雖然C ++和Python客戶端庫由核心ROS 2團隊維護,但ROS 2社區的成員已建立了其餘客戶端庫:工具

  • JVM and Android
  • Objective C and iOS
  • C#
  • Swift
  • Node.js
  • Ada

3.通用功能:RCL
客戶端庫中的大多數功能並不特定於客戶端庫的編程語言。例如,在理想狀況下,參數的行爲和命名空間的邏輯應該在全部編程語言中都是相同的。所以,客戶端庫不是從頭開始實現通用功能,而是使用通用核心ROS客戶端庫(RCL)接口,該接口實現非特定語言的ROS概念的邏輯和行爲。因此,客戶端庫只須要使用外部函數接口包裝RCL中的通用功能。這使客戶端庫更輕量化,更容易開發。C語言一般是用於客戶端庫包裝的最簡單的語言,因此RCL通用功能使用C接口公開。this

除了使客戶端庫輕量化以外,擁有通用核的另外一個優勢是不一樣語言之間的行爲更加一致。若是對核心RCL中的功能的邏輯/行爲進行任何更改—好比命名空間—全部使用RCL的客戶端庫都會反映這些更改。此外,擁有通用核心意味着在修復bugs時,維護多個客戶端庫的工做量會減小。spa

此處可找到RCL的API文件。線程

4.針對特定語言的功能
須要針對特定語言的功能/屬性的客戶端庫概念未在RCL中實現,而是在每一個客戶端庫中實現。例如,「旋轉」函數使用的線程模型其應用將針對特定的客戶端庫的語言。設計

5.演示
對於在使用rclpy的發佈者和使用rclcpp的訂閱者之間的消息交換攻略,咱們建議您從17:25開始觀看this ROSCon talkcode

6.與ROS 1比較
在ROS 1中,全部客戶端庫都是「從頭開始」開發的。這容許ROS 1 Python客戶端庫純粹用Python實現,這帶來了諸如不須要編譯代碼等好處。可是,命名約定和行爲在客戶端庫之間並不老是一致的,bug修復必須在多處進行,而且有許多功能只在一個客戶端庫(例如UDPROS)中實現。

7.總結
經過使用通用核心ROS客戶端庫,以各類編程語言編寫的客戶端庫更易於編寫並具備更一致的行爲。

 

英文網址:https://index.ros.org/doc/ros2/Concepts/ROS-2-Client-Libraries/

相關文章
相關標籤/搜索