服务数据的定义与话题数据大部分相同,唯一要注意的一处是在CMakeLists.txt文件中,服务数据的定义应为:
add_service_files(FILES man.srv)
服务端
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time, thread
import rospy
from geometry_msgs.msg import Twist
from test.srv import man,manResponse,manRequest
pubcommand=True
def callback(req):
global pubcommand
pubcommand = bool(1 - pubcommand)
rospy.loginfo("call the callback! %s", pubcommand)
return manResponse(req.name)
def simpleservice():
rospy.init_node('sxcservice')
s = rospy.Service('/test01', man, callback)
print man
print 'wait!!'
rospy.spin()
if __name__ == '__main__':
simpleservice()
客户端
#!/usr/bin/env python
# coding=utf-8
import rospy
from test.srv import man,manRequest
def showresult():
# ROS节点初始化,生成节点addturtle
rospy.init_node('addturtle')
# 等待'/spawn'服务,若无一直等待
rospy.wait_for_service('/test01')
try:
# 创建一个连接名为'/spawn'的服务,数据类型为Spawn
showin = rospy.ServiceProxy('/test01', man)
# 调用请求服务,输入请求参数,并得到服务端返回结果
response = showin('sxc',1,1 )
return response.result
except rospy.ServiceException, e:
print e
if __name__ == '__main__':
rospy.loginfo("creat turtle,name: %s", (showresult()))