ROS编写简单的Service和Client (Python)

编写简单的Service和Client (Python

  • 写一个服务节点
  • 源码
  • 写一个客户端节点
    • 源码
  • 测试自己写的服务端和客户端节点
  • 参考文献


写一个学习笔记方便自己以后回查


写一个服务节点

我们写一个服务节点,请求两个int, 返回这两个int的和

roscd beginner_tutorials

在此之前请确保你搞过之前那个srv文件和msg文件的教程

源码

scripts/add_two_ints_server.py 文件下粘贴上下面的源码

#!/usr/bin/env python

from __future__ import print_function

from beginner_tutorials.srv import AddTwoInts,AddTwoIntsResponse
import rospy

def handle_add_two_ints(req):
    print("Returning [%s + %s = %s]"%(req.a, req.b, (req.a + req.b)))
    return AddTwoIntsResponse(req.a + req.b)

def add_two_ints_server():
    rospy.init_node('add_two_ints_server')
    s = rospy.Service('add_two_ints', AddTwoInts, handle_add_two_ints)
    print("Ready to add two ints.")
    rospy.spin()

if __name__ == "__main__":
    add_two_ints_server()

最后别忘了改变py文件的执行权限

scripts/add_two_ints_server.py 

并且在CMakeLists.txt里增加修改代码片段如下

catkin_install_python(PROGRAMS scripts/add_two_ints_server.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

代码的解释在下面注释

#!/usr/bin/env python

from __future__ import print_function

from beginner_tutorials.srv import AddTwoInts,AddTwoIntsResponse   # 这个包是真的没看懂
import rospy      

def handle_add_two_ints(req):
    print("Returning [%s + %s = %s]"%(req.a, req.b, (req.a + req.b)))
    return AddTwoIntsResponse(req.a + req.b)    # 返回一个值

def add_two_ints_server():
    rospy.init_node('add_two_ints_server')      # 初始化这个节点名字叫 add_two_ints_server
    s = rospy.Service('add_two_ints', AddTwoInts, handle_add_two_ints) # 运行一个服务
                                                # 名字叫 add_two_ints  接收参数为AddTwoInts,执行
                                                # handle_add_two_ints()
    print("Ready to add two ints.")
    rospy.spin()

if __name__ == "__main__":
    add_two_ints_server()

写一个客户端节点

源码

scripts/add_two_ints_client.py 文件下粘贴上下面的源码:

#!/usr/bin/env python

from __future__ import print_function

from beginner_tutorials.srv import AddTwoInts,AddTwoIntsResponse   # 这个包是真的没看懂
import rospy      

def handle_add_two_ints(req):
    print("Returning [%s + %s = %s]"%(req.a, req.b, (req.a + req.b)))
    return AddTwoIntsResponse(req.a + req.b)    # 返回一个值

def add_two_ints_server():
    rospy.init_node('add_two_ints_server')      # 初始化这个节点名字叫 add_two_ints_server
    s = rospy.Service('add_two_ints', AddTwoInts, handle_add_two_ints) # 运行一个服务
                                                # 名字叫 add_two_ints  接收参数为AddTwoInts,执行
                                                # handle_add_two_ints()
    print("Ready to add two ints.")
    rospy.spin()

if __name__ == "__main__":
    add_two_ints_server()

最后别忘了改变py文件的执行权限

scripts/add_two_ints_client.py 

并且在CMakeLists.txt里增加修改代码片段如下

catkin_install_python(PROGRAMS scripts/add_two_ints_server.py /script/add_two_ints_server.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

测试自己写的服务端和客户端节点

  1. 先setup 工作空间
    在这里插入图片描述
  2. catkin_make编译

在这里插入图片描述

  1. rosrun beginner_tutorials add_two_ints_server.py 确认代码执行成功,启动服务节点
  2. 在这里插入图片描述
    这里要你启动rosmaster, 那么我们新终端启动核心 roscore

ROS编写简单的Service和Client (Python)_第1张图片
它就ready 了
在这里插入图片描述

  1. 新终端rosrun beginner_tutorials add_two_ints_client.py 确认代码执行成功,启动客户端节点
    ROS编写简单的Service和Client (Python)_第2张图片

  2. rosrun beginner_tutorials add_two_ints_client.py 4 5 发送请求
    在这里插入图片描述

  3. 查看客户端接受到请求

在这里插入图片描述

  1. 查看服务端表示响应了请求

ROS编写简单的Service和Client (Python)_第3张图片

参考文献

ROS官方教程

你可能感兴趣的:(ROS机器人入门)