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/

相关文章
相关标签/搜索