服务
在ROS 2中,服务是指远程过程调用。换句话说,一个节点可以对另一个节点进行远程过程调用,后者将进行计算并返回结果。
这种结构反映在服务消息定义的外观上:
uint32 request
---
uint32 response
在ROS 2中,服务应该快速返回,因为客户端通常在等待结果。服务不应该用于长时间运行的进程,特别是可能需要在异常情况下被抢占的进程。如果您有一个需要进行长时间计算的服务,请考虑使用 动作。
服务由服务名称标识,其外观与主题名称相似(但位于不同的命名空间中)。
一个服务由两个部分组成:服务服务器和服务客户端。
服务服务器是接受远程过程请求并对其进行计算的实体。例如,假设ROS 2消息包含以下内容:
uint32 a
uint32 b
---
uint32 sum
服务服务器是接收此消息的实体,将``a``和``b``相加,并返回``sum``。
注解
每个服务名称应该只有一个服务服务器。如果同一个服务名称下存在多个服务服务器,那么在多个服务服务器的情况下,不确定哪个服务服务器将接收客户端请求。
服务客户端是一个实体,它会请求远程服务服务器代表它执行计算。继续以上面的示例,服务客户端是创建包含``a``和``b``的初始消息,并等待服务服务器计算总和并返回结果的实体。
与服务服务器不同,可以使用相同的服务名称创建任意数量的服务客户端。