关于服务
在 ROS 2 中,服务(service)指的是远程过程调用。 也就是说,一个节点可以向另一个节点发起远程过程调用,后者执行计算并返回结果。
这种结构体现在服务消息的定义形式上:
uint32 request---uint32 response在 ROS 2 中,服务应当快速返回,因为客户端通常在等待结果。 服务不适用于长时间运行的流程,尤其是可能因异常情况而需要被中断的流程。 如果需要执行长时间计算,请考虑改用 动作。
服务通过服务名称标识,服务名称的形式与话题名称类似(但位于不同的命名空间中)。
一个服务由两部分组成:服务端(service server)和服务客户端(service client)。
服务端是接收远程过程调用请求并执行相应计算的实体。 例如,假设 ROS 2 消息定义如下:
uint32 auint32 b---uint32 sum服务端就是接收此消息、将 a 和 b 相加并返回 sum 的实体。
注意: 每个服务名称应只对应一个服务端。 如果同一服务名称对应多个服务端,哪个服务端会收到客户端请求是不确定的。
服务客户端是请求远程服务端执行计算的实体。
沿用上面的例子,服务客户端负责创建包含 a 和 b 的请求消息,并等待服务端计算总和后返回结果。
与服务端不同,使用同一服务名称的服务客户端可以有任意数量。