当前位置:   article > 正文

【ROS 笔记4】service 通信(通俗理解)

【ROS 笔记4】service 通信(通俗理解)

1. 前言

ROS(Robot Operating System)中,客户端与服务端的通信是一种非常核心的交互方式,允许节点之间进行同步通信。具体来说,服务端(Service Server)提供特定的服务,客户端(Service Client)则向服务端发送请求并等待响应。这种通信方式适用于需要等待结果才能继续执行的情况,如获取传感器数据或执行计算任务。

2. 定义服务(service)

首先,我们需要定义一个服务,包括请求和响应的消息类型。这通常在一个.srv文件中完成,该文件位于你的ROS包的srv目录下。

例如,如果我们要创建一个服务来执行两个整数的加法,我们可能会定义一个名为AddTwoInts.srv的文件,内容如下:

  1. # 定义一个AddTwoInts.srv 文件
  2. # 内容如下
  3. int64 a
  4. int64 b
  5. ---
  6. int64 sum

这里:

---之前的部分是请求消息(客户端发送给服务端的),

---之后的部分是响应消息(服务端返回给客户端的)。

3. 建立服务端

创建服务定义后,下一步是实现服务端节点,该节点将提供服务。

在Python中,服务端的实现大概是这样的:

  1. #!/usr/bin/env python
  2. import rospy
  3. from your_package.srv import AddTwoInts, AddTwoIntsResponse
  4. def handle_add_two_ints(req):
  5. print("Returning [%s + %s = %s]" % (req.a, req.b, (req.a + req.b)))
  6. return AddTwoIntsResponse(req.a + req.b)
  7. def add_two_ints_server():
  8. rospy.init_node('add_two_ints_server')
  9. s = rospy.Service('add_two_ints', AddTwoInts, handle_add_two_ints)
  10. print("Ready to add two ints.")
  11. rospy.spin()
  12. if __name__ == "__main__":
  13. add_two_ints_server()
在这个例子中,我们首先导入必要的ROS库和服务消息类型。handle_add_two_ints函数是服务的实际逻辑,它接收请求,执行操作,并返回响应。通过rospy.Service创建服务,指定服务名称、服务类型,以及处理函数。

4. 建立客户端(也叫请求端)

有了服务端,我们还需要一个客户端节点来发送请求并接收响应。

客户端的Python代码可能如下所示:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/379843
推荐阅读
相关标签
  

闽ICP备14008679号