ROS:用Python写一个简单服务

13 篇文章 0 订阅

一.编写服务数据:

在功能包的顶级目录中,创建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:

 <build_depend>message_generation</build_depend>
  <exec_depend>message_runtime</exec_depend>

三.返回工作空间顶级目录,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))

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值