python写一个服务_ROS:用Python写一个简单服务

一.编写服务数据:

在功能包的顶级目录中,创建srv文件夹,并在里面创建.srv文件(先成为a.srv)

在srv文件中,填入服务数据,如:

int64 a

int64 b

---

int64 sum

其中,---上方是请求数据,下方是答应数据

二.修改CmakeList和Package.xml:

CmakeList:

catkin_package(

...

CATKIN_DEPENDS message_runtime ...

...)

add_service_files(

FILES

a.srv

)

generate_messages(

DEPENDENCIES

std_msgs

)

Package.xml:

message_generation

message_runtime

三.返回工作空间顶级目录,catkin_make编译(记得要source,IDE的路径要设置好,我的是

/home/ch/forTest/devel/lib/python2.7/dist-packages)

四.编写服务py文件:

from beginner_tutorials(功能包名).srv import *

import rospy

def handle_add_two_ints(req): # 请求处理函数,req是请求数据包

print "Returning [%s + %s = %s]"%(req.a, req.b, (req.a + req.b))

return AddTwoIntsResponse(req.a + req.b) #返回应答数据包(这里传进去的参数按.srv文件的顺序填写)

def add_two_ints_server():

rospy.init_node('add_two_ints_server(服务节点名)')

s = rospy.Service('add_two_ints(服务名)', AddTwoInts(srv文件名), handle_add_two_ints)

print "Ready to add two ints."

rospy.spin()

if __name__ == "__main__":

add_two_ints_server()

五.编写请求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')

try:

add_two_ints = rospy.ServiceProxy('add_two_ints', AddTwoInts) #获得一个请求处理函数的句柄,在下面会用到

resp1 = add_two_ints(x, y) # 直接将参数按.srv文件中的顺序填好,传入句柄,即可得到结果

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))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值