警告
您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.
关于 ROS 2 客户端库
概述
客户端库是允许用户实现其 ROS 代码的应用程序接口。通过客户端库,用户可以访问节点、主题、服务等 ROS 概念。客户端库有多种编程语言,因此用户可以使用最适合其应用的语言编写 ROS 代码。例如,你可能更喜欢用 Python 编写可视化工具,因为它能让原型迭代更快,而对于系统中注重效率的部分,用 C++ 来实现节点可能更好。
使用不同客户端库编写的节点能够相互共享信息,因为所有客户端库都有代码生成器,能让用户以各自的语言与 ROS 界面文件进行交互。
除了特定语言的通信工具外,客户机库还向用户展示了使 ROS 成为 "ROS "的核心功能。例如,下面列出了通常可以通过客户端库访问的功能:
名称和命名空间
时间(真实或模拟)
参数
控制台记录
穿线模式
进程内通信
支持的客户端库
C++ 客户端库 (rclcpp
)和 Python 客户端库 (rclpy
) 都是客户端库,利用 RCL 中的共同功能。
C++ 和 Python 客户端库由 ROS 2 核心团队维护,ROS 2 社区成员还创建了其他客户端库:
通用功能:RCL
客户机程序库中的大部分功能并不是客户机程序库的编程语言所特有的。例如,参数的行为和命名空间的逻辑最好在所有编程语言中都相同。正因为如此,客户机库不需要从头开始实现通用功能,而是使用一个通用的核心 ROS 客户机库(RCL)接口来实现 ROS 概念的逻辑和行为,而这些功能与语言无关。因此,客户端库只需用外来函数接口封装 RCL 中的通用功能即可。这样,客户端库就更精简,也更易于开发。因此,RCL 的常用功能都是通过 C 语言接口实现的,因为 C 语言通常是客户端库最容易封装的语言。
除了使客户端库变得轻量级之外,使用通用核心的一个好处是不同语言之间的行为更加一致。如果对 RCL 核心功能的逻辑/行为(例如命名空间)做出任何更改,所有使用 RCL 的客户端库都将反映这些更改。此外,有了共同的核心,维护多个客户端库的错误修复工作也会变得更轻松。
特定语言功能
需要特定语言特点/属性的客户机库概念不在 RCL 中实现,而是在每个客户机库中实现。例如,"spin "函数使用的线程模型将根据客户机库的语言进行特定实现。
演示
如需了解信息发布者之间的信息交换情况,请使用 rclpy
的用户和使用 rclcpp
我们鼓励您观看 这次 ROSCon 演讲 从 17:25 开始 (这里是幻灯片).
与 ROS 1 的比较
在 ROS 1 中,所有客户端库都是 "从头开始 "开发的。例如,这使得 ROS 1 Python 客户端库可以完全用 Python 实现,从而带来了无需编译代码等好处。然而,客户端库之间的命名约定和行为并不总是一致的,错误修复必须在多个地方进行,而且有很多功能只能在一个客户端库中实现(如 UDPROS)。
摘要
通过使用通用的核心 ROS 客户端库,用各种编程语言编写的客户端库更容易编写,行为也更一致。