ROS Services

先读这一篇

定义服务

ROS服务允许节点之间存在请求/响应通信。在提供服务的节点内,请求消息由函数或方法处理。一旦请求被成功处理,提供服务的节点就会将消息发送回请求者节点。

在python中,创建ROS服务语法如下:

service = rospy.Service(‘service_name’, serviceClassName, handler)

service_name是提供给服务的名称。 其他节点将使用此名称来指定他们向哪个服务发送请求。
serviceClassName来自服务定义所在的文件名。 您将在下一课堂概念中看到更多关于此的信息,但每个服务都有一个以.srv文件提供的定义; 这是一个文本文件,为请求和响应提供正确的消息类型。
handler是处理传入服务消息的函数或方法的名称。 每次调用服务时都会调用此函数,并将来自服务调用的消息作为参数传递给处理函数。 handler应该返回适当的服务响应消息。

使用服务

可以直接从命令行调用服务,并且您将在即将到来的arm_mover类概念中看到这个示例。
另一方面,要使用另一个节点内的ROS服务,您将定义一个ServiceProxy,它提供将消息发送到服务的接口:

service_proxy = rospy.ServiceProxy(‘service_name’, serviceClassName)

然后可以使用ServiceProxy发送请求的一种方式如下:

msg = serviceClassNameRequest()
#update msg attributes here to have correct data
response = service_proxy(msg)

在上面的代码中,通过调用serviceClassNameRequest()方法创建一个新的服务消息。此方法由rospy提供,其名称通过将Request()附加到用于serviceClassName的名称来给出。由于消息是新消息,消息属性应该更新为具有适当的数据。然后,使用消息调用service_proxy,并存储响应。

有关将数据传递给service_proxy的其他方法,请参阅此处的ROS文档

上一篇
下一篇

猜你喜欢

转载自blog.csdn.net/u011280600/article/details/80272595
ROS