当前位置: 首页 > news >正文

ROS2自定义服务接口

ROS2自定义服务接口
在src/village_interface 下构建srv文件夹
src/village_interface/srv 下新建一个BorrowMoney.srv 遵循大小写编程规范

# 客户端请求
string name
uint32 money
# 中间这三个横杠很重要 不能删掉
---
# 服务端响应
bool success
uint32 money

接口编译
修改cmakelists.txt

# find_package(sensor_msgs REQUIRED)  如果使用了 sensor_msgs下的数据类型
find_package(rosidl_default_generators REQUIRED) # 生成接口依赖rosidl_generate_interfaces(${PROJECT_NAME}"srv/BorrowMoney.srv"#  如果有该服务接口中的数据类型有依赖其他接口如sensor_msgs   应再加一句 DEPENDENCIES sensor_msgs  
)

如果使用了其他的依赖还要修改package.xml(以sensor_msgs为例)

  <depend>sensor_msgs</depend><build_depend>rosidl_default_generators</build_depend><exec_depend>rosidl_default_runtime</exec_depend><member_of_group>rosidl_interface_packages</member_of_group>
ros2 service call /borrow_money village_interface/srv/BorrowMoney "{name: "acan", money: 5}"
ros2 service call 服务名称 服务消息类型 消息内容
import rclpy
from rclpy.node import Node
from std_msgs.msg import String,UInt32
from village_interface.srv import BorrowMoneyclass WriterNode(Node):def __init__(self,name):super().__init__(name)self.get_logger().info('大家好,我是%s.' % name)# String 话题消息类型# "sexy_gril" 话题名# 10 话题发布类型# self.create_publisher(消息类型, 话题名, 发布频率)# 创建发布者self.pub_novel = self.create_publisher(String, "sexy_gril", 10)# self.create_subscription(消息类型,话题名,回调函数,队列长度)# 创建订阅者self.sub_money = self.create_subscription(UInt32,"sexy_gril_money",self.rev_money_callback,10)# 创建客户端self.borrow_server = self.create_service(BorrowMoney,"borrow_money",self.borrowmoney_callback)self.timer_period = 5self.timer = self.create_timer(self.timer_period,self.timer_callback)self.counter = 0self.count = 80# 创建服务端回调函数def borrowmoney_callback(self, request, response):"""request: 来自客户端的请求数据response:来自服务端的响应数据"""self.get_logger().info("收到来自:%s的请求,目前账户里有%d元"%(request.name,self.count))if request.money <= self.count * 0.1: response.success = Trueresponse.money = request.moneyself.count -= request.moneyself.get_logger().info("借钱成功,借出%d元,目前账户结余%d"%(request.money,self.count))else:response.success = Falseresponse.money = 0self.get_logger().info("借钱失败!!")return responsedef timer_callback(self):msg = String()msg.data = '第%d回:潋滟湖 %d 次偶遇胡艳娘' %(self.counter,self.counter)self.pub_novel.publish(msg=msg)self.get_logger().info("发布消息: %s" % msg.data)self.counter = self.counter + 1def rev_money_callback(self,money):self.count = self.count + money.dataself.get_logger().info("收到了%d的钱"%money.data)def hello(args=None):rclpy.init(args=args)li3_node = WriterNode("li4")rclpy.spin(li3_node)rclpy.shutdown()
http://www.lryc.cn/news/359862.html

相关文章:

  • linux /www/server/cron内log文件占用空间过大,/www/server/cron是什么内容,/www/server/cron是否可以删除
  • C++青少年简明教程:break语句、continue语句
  • MySQL实战行转列(或称为PIVOT)实战sales的表记录了不同产品在不同月份的销售情况,进行输出
  • 牛客NC164 最长上升子序列(二)【困难 贪心+二分 Java/Go/PHP/C++】
  • 电子烟开发【恒压、恒有效算法】
  • 基于Open3D的点云处理22-非阻塞可视化/动态可视化
  • C++面试题其一
  • CentOS7某天的samba服务搭建操作记录(还没成功)
  • Qt Demo:基于TCP协议的视频传输Demo
  • 内存管理【C++】
  • D3D 顶点格式学习
  • gmssl vs2010编译
  • 容器化部署gitlab、jenkins,jenkins应用示例
  • 基于STM32的轻量级Web服务器设计
  • 用r语言处理 Excel数据当中的缺失值方法
  • AWS 高防和阿里云高防深度对比
  • ctfshow web 月饼杯II
  • 「前端+鸿蒙」核心技术HTML5+CSS3(二)
  • unity接入live2d
  • 练习题-17
  • 乐高小人分类项目
  • 个人关于ChatGPT的用法及建议
  • 神经网络的工程基础(二)——随机梯度下降法|文末送书
  • 常见的几种编码方式
  • ubuntu移动硬盘重命名
  • VUE框架前置知识总结
  • 张宇1000题80%不会?别急,这个方法肯定有用!
  • 【python】爬虫记录每小时金价
  • 一行命令将已克隆的本地Git仓库推送到内网服务器
  • Linux文本处理三剑客(详解)