服务

在ROS 2中,服务是指远程过程调用。换句话说,一个节点可以对另一个节点进行远程过程调用,后者将进行计算并返回结果。

这种结构反映在服务消息定义的外观上:

uint32 request
---
uint32 response

在ROS 2中,服务应该快速返回,因为客户端通常在等待结果。服务不应该用于长时间运行的进程,特别是可能需要在异常情况下被抢占的进程。如果您有一个需要进行长时间计算的服务,请考虑使用 动作

服务由服务名称标识,其外观与主题名称相似(但位于不同的命名空间中)。

一个服务由两个部分组成:服务服务器和服务客户端。

服务服务器

服务服务器是接受远程过程请求并对其进行计算的实体。例如,假设ROS 2消息包含以下内容:

uint32 a
uint32 b
---
uint32 sum

服务服务器是接收此消息的实体,将``a``和``b``相加,并返回``sum``。

注解

每个服务名称应该只有一个服务服务器。如果同一个服务名称下存在多个服务服务器,那么在多个服务服务器的情况下,不确定哪个服务服务器将接收客户端请求。

服务客户端

服务客户端是一个实体,它会请求远程服务服务器代表它执行计算。继续以上面的示例,服务客户端是创建包含``a``和``b``的初始消息,并等待服务服务器计算总和并返回结果的实体。

与服务服务器不同,可以使用相同的服务名称创建任意数量的服务客户端。