服务
在 ROS 2 中,服务是指远程过程调用。 换句话说,一个节点可以对另一个节点进行远程过程调用,该节点将进行计算并返回结果。
这种结构反映在服务消息定义的外观上:
uint32 request
---
uint32 response
在 ROS 2 中,服务应快速返回,因为客户端通常正在等待结果。 服务不应用于长时间运行的进程,尤其是可能需要在特殊情况下被抢占的进程。 如果您的服务将执行长时间运行的计算,请考虑改用 action。
服务由服务名称标识,该名称看起来很像主题名称(但位于不同的命名空间中)。
服务由两部分组成:服务服务器和服务客户端。
服务服务器
服务服务器是接受远程过程请求并对其执行某些计算的实体。 例如,假设 ROS 2 消息包含以下内容:
uint32 a
uint32 b
---
uint32 sum
服务服务器将是接收此消息、将“a”和“b”相加并返回“sum”的实体。
Note
每个服务名称只能有一个服务服务器。 如果同一服务名称上有多个服务服务器,则未定义哪个服务服务器将接收客户端请求。
Service client
服务客户端是一个实体,它将请求远程服务服务器代表其执行计算。 根据上面的例子,服务客户端是创建包含“a”和“b”的初始消息的实体,并等待服务服务器计算总和并返回结果。
与服务服务器不同,可以使用相同服务名称的任意数量的服务客户端。