在继续详细描述研究工作之前,必须详细了解通信协议。本章说明了 ROS 的当前实现 Groovy 定义的协议。它是我们的框架采用的一种,与 ROS 本身具有本机兼容性。
以下是术语中经常出现的术语的定义ROS 环境,如 ROS 文档所述。读者有意识有些术语在 ROS 之外可能有不同的含义,而现在由于缺少有效的同义词,文档可能会产生歧义。
图资源名称是 ROS 中提供封装的重要机制。每个资源都在一个命名空间中定义,它可以与许多其他资源共享。通常,资源可以在其名称空间内创建资源,并且可以访问其名称空间内或之上的资源。可以在不同名称空间中的资源之间建立连接,但这通常是由两个名称空间之上的集成代码完成的。这种封装将系统的不同部分隔离开来,以免意外获取错误命名的资源或全局劫持名称。名称是相对解析的,因此资源不需要知道它们在哪个命名空间中。这简化了编程,因为可以编写一起工作的节点,就好像它们都在顶级命名空间中一样。当这些节点被集成到一个更大的系统中时,它们可以被下推到定义它们的代码集合的命名空间中。
计算图是一个点对点网络,它由以任何网状拓扑连接在一起的节点组成,交换主题或提供服务。
节点是执行计算的进程。节点合并一起形成一个图形,并使用流式传输主题、RPC 服务和参数服务器相互通信。这些节点是旨在以细粒度的方式运行;机器人控制系统将通常包括许多节点。例如,一个节点控制一台激光器测距仪,一个节点控制机器人的车轮电机,一个节点执行定位,一个节点执行路径规划,一个节点提供系统的图形视图,等等。
ROS 中节点的使用为整个系统提供了几个好处。由于崩溃与个人隔离,因此具有额外的容错能力节点。与单片系统相比,代码复杂性降低了。实现细节也被很好地隐藏,因为节点暴露了最小的图的其余部分和替代实现的 API,即使在其他编程语言,很容易被替代。所有运行的节点都有一个唯一标识的图资源名称他们到系统的其余部分。
Master节点提供命名和注册服务到 ROS 系统中的其余节点。它跟踪发布者和主题和服务的订阅者。大师的角色是使各个 ROS 节点能够相互定位。一旦这些节点已经找到彼此,他们通过点对点连接进行通信。主节点还提供参数服务器。
通过发布消息来相互通信话题。消息是一种简单的数据结构,包含类型字段。标准原始类型(整数、浮点数、布尔值等)受支持,原始类型数组也是如此。消息可以包括任意嵌套的结构和数组。节点还可以交换请求和响应消息作为ROS 服务调用。
主题是节点交换消息的命名总线。主题具有匿名发布/订阅语义,这将信息的生产与其消费分离开来。通常,节点不知道它们正在与谁通信。相反,对数据感兴趣的节点订阅相应的主题,而产生数据的节点发布到相应的主题。一个主题可以有多个发布者和订阅者。主题旨在用于单向的流式通信。需要执行远程过程调用的节点,即接收对请求的响应,应该改用服务。还有用于维护全局参数的参数服务器。每个主题都是由用于向其发布的 ROS 消息类型强类型化的,节点只能接收具有匹配类型的消息。 Master 不强制发布者之间的类型一致性,但是除非类型匹配,否则订阅者不会建立消息传输。此外,所有 ROS 客户端都会检查以确保 MD5 匹配。此检查确保 ROS 节点是从一致的代码库编译而来的。
服务用于执行原始数据的请求/响应调用。一个服务由交换的两条消息(请求和响应)组成以类似于主题消息的方式。如果多个节点通告相同的服务,尝试时只会考虑最后一个建立服务流。
参数是一个全局定义的变量,由Parameter存储服务器。参数使用正常的 ROS 命名约定命名。这意味着 ROS 参数具有与用于主题和节点的命名空间。这个层次结构是为了保护冲突的参数名称。分层方案还允许要单独或作为树访问的参数。
特定主题的发布者节点生成并发送 TCPROS给所有主题订阅者的消息。
特定主题的订阅者节点接收 TCPROS 消息来自所有主题发布者。
参数服务器是共享的多变量字典可通过网络 API 访问。节点使用这个服务器来存储和在运行时检索参数。由于它不是为高性能而设计的,它最适用于静态、非二进制数据,例如配置参数。
它旨在全局可见,以便工具可以轻松检查系统配置状态,必要时修改
Parameter Server使用XML-RPC实现,运行在内部ROS Master 的,这意味着它的 API 可以通过正常访问XML-RPC 调用。
由一个进程公开的一组软件方法,以便其他进程可以调用它。
节点 API 地址的文本表示,格式为:
协议://主机:端口
其中 protocol 是 http 或 rosrpc,host 是主机名或
一个 IP 地址。端口是 API 端口号。
一种在远程机器上调用方法的技术,并收到它的结果。
可移植的基于 XML 的协议,用于执行远程过程调用。有关详细信息,请参见下文。
主题/服务二进制数据流使用的基于 TCP 的协议。有关详细信息,请参见下文。