ROS 2客户端库(Client Libraries)

概述

客户端库是允许用户实现其ROS代码的API。它们是用户用来访问ROS概念(如节点,主题,服务等)的内容。客户端库有各种编程语言,因此用户可以使用最适合其应用程序的语言编写ROS代码。例如,您可能更喜欢在Python中编写可视化工具,因为它可以更快地进行原型设计迭代,而对于系统中与效率相关的部分,可以在C ++中更好地实现节点。

使用不同客户端库编写的节点能够彼此共享消息,因为所有客户端库都实现了代码生成器,这些代码生成器为用户提供了与相应语言的ROS接口文件交互的能力。

除了特定语言的通信工具之外,客户端库还向用户开放了使ROS成为“ROS”的核心功能。例如,以下是可以通过客户端库访问的典型功能列表:

  • 名称和名称空间(Names and namespaces)

  • 时间(真实的或模拟的)(Time (real or simulated))

  • 参数(Parameters)

  • 控制台记录(Console logging)

  • 线程模型(Threading model)

  • 进程内通信(Intra-process communication)

支持的客户端库

C ++客户端库(rclcpp)和Python客户端库(rclpy)都是使用RCL中常用功能的客户端库。C ++和Python客户端库由核心ROS 2团队维护,另外,ROS 2社区的成员已创建了其他客户端库:

通用功能:RCL

客户端库中的大多数功能并非特定于客户端库的编程语言。例如,参数的行为和命名空间的逻辑在理想情况下应该在所有编程语言中都是相同的。因此,客户端库不是从头开始实现通用功能,而是使用通用核心ROS客户端库(RCL)接口,该接口实现非语言特定的ROS概念的逻辑和行为。因此,客户端库只需要使用外部函数接口包装RCL中的公共功能。这使客户端库更薄,更容易开发。因此,C语言通常是用于客户端库包装的最简单的语言,因此公共RCL功能通过C接口公开。

除了使客户端库轻量化之外,拥有共同核心的一个优点是语言之间的行为更加一致。如果对核心RCL中的功能的逻辑/行为进行任何更改 - 例如 - 所有使用RCL的客户端库都会反映这些更改。此外,拥有共同核心意味着在修复错误时,维护多个客户端库变得不那么重要了。

可以在此处找到RCL的API文档。

特定于语言的功能

需要特定于语言的功能/属性的客户端库概念未在RCL中实现,而是在每个客户端库中实现。例如,“旋转”函数使用的线程模型将具有特定于客户端库的语言的实现。

范例

有关发布者rclpy和订阅者之间的消息交换的演练rclcpp,我们建议您从17:25开始观看此ROSCon演讲(这里是幻灯片)

与ROS 1的比较

在ROS 1中,所有客户端库都是“从头开始”开发的。例如,这允许ROS 1 Python客户端库纯粹用Python实现,这带来了诸如不需要编译代码等好处。但是,命名约定和行为在客户端库之间并不总是一致的,错误修复必须在多个位置完成,并且有许多功能只在一个客户端库(例如UDPROS)中实现。

总结

通过使用通用核心ROS客户端库,以各种编程语言编写的客户端库更易于编写并具有更一致的行为。

RCL API链接:http://docs.ros2.org/latest/api/rcl/

 

 

猜你喜欢

转载自blog.csdn.net/wsc820508/article/details/81285866