本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途。
大家好,我是小鱼。上节说完如何自定义ROS2的服务接口。
相信你已经迫不及待的想尝试一下编写代码了,让我们一起来动手,让李三成功借钱,吃上麻辣烫吧。
1.如何编写一个Python服务开始之前,我们先说一下创建ROS2服务端基本步骤。
首先是服务端:
- 导入服务接口
- 创建服务端回调函数
- 声明并创建服务端
- 编写回调函数逻辑处理请求
我们先来创建李四这边的服务端。用VsCode打开我们的town_ws
工作区。
我们在上一节中自定义的服务接口这里该怎么使用呢?
需要下面两个步骤:
2.1.1 添加依赖导入依赖是为了能够让我们的代码找到对应的接口。
因为village_li
是包类型是ament_python
这里只需要在package.xml
中加入下面的代码即可:
village_interfaces
程序中导入也是只需要一行代码即可完成,打开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
,我们下一步定义的。关于回调函数小鱼写过一篇文章:回调函数与异步执行,不理解的同学可以看一看
def borrow_money_callback(self,request, response):
"""
借钱回调函数
参数:request 客户端请求对象,携带着来自客户端的数据
response 服务端响应,返回服务端的处理结果
返回值:response
"""
return response
这个函数有三个入口参数,self代表本身,这个没啥好说的,类似于c++和java里的this。
-
request 是客户端请求对象,携带着来自客户端的数据。
其结构就是上一节中我们所定义的
name
和money
组成 -
response 是服务端响应,返回服务端的处理结果
其结构由
success
和money
组成
接下来开始正式编写回调函数,回调函数的输入是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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?