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社区的成员已建立了其余客户端库:工具
3.通用功能:RCL
客户端库中的大多数功能并不特定于客户端库的编程语言。例如,在理想状况下,参数的行为和命名空间的逻辑应该在全部编程语言中都是相同的。所以,客户端库不是从头开始实现通用功能,而是使用通用核心ROS客户端库(RCL)接口,该接口实现非特定语言的ROS概念的逻辑和行为。因此,客户端库只须要使用外部函数接口包装RCL中的通用功能。这使客户端库更轻量化,更容易开发。C语言一般是用于客户端库包装的最简单的语言,因此RCL通用功能使用C接口公开。this
除了使客户端库轻量化以外,拥有通用核的另外一个优势是不一样语言之间的行为更加一致。若是对核心RCL中的功能的逻辑/行为进行任何更改—好比命名空间—全部使用RCL的客户端库都会反映这些更改。此外,拥有通用核心意味着在修复bugs时,维护多个客户端库的工做量会减小。spa
4.针对特定语言的功能
须要针对特定语言的功能/属性的客户端库概念未在RCL中实现,而是在每一个客户端库中实现。例如,“旋转”函数使用的线程模型其应用将针对特定的客户端库的语言。设计
5.演示
对于在使用rclpy的
发布者和使用rclcpp的订阅者之间的消息交换攻略,咱们建议您从17:25开始观看this ROSCon talk。code
6.与ROS 1比较
在ROS 1中,全部客户端库都是“从头开始”开发的。这容许ROS 1 Python客户端库纯粹用Python实现,这带来了诸如不须要编译代码等好处。可是,命名约定和行为在客户端库之间并不老是一致的,bug修复必须在多处进行,而且有许多功能只在一个客户端库(例如UDPROS)中实现。
7.总结
经过使用通用核心ROS客户端库,以各类编程语言编写的客户端库更易于编写并具备更一致的行为。
英文网址:https://index.ros.org/doc/ros2/Concepts/ROS-2-Client-Libraries/