您正在阅读的是旧版本但仍受支持的 ROS 2 文档。 Jazzy.

服务

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

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

uint32 要求
---
uint32 回应

在 ROS 2 中,服务应快速返回,因为客户端一般都在等待结果。服务绝不能用于运行时间较长的进程,尤其是在特殊情况下可能需要抢占先机的进程。如果您的服务将进行长时间运行的计算,请考虑使用 行动 而不是

服务由服务名标识,服务名看起来很像主题名(但属于不同的名称空间)。

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

服务服务器

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

uint32 a
uint32 b
---
uint32 数额

服务服务器将是接收该信息的实体,并在信息中添加 ab 并返回 数额.

备注

每个服务名只能有一个服务服务器。如果同一服务名上有多个服务服务器,那么哪个服务服务器将接收客户端请求还未确定。

服务客户

服务客户端是请求远程服务服务器代其执行计算的实体。根据上面的例子,服务客户端是创建初始信息的实体,该信息包含 ab并等待服务服务器计算总和并返回结果。

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