Rospy的官方教程代码讲解(四)服务与参数
服务
服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个响应(response)
具体的概念和命令行应用请参见wiki
直接看代码:
服务端
# 首先在AddTwoInts.srv中定义服务,两个输入一个输出
int64 a
int64 b
---
int64 sum
然后是服务的代码:
#!/usr/bin/env python
# Software License Agreement (BSD License)
#
# Copyright (c) 2008, Willow Garage, Inc.
# All rights reserved.
## 通过rospy service返回两个整数的和
NAME = 'add_two_ints_server'
# 获取刚刚定义的服务
from rospy_tutorials.srv import *
import rospy
def 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(NAME)
s = rospy.Service('add_two_ints', AddTwoInts, add_two_ints)
# spin() keeps Python from exiting until node is shutdown
rospy.spin()
if __name__ == "__main__":
add_two_ints_server()
客户端
#!/usr/bin/env python
# Software License Agreement (BSD License)
#
# Copyright (c) 2008, Willow Garage, Inc.
# All rights reserved.
## 通过rospy service 客户端求两个整数的和
import sys
import os
import rospy
# 获取求和的服务
from rospy_tutorials.srv import *
## @param x int: 加数
## @param y int: 被加数(这好像是小学时代学的叫法( ̄▽ ̄))
def add_two_ints_client(x, y):
# 注意:rospy.init_node()在调用服务时不时必须的,因为客户端可以不是一个节点