ROS学习篇(二)编写简单的Service和Client (Python)

一、写一个服务器(service)节点

首先我们得确保运行了之前的教程中的creating the AddTwoInts.srv教程。
进去工作空间中

roscd beginner_tutorials

在py脚本文件夹scripts中新建add_two_ints_server.py文件

touch scripts/add_two_ints_server.py

代码+注释

#!/usr/bin/env python

from beginner_tutorials.srv import *
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) #因为我们已经将服务的类型声明为AddTwoInts,所以它会为您生成AddTwoIntsRequest对象(可以自由传递)。

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)#使用AddTwoInts(之前教程中建立的)服务类型声明一个名为add_two_ints的新服务。所有请求都传递给handle_add_two_ints函数。
    print "Ready to add two ints."
    rospy.spin() #此语句保证直到节点被关闭,代码才会停止运行

if __name__ == "__main__":
    add_two_ints_server()

运行如下语句使以上新建节点可执行 ,不执行会在运行节点时出现找不到节点的错误。

chmod +x scripts/add_two_ints_server.py

二、写一个客户端(client)节点

在py脚本文件夹scripts中新建add_two_ints_client.py文件

touch scripts/add_two_ints_client.py

代码+注释

#!/usr/bin/env python

import sys
import rospy
from beginner_tutorials.srv import *

def add_two_ints_client(x, y):
    rospy.wait_for_service('add_two_ints') #在客户端中我们不需要创建node,这是一种便捷方法,可以阻止名为add_two_ints的服务可用。
    try:
        add_two_ints = rospy.ServiceProxy('add_two_ints', AddTwoInts)#创建一个用于调用服务的句柄,可以像调用函数一样,调用句柄
        resp1 = add_two_ints(x, y) #因为我们已经将服务的类型声明为AddTwoInts,所以它会为您生成AddTwoIntsRequest对象(可以自由传递)。
        return resp1.sum
    except rospy.ServiceException, e: #如果调用失败,可能会抛出rospy.ServiceException
        print "Service call failed: %s"%e

def usage():
    return "%s [x y]"%sys.argv[0]

if __name__ == "__main__":
    if len(sys.argv) == 3:
        x = int(sys.argv[1])
        y = int(sys.argv[2])
    else:
        print usage()
        sys.exit(1)
    print "Requesting %s+%s"%(x, y)
    print "%s + %s = %s"%(x, y, add_two_ints_client(x, y))

运行如下语句使以上新建节点可执行

chmod +x scripts/add_two_ints_client.py

三、运行节点
首先回到工作空间,并且编译

cd catkin_ws
catkin_make

source

source devel/setup.bash

运行节点

rosrun beginner_tutorials add_two_ints_server.py 

会出现Ready to add two ints.字样,然后打开新的终端运行client节点

rosrun beginner_tutorials add_two_ints_client.py

会打印出实用信息如下:

/home/m-tan/catkin_ws/src/beginner_tutorials/scripts/add_two_ints_client.py [x y]

然后运行

rosrun beginner_tutorials add_two_ints_client.py 4 5

输出:

Requesting 4+5
4 + 5 = 9

运行服务器的终端输出:

Returning [4 + 5 = 9]

至此,已经完成了ROS的服务器和客户端教程。

猜你喜欢

转载自blog.csdn.net/Tansir94/article/details/81270555
今日推荐