vscode开发ROS(15)-python实现自定义服务srv


写在最前

此篇博客为vscode开发系列ros第9篇vscode开发ROS(9)-ROS服务通信机制(srv)的python实现版本, 请对照进行查看.

自定义服务

此处是直接采用第9篇中的, 自定义calRectArea.srv服务, 具体过程, 请查看该篇, 此处不再赘述.

新建Server节点

1, 在scripts文件夹中, 新建pyCalRectAreaRes.py文件.
2, 粘贴以下代码

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import rospy
from ros_test.srv import * #导入自定义服务
def calArea(req): #回调函数
     #计算面积
    rospy.loginfo("接受到一个请求,面积[%f]"%(req.w * req.h))#输出
    return calRectAreaResponse(req.w * req.h)

def server():
    rospy.init_node("rectAreaSrv") #初始化节点
    s = rospy.Service("rectArea",calRectArea,calArea)#新建一个新的服务,服务类型calRectArea, 回调函数calArea
    rospy.loginfo("Ready...") #准备OK
    rospy.spin() #循环等待

if __name__ == '__main__':
    try:
        server()
    except rospy.ROSInterruptException:
        pass

新建Client节点

1, 在scripts文件夹中, 新建pyCalRectAreaReq.py文件.
2, 粘贴以下代码

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import rospy
from ros_test.srv import * #导入自定义服务

def client():
    rospy.wait_for_service("rectArea") #等待rectArea服务
    cal = rospy.ServiceProxy("rectArea",calRectArea)#创建一个用于调用服务的句柄,可以像调用函数一样,调用句柄
    try:
        x = input("x:") #输入 x:
        y = input("y:") #输入 y:
        z = cal(float(x),float(y)) #调用服务,并获取值
        print("面积为: [%f]"%z.s) #打印获取值
    except rospy.ServiceException, e:
        print "服务调用失败: %s"%e

if __name__ == '__main__':
    try:
        client()
    except rospy.ROSInterruptException:
        pass

3, 具体介绍请看注释, 同样比较简单.
4, 使用vscode的终端中cd命令,定位到pyCalRectAreaReq.py,pyCalRectAreaRes.py文件

cd src/ros_test/scripts/

5, 执行指令, 这一步是为了让pyCalRectAreaReq.py pyCalRectAreaRes.py文件具有可执行权限, 不可缺少

chmod 0777 pyCalRectAreaReq.py pyCalRectAreaRes.py

运行Server和Client

1, 使用快捷键Ctrl + Shift + T 弹出系统终端,输入roscore,启用整个ROS总节点。
2, 使用快捷键Ctrl + Shift + T 弹出系统终端,输入rosrun ros_test pyCalRectAreaRes.py,启用talker节点。
3, 使用快捷键Ctrl + Shift + T 弹出系统终端,输入rosrun ros_test pyCalRectAreaReq.py,启用listener节点,
在这里插入图片描述

后记

更多机器人, ROS相关,公-众-号搜索 ”机器人小站"。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值