Understanding services:理解服务(Service)
文章目录
- 背景
- 1. 准备工作
- 2. ros2 service list 命令
- 3. ros2 service type 命令
- 3.1 ros2 service list -t 命令
- 4. ros2 service find 命令
- 5. ros2 interface show 命令
- 6. ros2 service call 命令
参考官方文档: Understanding services
背景
服务(Service)是ROS图(ROS graph)中节点的另一种通信方法。服务是基于调用和响应(call-and-response)的模式,而不是话题的发布者-订阅者(publisher-subscriber)模式。话题允许节点订阅数据流并获得持续的更新,而服务只在被客户端调用时提供数据。


1. 准备工作
启动两个 turtlesim 节点,/turtlesim 和 /teleop_turtle。
打开一个新的终端并运行:
ros2 run turtlesim turtlesim_node
打开另一个终端并运行
ros2 run turtlesim turtle_teleop_key
2. ros2 service list 命令
在新终端中运行 ros2 service list 命令将返回一个列表,展示系统中当前活动的所有服务:
/clear
/kill
/reset
/spawn
/teleop_turtle/describe_parameters
/teleop_turtle/get_parameter_types
/teleop_turtle/get_parameters
/teleop_turtle/list_parameters
/teleop_turtle/set_parameters
/teleop_turtle/set_parameters_atomically
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/describe_parameters
/turtlesim/get_parameter_types
/turtlesim/get_parameters
/turtlesim/list_parameters
/turtlesim/set_parameters
/turtlesim/set_parameters_atomically
你会看到 teleop_turtle 和 turtlesim 这两个节点都有同样的六个服务,其名称中都有 parameters 。在ROS 2中,几乎每个节点都有这些基础设施服务,而参数是建立在这些服务之上的。在下一个教程中会有更多关于参数的内容。在本教程中,将省略参数服务的讨论。
现在,让我们把注意力集中在针对海龟的服务上,/clear ,/kill ,/reset , /spawn , /turtle1/set_pen , /turtle1/teleport_absolute , 和 /turtle1/teleport_relative 。你可能记得在Using turtlesim and rqt:使用 turtlesim 和 rqt教程中使用rqt与这些服务中的一些进行互动。
3. ros2 service type 命令
要想知道一个服务的类型,使用命令:
ros2 service type <service_name>
让我们看一下 turtlesim 的 /clear 服务。在一个新的终端,输入以下命令:
ros2 service type /clear
应该返回:
std_srvs/srv/Empty
Empty 类型意味着服务调用在发出请求时不发送数据,在接收响应时不接收数据。
3.1 ros2 service list -t 命令
如果要看到所有正在运行的服务的类型,你可以在 list 命令中附加 --show-types 选项,缩写为 -t :
ros2 service list -t
返回结果如下:
/clear [std_srvs/srv/Empty]
/kill [turtlesim/srv/Kill]
/reset [std_srvs/srv/Empty]
/spawn [turtlesim/srv/Spawn]
…
/turtle1/set_pen [turtlesim/srv/SetPen]
/turtle1/teleport_absolute [turtlesim/srv/TeleportAbsolute]
/turtle1/teleport_relative [turtlesim/srv/TeleportRelative]
…
4. ros2 service find 命令
如果你想找到某个特定类型的所有服务,你可以使用命令:
ros2 service find <type_name>
例如,你可以通过下面这条命令找到所有 Empty 类型的服务:
ros2 service find std_srvs/srv/Empty
返回结果如下:
/clear
/reset
5. ros2 interface show 命令
你可以从命令行调用服务,但首先你需要知道输入参数的结构:
ros2 interface show <type_name>
例如:
ros2 interface show std_srvs/srv/Empty
返回结果如下:
—
—将请求结构(上面)和响应结构(下面)分开。但是,正如你前面所学到的,空(Empty)类型不发送或接收任何数据。所以,自然地,它的结构是空白的。
让我们来查看一个具有发送和接收数据类型的服务,比如 /spawn 。从 ros2 service list -t 的结果可以知道 /spawn 的类型是 turtlesim/srv/Spawn:
ros2 interface show turtlesim/srv/Spawn
float32 x
float32 y
float32 theta
string name # Optional. A unique name will be created and returned if this is empty
—
string name
6. ros2 service call 命令
现在你知道了什么是服务类型,如何找到一个服务的类型,以及如何找到该类型的参数结构,你可以用以下方法调用一个服务:
ros2 service call <service_name> <service_type> <arguments>
<arguments> 部分是可选的。例如,空类型的服务没有任何参数:
ros2 service call /clear std_srvs/srv/Empty
这条命令将清除海龟模拟窗口中的任何线条。
现在让我们通过调用 /spawn 服务,输入参数来生成一个新的乌龟。在命令行的服务调用中,输入的 <arguments> 需要使用YAML语法:
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"
响应如下:
requester: making request: turtlesim.srv.Spawn_Request(x=2.0, y=2.0, theta=0.2, name=‘’)
response:
turtlesim.srv.Spawn_Response(name=‘turtle2’)
你的turtlesim窗口将立即生成新的乌龟。
相关文章:
Understanding services:理解服务(Service)
文章目录背景1. 准备工作2. ros2 service list 命令3. ros2 service type 命令3.1 ros2 service list -t 命令4. ros2 service find 命令5. ros2 interface show 命令6. ros2 service call 命令参考官方文档: Understanding services背景 服务(Service&…...
【链表OJ题(五)】合并两个有序链表
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯长路漫漫浩浩,万事皆有期待 文章目录链表OJ题(五)1. 合并…...
C++ Primer第五版_第三章习题答案(1~10)
文章目录练习3.1练习3.2一次读入一行一次读入一个词练习3.3练习3.4大的字符串长度大的字符串练习3.5未隔开的隔开的练习3.6练习3.7练习3.8练习3.9练习3.10练习3.1 使用恰当的using 声明重做 1.4.1节和2.6.2节的练习。 // 1.4.1 #include <iostream>using std::cin; using…...
小样本学习
机器学习就是从数据中学习,从而使完成任务的表现越来越好。小样本学习是具有有限监督数据的机器学习。类似的,其他的机器学习定义也都是在机器学习定义的基础上加上不同的限制条件衍生出来。例如,弱监督学习是强调在不完整、不准确、有噪声、…...
python打包成apk界面设计,python打包成安装文件
大家好,给大家分享一下如何将python程序打包成apk文件,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 1、如何用python制作十分秒加减的apk 如何用python制作十分秒加减的apk?用法:. apk包放入apk文件目录,然后输入…...
pytorch转onnx踩坑日记
在深度学习模型部署时,从pytorch转换onnx的过程中,踩了一些坑。本文总结了这些踩坑记录,希望可以帮助其他人。 首先,简单说明一下pytorch转onnx的意义。在pytorch训练出一个深度学习模型后,需要在TensorRT或者openvin…...
极智AI | GPT4来了,ChatGPT又该升级了
欢迎关注我,获取我的更多经验分享 大家好,我是极智视界,本文介绍一下 GPT4来了,ChatGPT又该升级了,更多的是个人思考。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq 从 ChatGPT 发布 (2022年11月30日) 到…...
智能优化算法之灰狼优化算法(GWO)的实现(Python附源码)
文章目录一、灰狼优化算法的实现思路1、社会等级结构分级2、包围猎物3、攻击猎物4、搜索猎物二、算法步骤三、实例一、灰狼优化算法的实现思路 灰狼优化算法(Grey Wolf Optimizer,简称GWO)是由Seyedali Mirjalili等人于2014年提出的一种群智…...
leetCode热题10-15 解题代码,思路
前言 计划做一系列算法题的文章,因为自己这块确实比较薄弱,但又很重要!写这篇文章前,我已经刷了一本剑指offer,leetcode top150道,牛客某题库106道 这个样子吧,感觉题量算是入门了吧࿱…...
同步辐射GISAXS和GIWAXS的原理及应用领域
同步辐射GISAXS和GIWAXS是两种常用的同步辐射X射线衍射技术,它们在材料科学、化学、生物学、物理学等领域中广泛应用。本文将从原理、实验方法和应用三个方面,对同步辐射GISAXS和GIWAXS进行描述和比较。 一、原理 GISAXS和GIWAXS都是利用X射线与样品相互…...
OpManager 进行网络性能管理
计算机网络构成了任何组织的 IT 基础架构的支柱。由于企业严重依赖基于互联网的应用程序,由于网络相关问题,最终用户不受影响非常重要。因此,借助网络管理解决方案监控和提高网络性能对于保持企业始终正常运行至关重要。这将确保维护服务级别…...
面试被问到向上转型和向下转型时,怎么回答?
目录 前置小知识 1、向上转型 补充:向上转型的三种情况 2、向下转型 使用关键字:instanceof 3、转型带来了什么好处 前置小知识 java中的继承,我们简单回顾一下 通过java中的继承机制,可以实现一个类继承另一个类ÿ…...
加密月解密:概述,基础篇
加密月解密:概述,基础篇 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle&…...
DC-DC升压模块隔离高压稳压电源直流变换器12v24v48v转600V1000V1100V1500V2000V3000V
特点● 效率高达 80%● 2*2英寸标准封装● 单双电压输出● 价格低● 大于600V高压,稳压输出● 工作温度: -40℃~85℃● 阻燃封装,满足UL94-V0 要求● 温度特性好● 可直接焊在PCB 上应用HRB W1~25W 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为&am…...
pandas数据分析(三)
书接pandas数据分析(二) 文章目录DataFrame数据处理与分析处理超市交易数据中的异常值处理超市交易数据中的缺失值处理超市交易数据中的重复值使用数据差分查看员工业绩波动情况使用透视表与交叉表查看业绩汇总数据使用重采样技术按时间段查看员工业绩Da…...
cpu performance profiling
精彩文章分享1. android performanceAndroid 性能分析工具介绍 (qq.com)手机Android存储性能优化架构分析 (qq.com)抖音 Android 性能优化系列:启动优化之理论和工具篇 (qq.com)那些年,我们一起经历过的 Android 系统性能优化 (qq.com)Android卡顿&#…...
vue2启动项目npm run dev报错 Error: Cannot find module ‘babel-preset-es2015‘ 修改以及问题原因
报错内容如下图: 说找不到模块 babel-preset-es2015。 在报错之前,我正在修改代码,使用 ElementUI 的按需引入方式,修改了 babel.config.js 。 注意:vue/cli 脚手架4版本已经使用了 babel7 ,所以项目中…...
*9 set up 注意点
1、set up 执行的时机:beforeCreate 之前执行一次,this 是 undefined 2、set up 的参数: props:值为对象,组件外传递属性,内部声明并且接收属性 context:上下文对象,其内部包含三个…...
linux目录——文件管理
个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…...
使用new bing简易教程
申请new bing 首先先申请new bing然后等待通过,如下图 申请完,用edge浏览器,若有科学方法,就能在右上角的聊天进行向AI提问 使用插件来进行直接访问New Bing 在edge浏览器中安装一个插件,地址为:Mod…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
