ROS学习笔记(九、python编写服务器和客户端)

在笔记八中,我们学习了通过topic通讯机制进行通讯后,接下来我们学习使用service通讯机制进行通讯。直接上实战!

首先,还是像以前一样,设置环境变量,使用roscd命令直接进入scripts目录下,创建新的python文件。

source catkin_ws/devel/setup.bash
roscd test_pkg/scripts
touch add_two_ints_service.py
touch add_two_ints_client.py

然后,分别使用vim编辑器,对service文件和client文件进行编辑。

首先,对service文件进行编辑。

rosed test_pkg add_two_ints_service

输入以下代码:

#!/usr/bin/env python3

from __future__ import print_function
from test_pkg.srv import AddTwoInts,AddTwoIntsResponse
import rospy

def handle_add_two_ints(req):
    print('Returing [%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('add_two_ints_sever')
    s = rospy.Service('add_two_ints', AddTwoInts, handle_add_two_ints)
    print('Ready to add two ints')
    rospy.spin()

if __name__ == '__main__':
    add_two_ints_server()

然后,打开client文件,进行编辑:

rosed test_pkg add_two_ints_client

输入以下代码:

#!/usr/bin/env python3

from __future__ import print_function

import rospy
import sys
from test_pkg.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)
        return resp1.sum
    except rospy.ServiceException as 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)))

然后,打开三个终端,分别在终端里面设置环境变量,在第一个终端里面打开roscore,在第二个终端里面运行server文件,在第三个终端里面运行client文件,并输入12 14。

现在,我们学会使用python编辑服务器和客户端了!!O(∩_∩)O

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值