ROS学习(ten): Writing a Simple Service and Client (Python)

server 端: 运算

#!/usr/bin/env python
#coding=utf-8 

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 类型是 AddTwoInts)
    # 所有请求都传递给handle_add_two_ints函数
    # 将使用AddTwoIntsRequest实例调用handle_add_two_ints,并返回AddTwoIntsResponse的实例。
    s = rospy.Service('add_two_ints', AddTwoInts, handle_add_two_ints)
    print "Ready to add two ints."
    rospy.spin()

# chmod +x scripts/add_two_ints_server.py
if __name__ == "__main__":
    add_two_ints_server()

client 端: 打印输出

#!/usr/bin/env python
#coding=utf-8 

import sys
import rospy
from beginner_tutorials.srv import *

def add_two_ints_client(x, y):
    rospy.wait_for_service('add_two_ints')
    try:
        add_two_ints = rospy.ServiceProxy('add_two_ints', AddTwoInts)
        resp1 = add_two_ints(x, y)
        return resp1.sum
    except rospy.ServiceException, e:
        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

run

catkin_make

fengxuewei@fengxuewei:~/C++_myself/catkin_ws$ rosrun beginner_tutorials add_two_ints_server.py 
Ready to add two ints

fengxuewei@fengxuewei:~/C++_myself/catkin_ws$ rosrun beginner_tutorials add_two_ints_client.py  2 5
Requesting 2+5
2 + 5 = 7

fengxuewei@fengxuewei:~/C++_myself/catkin_ws$ rosrun beginner_tutorials add_two_ints_server.py 
Ready to add two ints.
Returning [2 + 5 = 7]
发布了29 篇原创文章 · 获赞 0 · 访问量 1721

猜你喜欢

转载自blog.csdn.net/fengxuewei123/article/details/104086589