您当前的位置: 首页 >  Python

鱼香ROS

暂无认证

  • 0浏览

    0关注

    498博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

《动手学ROS2》4.9服务实现(Python)

鱼香ROS 发布时间:2021-11-11 14:18:18 ,浏览量:0

本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途。 公众号

4.5.2 Python服务通信实现(李三借钱)

大家好,我是小鱼。上节说完如何自定义ROS2的服务接口。

相信你已经迫不及待的想尝试一下编写代码了,让我们一起来动手,让李三成功借钱,吃上麻辣烫吧。

1.如何编写一个Python服务

开始之前,我们先说一下创建ROS2服务端基本步骤。

首先是服务端:

  1. 导入服务接口
  2. 创建服务端回调函数
  3. 声明并创建服务端
  4. 编写回调函数逻辑处理请求
2.编写服务端李四代码

我们先来创建李四这边的服务端。用VsCode打开我们的town_ws工作区。

2.1 导入服务接口

我们在上一节中自定义的服务接口这里该怎么使用呢?

需要下面两个步骤:

2.1.1 添加依赖

导入依赖是为了能够让我们的代码找到对应的接口。

因为village_li是包类型是ament_python这里只需要在package.xml中加入下面的代码即可:

  village_interfaces

image-20210816153438400

2.1.2 程序中导入

程序中导入也是只需要一行代码即可完成,打开li4.py,在文件开头加入下面一行代码。

#从村庄接口服务类中导入借钱服务
from village_interfaces.srv import BorrowMoney
2.2 创建服务端并定义服务回调函数 2.2.1创建服务端

接着创建一个服务,继承于Node之后,WriterNode也具备了创建一个服务的能力。在WriterNode__init__函数中创建成员变量borrow_server

# 新建借钱服务
self.borrow_server = self.create_service(BorrowMoney, "borrow_money", self.borrow_money_callback)

需要传入三个参数:

  • 服务接口类型,BorrowMoney,我们在2.1.2导入的

  • 服务名称,"borrow_money",具有唯一性,自己手打的

  • 回调函数,self.borrow_money_callback,我们下一步定义的。

    关于回调函数小鱼写过一篇文章:回调函数与异步执行,不理解的同学可以看一看

2.2.2 定义回调函数
def borrow_money_callback(self,request, response):
    """
    借钱回调函数
    参数:request 客户端请求对象,携带着来自客户端的数据
         response 服务端响应,返回服务端的处理结果
    返回值:response
    """
    return response

这个函数有三个入口参数,self代表本身,这个没啥好说的,类似于c++和java里的this。

  • request 是客户端请求对象,携带着来自客户端的数据。

    其结构就是上一节中我们所定义的namemoney组成

  • response 是服务端响应,返回服务端的处理结果

    其结构由successmoney组成

2.3编写回调函数

接下来开始正式编写回调函数,回调函数的输入是request和response,输出是我们处理后的reponse(当然也可以不处理,使用默认值)

def borrow_money_callback(self,request, response):
    """
    借钱回调函数
    参数:request 客户端请求
         response 服务端响应
    返回值:response
    """
    self.get_logger().info("收到来自: %s 的借钱请求,目前账户内还有%d元" % (request.name, self.account))
    #根据李四借钱规则,借出去的钱不能多于自己所有钱的十分之一,不然就不借
    if request.money             
关注
打赏
1666092100
查看更多评论
0.1137s