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

ROS2 入门应用 请求和应答(Python)

ROS2 入门应用 请求和应答(Python)

  • 1. 创建功能包
  • 1. 创建功能包
  • 2. 创建源文件
    • 2.1. 服务端
    • 2.2. 客户端
  • 3. 添加依赖关系
  • 4. 添加入口点
  • 5. 编译和运行


1. 创建功能包

1. 创建功能包

在《ROS2 入门应用 工作空间》中已创建和加载了ros2_ws工作空间
在《ROS2 入门应用 元功能包(C++)》中已创建和加载了my_package功能包
那么就创建一个独立的py_srvcli功能包来做服务的请求和应答的功能

cd ~/ros2_ws/src
ros2 pkg create --build-type ament_python py_srvcli --dependencies rclpy example_interfaces

--dependencies可选参数将会自动在package.xmlCMakeLists.txt中添加必要的依赖行

依赖example_interfaces包,将会使用到example_interfacessrv文件,两位整数求和服务:

int64 a
int64 b
---
int64 sum

2. 创建源文件

进入py_srvcli功能包的py_srvcli文件夹

cd ~/ros2_ws/src/py_srvcli/py_srvcli

2.1. 服务端

新建service_member_function.py服务端源文件

nano service_member_function.py

复制以下内容到文件中:

from example_interfaces.srv import AddTwoIntsimport rclpy
from rclpy.node import Nodeclass MinimalService(Node):'''服务端节点类'''def __init__(self):# 初始化节点super().__init__('minimal_service')# 初始化服务端,服务类型AddTwoInts,服务add_two_ints,回调函数add_two_ints_callbackself.srv = self.create_service(AddTwoInts, 'add_two_ints', self.add_two_ints_callback)def add_two_ints_callback(self, request, response):'''服务端回调函数'''# 从请求request中添加两个整数,并将总和提供给响应responseresponse.sum = request.a + request.bself.get_logger().info('Incoming request\na: %d b: %d' % (request.a, request.b))return responsedef main():# 初始化ROS2rclpy.init()# 创建服务端节点minimal_service = MinimalService()# 运行服务端节点rclpy.spin(minimal_service)# 退出ROS2rclpy.shutdown()if __name__ == '__main__':main()

2.2. 客户端

新建client_member_function.py客户端源文件

nano client_member_function.py

复制以下内容到文件中:

import sysfrom example_interfaces.srv import AddTwoInts
import rclpy
from rclpy.node import Nodeclass MinimalClientAsync(Node):'''客户端节点类'''def __init__(self):# 初始化节点super().__init__('minimal_client_async')# 初始化客户端,服务类型AddTwoInts,服务add_two_intsself.cli = self.create_client(AddTwoInts, 'add_two_ints')# 搜索服务节点,间隔1swhile not self.cli.wait_for_service(timeout_sec=1.0):self.get_logger().info('service not available, waiting again...')# 定义请求self.req = AddTwoInts.Request()def send_request(self, a, b):'''请求发送函数'''self.req.a = aself.req.b = b# 发送请求self.future = self.cli.call_async(self.req)# 等待至发送请求得到应答rclpy.spin_until_future_complete(self, self.future)# 返回应答结果return self.future.result()def main():# 初始化ROS2rclpy.init()# 创建客户端节点minimal_client = MinimalClientAsync()# 请求发送response = minimal_client.send_request(int(sys.argv[1]), int(sys.argv[2]))# 显示请求-应答状态minimal_client.get_logger().info('Result of add_two_ints: for %d + %d = %d' %(int(sys.argv[1]), int(sys.argv[2]), response.sum))# 销毁节点,退出ROS2minimal_client.destroy_node()rclpy.shutdown()if __name__ == '__main__':main()

3. 添加依赖关系

创建功能包时,已通过--dependencies可选参数自动在package.xml中添加必要的依赖行

<depend>rclpy</depend>
<depend>example_interfaces</depend>

4. 添加入口点

打开 setup.py 文件
entry_points入口字段的console_scripts控制台脚本的括号中添加以下两行:

entry_points={'console_scripts': ['service = py_srvcli.service_member_function:main','client = py_srvcli.client_member_function:main',],
},

添加一个入口点py_srvcli功能包的service_member_function源文件的main函数,并命名为service
添加一个入口点py_srvcli功能包的client_member_function源文件的main函数,并命名为client


5. 编译和运行

进入工作空间根目录

cd ~/ros2_ws

在编译之前检查缺失的依赖项(可跳过):

rosdep install -i --from-path src --rosdistro humble -y

编译:

colcon build --packages-select py_srvcli

打开一个新终端,运行服务端节点准备应答:

ros2 run py_srvcli service

打开一个新终端,运行客户端节点发送请求:

ros2 run py_srvcli client 1 2# [INFO] [minimal_client_async]: Result of add_two_ints: for 1 + 2 = 3

谢谢

相关文章:

ROS2 入门应用 请求和应答(Python)

ROS2 入门应用 请求和应答&#xff08;Python&#xff09;1. 创建功能包1. 创建功能包2. 创建源文件2.1. 服务端2.2. 客户端3. 添加依赖关系4. 添加入口点5. 编译和运行1. 创建功能包 1. 创建功能包 在《ROS2 入门应用 工作空间》中已创建和加载了ros2_ws工作空间 在《ROS2 入…...

是德Keysight E4991A/e4991B射频阻抗/材料分析仪

Keysight E4991A 射频阻抗/材料分析仪提供终极阻抗测量性能和强大的内置分析功能。它将为评估 3 GHz 范围内组件的组件和电路设计人员的研发提供创新。E4991A 使用 RF-IV 技术&#xff0c;而不是反射测量技术&#xff0c;可在宽阻抗范围内进行更精确的阻抗测量。基本阻抗精度为…...

这才是计算机科学_人工智能

人工智能一、前言二、ML2.1 分类2.1.1 决策树2.2.2 支持向量机2.2.3 人工神经网络三、计算机视觉3.1 Prewitt算子3.2 Viola-Jones 人脸检测算法3.3 卷积神经网络四、自然语言处理4.1 知识图谱4.2 语音识别一、前言 之前讲了计算机从发展到现在的过程&#xff0c;计算机很适合做…...

DFS深度优先搜索—Java版

递归三要素 递归的定义 递归的拆解 递归的出口 什么时候使用DFS&#xff1f; 深度回溯问题&#xff08;DFS与回溯区别不大&#xff09; 二叉树问题 组合、排列问题 找方案问题&#xff08;解空间是一棵树或者图&#xff0c;需要自行构造图/树&#xff09; 图的搜索问题…...

RAY - 小记

文章目录关于 RAYRAY 结构关于 RAY Ray is a unified framework for scaling AI and Python applications. Ray consists of a core distributed runtime and a toolkit of libraries (Ray AIR) for accelerating ML workloads. RAY 是一个简单、通用的分布式计算框架。 RAY 解…...

金三银四软件测试工程师面试题(含答案)

前言&#xff1a;此文专门记载本人平时面试以及收藏的面试题目&#xff0c;如果有错误之处请及时指正&#xff0c;谢谢&#xff01; 1、python的数据类型有哪些 答&#xff1a;Python基本数据类型一般分为&#xff1a;数字、字符串、列表、元组、字典、集合这六种基本数据类…...

Python 连接数据源与邮件功能(九)

文章目录一、概述二、Python 连接数据源1&#xff09;Python MySQL 基础操作1、部署MySQL2、MySQL Connector 库【1】安装 mysql-connector-python 库【2】连接 MySQL【3】增加数据【4】查询数据【5】更新数据【6】删除数据2、PyMySQL 库【1】安装 PyMySQL 库【2】连接 MySQL【…...

网站如何锁定用户,超级浏览器有办法解决吗?

随着全球开放&#xff0c;跨境电商人纷纷开启了2023年的搞钱之旅&#xff0c;很多期待着在新的一年大干一场。但前事不忘后事之师&#xff0c;2022年跨境生意全面沦陷&#xff0c;其实除了大环境的因素之外&#xff0c;还有一个很重要的原因是&#xff0c;各个平台都开始实行非…...

Ubuntu下使用Wine运行HBuilderX

安装完wine后&#xff0c;在HbuilderX的目录中打开终端&#xff0c;直接输入wine HBuilderX.exe命令&#xff0c;启动过程中会提示安装wine-mono组件&#xff0c;点击安装按钮下载安装该组件&#xff0c;该组件下载速度慢&#xff0c;需要等待特别长时间。   安装完毕后&…...

如何高效远程维护分布在海外的中大型智能设备?

一、行业需求 随着越来越多的企业进行全球化经营&#xff0c;设备制造商和系统集成商的设备分布到全球各地&#xff0c;数量多而且分散&#xff0c;传统的设备运维方式&#xff0c;面临着出差成本高&#xff0c;工作效率低&#xff0c;服务不及时等问题&#xff0c;客户常常因…...

【双指针问题】LeetCode 925. 长按键入

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…...

APP测试中IOS和Android的区别,有哪些注意点?

01、常识性区别 02、导航方式 iOS&#xff1a;Tab放在页面底部&#xff0c;不能通过滑动来切换&#xff0c;只能点击。也有放在上面的&#xff0c;也不能滑动&#xff0c;但有些Tab本身可以滑动&#xff0c;比如天猫的。还有新闻类的应用。 Android&#xff1a;一般放在页面…...

2019蓝桥杯真题平方序列(填空题) C语言/C++

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小明想找到两个正整数 X 和 Y&#xff0c;满足2019<X<Y;2019^2, X^2, Y^2组成等差数列。 请你求出在所有可能的解中&#xff0c;XY 的最小值是多少&#xff1f…...

vue中,给一个URL地址,利用FileSaver.js插件下载文件到本地

①首先下载 FileSaver.js 插件 npm install file-saver --save ②在需要的.vue页面引入 import { saveAs } from file-saver 在HTML中引入 <script src"https://cdn.bootcdn.net/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script> //Fil…...

从0开始学python -34

Python3 输入和输出-2 读和写文件 open() 将会返回一个 file 对象&#xff0c;基本语法格式如下: open(filename, mode)filename&#xff1a;包含了你要访问的文件名称的字符串值。mode&#xff1a;决定了打开文件的模式&#xff1a;只读&#xff0c;写入&#xff0c;追加等。…...

瑞典军事研究:从认知心理学的视角探讨军事创新进程

来源&#xff1a;Military Innovation as the Result of Mental Models of Technology 《摘要》 政治紧张局势的加剧和技术发展的进步促使Scandinavian 国家&#xff08;斯堪的纳维亚半岛&#xff0c;欧洲最大的半岛&#xff0c;有挪威、瑞典两国以及芬兰北端的一小部分。&am…...

【MySQL进阶-08】深入理解innodb存储格式,双写机制,buffer pool底层结构和淘汰策略

MySql系列整体栏目 内容链接地址【一】深入理解mysql索引本质https://blog.csdn.net/zhenghuishengq/article/details/121027025【二】深入理解mysql索引优化以及explain关键字https://blog.csdn.net/zhenghuishengq/article/details/124552080【三】深入理解mysql的索引分类&a…...

5. AOP

一、如何定义一个MethodHandler? 1.Controller注解修饰的类 1.注册成Spring Bean 2.表示它是一个SpringMVC下的Controller 2.在这个类下的方法中&#xff0c;只要被RequestMapping修饰&&方法的形参符合规定&#xff08;需要看文档&#xff09; 方法的返回值符合规定…...

ubuntu上尝试libpqxx库链接人大金仓

ubuntu上尝试libpqxx库链接人大金仓 C的项目让使用国产数据库 运维给架了一个人大金仓数据库&#xff0c; Kingbase 8 是基于 PostgreSQL 9.6 做的&#xff0c; 尝试直接使用libpqxx链接数据库。 文章目录ubuntu上尝试libpqxx库链接人大金仓第一步 搭建libpqxx开发环境搜索lib…...

【Python入门第十二天】Python 列表

Python 集合&#xff08;数组&#xff09; Python 编程语言中有四种集合数据类型&#xff1a; 列表&#xff08;List&#xff09;是一种有序和可更改的集合。允许重复的成员。元组&#xff08;Tuple&#xff09;是一种有序且不可更改的集合。允许重复的成员。集合&#xff08…...

Android 异步操作库 RxJava

RxJava概述 RxJava 是一种响应式编程&#xff0c;来创建基于事件的异步操作库。基于事件流的链式调用、逻辑清晰简洁。 RxJava 我的理解是将事件从起点&#xff08;上游&#xff09;流向终点&#xff08;下游&#xff09;&#xff0c;中间有很多卡片对数据进操作并传递&#x…...

2021-12-05青少年软件编程(C语言)等级考试试卷(六级)解析

2021-12-05青少年软件编程(C语言)等级考试试卷(六级)解析T1. 电话号码 给你一些电话号码,请判断它们是否是一致的,即是否有某个电话是另一个电话的前缀。比如: Emergency 911 Alice 97 625 999 Bob 91 12 54 26 在这个例子中,我们不可能拨通Bob的电话,因为Emergency的…...

github 使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录一、git与github二、出错的地方1.GitHub没有css样式2、git clone出现错误3、明明创建了responsibility 但git 不显示一、git与github 这个博客写的很好&#xff01;…...

Kubernetes集群维护—备份恢复与升级

Etcd数据库备份与恢复 需要先安装etcd备份工具yum install etcd -y按不同安装方式执行不同备份与恢复kubeadm部署方式&#xff1a; 备份&#xff1a;ETCDCTL_API3 etcdctl snapshot save snap.db --endpointshttps://127.0.0.1:2379 --cacert/etc/kubernetes/pki/etcd/ca.cr…...

前端开发常用案例(二)

这里写目录标题1.loding加载动画2.全屏加载动画效果3.吃豆豆4.鼠标悬停3D翻转效果5.3D旋转木马效果6.flex弹性布局-酷狗音乐播放列表flex弹性布局-今日头条首页热门视频栏grid网格布局-360图片展示小米商城左侧二级菜单1.loding加载动画 代码如下&#xff1a; <!DOCTYPE h…...

基于springboot+vue的儿科保健计划免疫系统

基于springbootvue的儿科保健计划免疫系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背…...

1.两数之和

难度简单给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。你可以按任意顺序…...

字符串匹配 - 模式预处理:KMP 算法(Knuth-Morris-Pratt)

Knuth-Morris-Pratt算法&#xff08;简称KMP&#xff09;是最常用的字符串匹配算法之一。算法简介如下算法解释主要来源于这里&#xff0c;但是通常很难阅读完全&#xff0c;我推荐你直接进入下一节 图例解释部分。我们来观察一下朴素的字符串匹配算法的操作过程。如下图&#…...

工程师手册:电源设计中的电容选用规则

摘要 电源往往是我们在电路设计过程中最容易忽略的环节。作为一款优秀的设计&#xff0c;电源设计应当是很重要的&#xff0c;它很大程度影响了整个系统的性能和成本。电源设计中的电容使用&#xff0c;往往又是电源设计中最容易被忽略的地方。一、电源设计中电容的工作原理 在…...

【安全开发】专栏文章汇总

安全开发–1–TCP和UDP网络编程 安全开发–2–嗅探邮箱协议口令 安全开发–3–Python实现ARP缓存投毒 安全开发–4–SSH通信工具开发 安全开发–5–编写简单的netcat工具 安全开发–6–一个简单的TCP代理工具开发 安全开发–7–SSH隧道工具开发 安全开发–8–Python实现流量数据…...

外贸网站怎么做会吸引眼球/河北网站推广公司

第三章 哈希算法 哈希算法又称散列函数算法&#xff0c;是一种查找算法。简单来说&#xff0c;就是把一些复杂的数据&#xff0c;通过某种函数映射关系&#xff0c;映射成更加容易查找的方式。但是这种映射关系有可能会发生多个关键字映射到同一地址的现象&#xff0c;我们称之…...

淘宝客做网站要钱吗/网络运营是什么意思

https://jingyan.baidu.com/article/fea4511a1a1040f7bb91251a.html转载于:https://www.cnblogs.com/clover-xuqi/p/8316663.html...

胶州家园网站建设/网络营销推广工具有哪些?

你真的需要分布式锁吗&#xff1f; 用到分布式锁说明遇到了多个进程共同访问同一个资源的问题。一般是在两个场景下会防止对同一个资源的重复访问&#xff1a; **提高效率。**比如多个节点计算同一批任务&#xff0c;如果某个任务已经有节点在计算了&#xff0c;那其他节点就不…...

外包网靠谱吗/sem与seo

本文通过开发一个JSP 编辑器插件的示例&#xff0c;介绍了 Eclipse 中设置 JSP 断点的方法&#xff0c;以及如何远程调试 JSP。作为基础知识&#xff0c;本文的前两部分描述了 JAVA Debug 和 JSR-45 的基本原理。环境要求: 本文的代码是在 Eclipse3.0.0&#xff0c;JDK1.4.2 和…...

wordpress 增加css/建站公司

在写表单之前补充一点&#xff1a;网页名以及属性的值命名都不能用中文&#xff0c;尽量用英文或拼音。 html表单特写 1、表单格式 <form method"get/post" action"data.html" target"_blank/_self"> <input/> </form> 注&…...

wordpress点击图片/码迷seo

Kotlin中的高阶函数 一、函数式编程概念二、高阶函数1.函数对变量进行赋值2.函数作为参数3.函数作为返回值一、函数式编程概念 又称泛函编程,即比一般函数更加抽象的概念(学过泛函分析的应该都懂吧),将计算机运算视为数学上的函数运算,基础就是利用lambda表达式进行运算。 …...