ROS 2概念概述

ROS是一种基于匿名发布/订阅( publish/subscribe)机制的中间件,允许在不同的ROS进程之间传递消息。任何ROS 2系统的核心是ROS图( graph)。 ROS图指的是ROS系统中的节点网络以及它们之间通信的连接。

图概念的快速概述

  • 节点(Nodes):节点是使用ROS与其他节点通信的实体。
  • 消息(Messages):订阅或发布一个主题时使用的ROS数据类型。
  • 主题(Topics):节点可以将消息发布到主题,也可以订阅主题以接收消息。
  • 发现(Discovery):节点确定如何相互通信的自动化过程。

节点(Nodes)

节点是ROS图中的参与者。 ROS节点使用ROS客户端库(Client Libraries)与其他节点通信。 节点可以发布或订阅主题。 节点还可以提供或使用服务。 存在与节点相关联的可配置参数。 节点之间的连接通过分布式发现过程建立。 节点可以位于相同或者不同的进程中,也可以位于不同的机器上。 这些概念将在后面的章节中更详细地描述。

客户端库(Client Libraries)

ROS客户端库允许以不同编程语言编写的节点进行通信。 有一个核心ROS客户端库(RCL),它实现了不同语言的ROS API所需的通用功能。 这使得特定于语言的客户端库更易于编写,并且它们具有更一致的行为。

以下客户端库由ROS 2团队维护:

  • rclcpp = C ++客户端库
  • rclpy = Python客户端库

此外,ROS社区还开发了其他客户端库。 有关更多详细信息,请参阅ROS 2客户端库文章。

发现(Discovery)

节点的发现通过ROS 2的底层中间件自动发生。它可以总结如下:

1、当一个节点启动时,它会将其存在广播给具有相同ROS域的网络上的其他节点(使用ROS_DOMAIN_ID环境变量设置),其他节点响应此广播时发布自己的信息,以便节点间可以进行适当的连接并且可以进行通信。

2、节点定期广播其存在,这样即使在初始发现期之后也可以与新发现的实体建立连接。

3、节点在离线时通告其他节点。

节点只和与他们具有兼容的服务质量设置(Qos)的其他节点建立连接。

例子:talker-listener

打开两个终端分别执行两条命令:

ros2 run demo_nodes_cpp talker

ros2 run demo_nodes_py listener

猜你喜欢

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