概念
概念概述提供了关于ROS 2关键方面的相对高阶的通用背景信息。 [Alyssa@9515]
核心堆栈开发人员概念(Core Stack Developer Concepts)是更详细的概念文章,面向计划修改或为ROS 2核心做出贡献的开发人员: [Alyssa@9516]
ROS 2概念快速概述
ROS 2是基于匿名发布/订阅机制的中间件,允许消息在不同的ROS进程之间传递。
任何ROS 2系统的核心是ROS图(graph)。ROS图(graph)是指ROS系统中的节点网络以及它们之间通信的连接。 [Alyssa@9519]
图形(graph)概念 [Alyssa@9520]
节点: 节点是使用ROS与其他节点通信的实体。
消息: 订阅或发布话题时使用的ROS数据类型。
话题: 节点可以发布消息到某个话题以及订阅某个话题接收消息。 [Alyssa@9523]
发现: 节点决定如何相互交流的自动过程。 [待校准@9524]
节点
节点是ROS图(graph)中的参与者。ROS节点使用ROS客户端库与其他节点通信。节点可以发布或订阅话题。节点也可以提供或使用服务和动作(Action)。存在与节点关联的可配置参数。节点之间的连接是通过分布式发现过程建立的。节点可以位于同一进程、不同进程或不同机器上。这些概念将在接下来的章节中更详细地描述。 [Alyssa@9526]
客户端库 [待校准@9527]
ROS客户端库允许使用不同编程语言编写的节点进行通信。有一个核心ROS客户端库 (RCL),可实现不同语言的ROS APIs所需的通用功能。这使得特定于语言的客户端库更易于编写,并且具有更一致的行为。 [Alyssa@9528]
以下客户端库由ROS 2团队维护:
rclcpp = C++客户端库 [Alyssa@9530]
rclpy = Python客户端库 [待校准@9531]
此外,ROS社区还开发了其他客户端库。相关更多详细信息,请参阅 ROS 2 Client Libraries 文章。 [Alyssa@9532]
发现
发现节点是通过ROS 2的底层中间件自动进行的,总结如下: [Alyssa@9534]
启动节点时,它会将其存在广播给具有相同ROS域 (使用ROS_DOMAIN_ID环境变量设置) 的网络上的其他节点。节点用关于它们自己的信息来回应这个广播,这样就可以建立适当的连接,并且节点间可以进行通信。 [Alyssa@9535]
节点周期的广播它们的存在,以便即使在初始发现期之后,也可以与新发现的实体建立连接。 [Alyssa@9536]
当节点离线时,向其他节点广播自己离线的消息。 [Alyssa@9537]
只有当其他节点具有兼容的 服务质量 设置时,节点才会与它们建立连接。 [Alyssa@9538]
以 talker-listener demo 为例。在一个终端中运行 C++ talker节点将发布有关某个话题的消息,而在另一个终端中运行的Python listener节点将订阅同一话题的消息。 [Alyssa@9539]
您应该看到这些节点自动的发现彼此,并开始交换消息。 [Alyssa@9540]