python server client_01-ROS入门-09 Python运行server与client

1 编写srv文件

cd ~/workspace/src/package_name

mkdir srv

roscp rospy_tutorials AddTwoInts.srv srv/Sum_Two.srv

2 更改package.xml文件与CMakeList.txt

vim ~/workspace/src/package_name/package.xml

message_generation

message_runtime

vim ~/workspace/src/package_name/CMakelist

find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)

generate_messages( DEPENDENCIES std_msgs)

add_service_files( FILES Sum_Two.srv)

3 新建server

vim ~/workspace/src/ex1/src/sum_two_server.py

#!/usr/bin/env python

from ex1.srv import *

import rospy

def handle_sum_two(req):

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

# 貌似是默认的 srvice回调函数的参数中,req.a req.b 是client中传递的数据。不清楚

return Sum_TwoResponse(req.a + req.b)

def sum_two_server():

rospy.init_node('sum_two_server')

#初始化 节点 用节点 发布服务数据

s = rospy.Service('sum_two', Sum_Two, handle_sum_two)

# 声明了一个 'sum_two'的服务, 数据类型为Sum_Two, 调用handles_sum_two回调函数

print "Ready to add two ints."

rospy.spin()

if __name__ == "__main__":

sum_two_server()

4 新建client

vim ~/workspace/src/ex1/sum_two_client.py

#!/usr/bin/env python

import sys

import rospy

from ex1.srv import *

def sum_two_client(x, y):

rospy.wait_for_service('sum_two')

#等待'sum_two'服务开启

try:

sum_two = rospy.ServiceProxy('sum_two', Sum_Two)

#服务开启后,从'sum_two'服务 Sum_Two数据类型关联数据

resp1 = sum_two(x, y)

#将函数定义成模块,用resp1 调用

return resp1.sum

#返回resp1.sum 的值,及sum_two(x,y)函数中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:

# 当命令行输入的程序 及参数总数为3 里 rosrun exam sum_two_server.py 是一个 后面的数字是两个

x = int(sys.argv[1])

#第一个参数给x

y = int(sys.argv[2])

第二个参数给y

else:

print usage()

sys.exit(1)

#如果参数数目不对则退出

print "Requesting %s+%s"%(x, y)

print "%s + %s = %s"%(x, y, sum_two_client(x, y))

5 python文件改为执行文件

chmod +x ~/workspace/src/ex1/src/sum_two_server.py

chmod +x ~/workspace/src/ex1/src/sum_two_client.py

6 运行程序

cd ~/workspace/src/ex1/src

catkin_make

rosrun ex1 sum_two_server.py

rosrun ex1 sum_two_client.py

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值