ROS2 (python)构造服务端和客户端

2024-06-02 12:36

本文主要是介绍ROS2 (python)构造服务端和客户端,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

要注意:服务端和客户端的名字要统一

什么是线程死锁

A需要等B把装满水的桶放下 才能把水桶提走
B需要等A把水桶提走才能把自己的装满

假设A和B都要站在位置C工作
A:站在工位C将小桶水倒进大桶里
B:从C位置将装满水的大桶拎走
那么假设时刻D
B发现大桶里没有装满水 因此在位置C等待水满
A发现B在位置C等待 于是扛着自己的小水桶等B离开
造成死锁

客户端

import rclpy
from rclpy.node import Node
from std_msgs.msg import String
from village_interface.srv import BorrowMoneyclass BaiPiaoNode(Node):def __init__(self, name):super().__init__(name)self.get_logger().info("大家好,我是李三,李四他哥,我可以白嫖李四的小说!")self.sub_ = self.create_subscription(String,"sexy_gril",self.recv_callback,10)self.borrow_client = self.create_client(BorrowMoney,"borrow_money")def recv_callback(self, novel):self.get_logger().info("李三:我已经收到了:%s" % novel.data)def borrow_response_callback(self, response):"""借钱回调函数"""if response.success:self.get_logger().info("借到%d钱了,去吃麻辣烫" % response.money)else:self.get_logger().info("真抠门,连几块钱都不借")def main(args=None):rclpy.init(args=args)node = BaiPiaoNode("li3")rclpy.spin(node=node)rclpy.shutdown()

服务端

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()

这篇关于ROS2 (python)构造服务端和客户端的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023981

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

Java Websocket实例【服务端与客户端实现全双工通讯】

Java Websocket实例【服务端与客户端实现全双工通讯】 现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏 览器需要不断的向服务器发出请求,然而HTTP