ROS 2 index翻译(五)——关于ROS 2客户端库
1.概述
客户端库(RCL,ROS Client Library)是允许用户执行其ROS代码的API。用户使用客户端库来访问ROS概念,如节点、主题、服务等。客户端库包含多种编程语言,因此用户可以使用最适合其应用程序的语言编写ROS代码。例如,您可能更喜欢在Python中编写可视化工具,因为它可以更快地进行原型设计迭代,而对于系统中与效率相关的部分,可以用C ++更好地实现节点。
用不同客户端库编写的节点能够彼此共享消息,因为所有客户端库都实现了代码生成器,这些代码生成器为用户提供了与相应语言的ROS接口文件交互的能力。
除了特定语言的通信工具之外,客户端库还向用户展示了使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接口公开。
除了使客户端库轻量化之外,拥有通用核的另一个优点是不同语言之间的行为更加一致。如果对核心RCL中的功能的逻辑/行为进行任何更改—比如命名空间—所有使用RCL的客户端库都会反映这些更改。此外,拥有通用核心意味着在修复bugs时,维护多个客户端库的工作量会减少。
4.针对特定语言的功能
需要针对特定语言的功能/属性的客户端库概念未在RCL中实现,而是在每个客户端库中实现。例如,“旋转”函数使用的线程模型其应用将针对特定的客户端库的语言。
5.演示
对于在使用rclpy的
发布者和使用rclcpp的订阅者之间的消息交换攻略,我们建议您从17:25开始观看this ROSCon talk。
6.与ROS 1比较
在ROS 1中,所有客户端库都是“从头开始”开发的。这允许ROS 1 Python客户端库纯粹用Python实现,这带来了诸如不需要编译代码等好处。但是,命名约定和行为在客户端库之间并不总是一致的,bug修复必须在多处进行,并且有许多功能只在一个客户端库(例如UDPROS)中实现。
7.总结
通过使用通用核心ROS客户端库,以各种编程语言编写的客户端库更易于编写并具有更一致的行为。
英文网址:https://index.ros.org/doc/ros2/Concepts/ROS-2-Client-Libraries/