【ROS2指南-5】理解ROS2服务
目标:使用命令行工具了解 ROS 2 中的服务。
教程级别:初学者
时间: 10分钟
内容
-
背景
-
先决条件
-
任务
-
1 设置
-
2 ros2服务列表
-
3 ros2服务类型
-
4 ros2 服务查找
-
5 ros2界面展示
-
6 ros2 服务调用
-
-
概括
-
下一步
-
相关内容
背景
服务是 ROS 图中节点的另一种通信方法。服务基于调用和响应模型,而不是主题的发布者-订阅者模型。虽然主题允许节点订阅数据流并获得持续更新,但服务仅在客户端专门调用时才提供数据。


先决条件
本教程中提到的一些概念,如nodes和topics,在本系列之前的教程中有所介绍。
你将需要turtlesim 包。
任务
1 设置
启动两个 turtlesim 节点,/turtlesim和/teleop_turtle。
打开一个新的终端并运行:
ros2 run turtlesim turtlesim_node
打开另一个终端并运行:
ros2 run turtlesim turtle_teleop_key
2 ros2服务列表
在新终端中运行命令将返回系统中当前活动的所有服务的列表: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
parameters您会看到两个节点的名称中都包含相同的六项服务。几乎 ROS 2 中的每个节点都有这些构建参数的基础设施服务。在下一个教程中将有更多关于参数的内容。在本教程中,将省略参数服务的讨论。
现在,让我们关注 turtlesim 特定的服务/clear、、、、、、、和。您可能还记得在“介绍 turtlesim 和 rqt”教程中使用 rqt 与其中一些服务进行交互。/kill/reset/spawn/turtle1/set_pen/turtle1/teleport_absolute/turtle1/teleport_relative
3 ros2服务类型
服务具有描述服务请求和响应数据结构的类型。服务类型的定义与主题类型类似,除了服务类型有两部分:一个消息用于请求,另一个消息用于响应。
要找出服务的类型,请使用以下命令:
ros2 service type <service_name>
我们来看看turtlesim的/clear服务。在新终端中,输入命令:
ros2 service type /clear
哪个应该返回:
std_srvs/srv/Empty
该Empty类型表示服务调用在发出请求时不发送数据,在接收响应时不接收数据。
3.1 ros2服务列表 -t
要同时查看所有活动服务的类型,可以在命令后附加--show-types选项,缩写为:-tlist
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 服务查找
如果要查找特定类型的所有服务,可以使用命令:
ros2 service find <type_name>
例如,您可以找到所有Empty类型化的服务,如下所示:
ros2 service find std_srvs/srv/Empty
哪个将返回:
/clear /reset
5 ros2界面展示
您可以从命令行调用服务,但首先您需要了解输入参数的结构。
ros2 srv show <type_name>
/clear要在服务类型上运行此命令,请执行以下操作Empty:
ros2 srv show std_srvs/srv/Empty
哪个将返回:
---
将---请求结构(上方)与响应结构(下方)分开。但是,正如您之前了解到的,该Empty类型不发送或接收任何数据。所以,自然地,它的结构是空白的。
让我们回顾一下具有发送和接收数据类型的服务,例如/spawn. 从结果中,我们知道的类型是。ros2 service list -t/spawnturtlesim/srv/Spawn
要查看调用和请求中的参数/spawn,请运行以下命令:
ros2 srv 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
该行上方的信息---告诉我们调用/spawn. x,y并theta确定生成的海龟的位置,name显然是可选的。
在这种情况下,您不需要了解该行下方的信息,但它可以帮助您了解从调用中获得的响应的数据类型。
6 ros2 服务调用
现在您知道什么是服务类型、如何查找服务类型以及如何查找该类型参数的结构,您可以使用以下方法调用服务:
ros2 service call <service_name> <service_type> <arguments>
该<arguments>部分是可选的。例如,您知道Empty类型化服务没有任何参数:
ros2 service call /clear std_srvs/srv/Empty
这个命令将清除 turtlesim 窗口中你的乌龟绘制的任何线条。

现在让我们通过调用/spawn和输入参数来生成一个新的海龟。<arguments>来自命令行的服务调用中的输入需要采用 YAML 语法。
输入命令:
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"
您将获得正在发生的事情的这种方法样式视图,然后是服务响应:
waiting for service to become available... requester: making request: turtlesim.srv.Spawn_Request(x=2.0, y=2.0, theta=0.2, name='None')response: turtlesim.srv.Spawn_Response(name='None')
您的 turtlesim 窗口将立即更新为新生成的海龟:

概括
节点可以使用 ROS 2 中的服务进行通信。与主题(一种单向通信模式,其中节点发布可由一个或多个订阅者使用的信息)不同,服务是一种请求/响应模式,其中客户端向节点发出请求提供服务,服务处理请求并生成响应。
您通常不想使用连续呼叫服务;主题甚至行动会更合适。
在本教程中,您使用了命令行工具来识别、阐述和调用服务。
下一步
在下一个教程“了解 ROS 2 参数”中,您将学习如何配置节点设置。
相关文章:
【ROS2指南-5】理解ROS2服务
目标:使用命令行工具了解 ROS 2 中的服务。 教程级别:初学者 时间: 10分钟 内容 背景 先决条件 任务 1 设置 2 ros2服务列表 3 ros2服务类型 4 ros2 服务查找 5 ros2界面展示 6 ros2 服务调用 概括 下一步 相关内容 背景 服务是 …...
探索Apache Hudi核心概念 (3) - Compaction
Compaction是MOR表的一项核心机制,Hudi利用Compaction将MOR表产生的Log File合并到新的Base File中。本文我们会通过Notebook介绍并演示Compaction的运行机制,帮助您理解其工作原理和相关配置。 1. 运行 Notebook 本文使用的Notebook是:《A…...
100Wqps异地多活,得物是怎么架构的?
说在前面 在40岁老架构师尼恩的数千读者群中,一直在指导大家简历和职业升级,前几天,指导了一个华为老伙伴的简历,小伙伴的优势在异地多活,但是在简历指导的过程中,尼恩发现: 异地多活的概念、异…...
35岁的测试工程师被公司强行辞退,感叹道:我以前就该好好努力了
曾经的高薪软件测试工程师,今年35岁了,被公司劝退了,外卖跑到凌晨,很累,但还是有一种想诉说的冲动。哪怕让大家觉得已经说得太多了,烦了,都成祥林嫂了,但是,我是真的想说…...
ASP.NET动态Web开发技术第5章
第5章数据验证一.预习笔记 1.验证控件概述: 2.RequiredFieldValidator(必填验证) 常用属性1:ControlToValidator:被验证的输入控件的ID 常用属性2:Text:验证失败时,验证控件显示的文本 常用…...
【数据结构与算法篇】时间复杂度与空间复杂度
目录 一、数据结构和算法 1.什么是数据结构? 2.什么是算法? 3.数据结构和算法的重要性 二、算法的时间复杂度和空间复杂度 1.算法效率 2.算法的复杂度 3.复杂度在校招中的考察 4.时间复杂度 5.空间复杂度 6.常见复杂度对比 7.复杂度的OJ练…...
HTTP API接口设计规范
1. 所有请求使用POST方法 使用post,相对于get的query string,可以支持复杂类型的请求参数。例如日常项目中碰到get请求参数为数组类型的情况。 便于对请求和响应统一做签名、加密、日志等处理 2. URL规则 URL中只能含有英文,使用英文单词或…...
数据一致性校验(pt-table-checksum)
介绍 pt-table-checksum 和 pt-table-sync 是 percona 公司发布的、检查 MySQL 主从数据库数据一致性校验的工具。pt-table-checksum 利用 MySQL 复制原理,在主库执行校验和计算,并对比主从库校验和,由此判断主从库数据是否一致。如果发现数…...
Talk预告 | 新加坡国立大学郑奘巍 AAAI‘23 杰出论文:大批量学习算法加速推荐系统训练
本期为TechBeat人工智能社区第486期线上Talk! 北京时间3月30日(周四)20:00,新加坡国立大学二年级博士生——郑奘巍的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “大批量学习算法加速推荐系统训练”,届时将分…...
肖 sir_就业课__004项目流程(H模型)
项目流程: 一、面试提问(h模型) 1、你说下你们公司测试流程? 2、给你一个需求你会怎么做? 3、你讲下你的工作? 4、谈谈你是如何去测试? 答案:h模型 要求第一人称来写 讲解简化文字流程&#x…...
snipaste 截图工具——可以使图片悬浮在任何软件上,方便对比
一、下载 官网下载地址:Snipaste Downloads (需要梯子) CSDN下载地址:https://download.csdn.net/download/weixin_43042683/87671809 1. 下载 压缩包后,免安装,直接解压后既可以使用。 2. 点击Snipaste.…...
Docker 快速部署Springboot项目
编写Dockerfile文件 # Docker image for springboot file run # VERSION 0.0.1 # Author: # 基础镜像使用java FROM openjdk:8 # 作者 MAINTAINER laihx # VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到…...
【LeetCode: 剑指 Offer II 112. 最长递增路径 | 递归 | DFS | 深度优先遍历 | 记忆化缓存表】
🍎作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎 🍎座右…...
hive 入门 一般用于正式环境 修改元数据(二)
安装配置可参考 https://blog.csdn.net/weixin_43205308/article/details/130020674 1、如果启动过derby,最小初始化过 在安装路径下删除 derby.log metastore_db rm -rf derby.log metastore_db此处省略安装mysql数据库 2、配置MySQL 登录mysql mysql -uroot …...
在RedHat系统上使用firewall-cmd命令可以将端口打开
在RedHat系统上使用firewall-cmd命令可以将端口打开,具体操作如下: 首先,检查当前系统使用的防火墙服务,比如firewalld或iptables,使用以下命令: systemctl status firewalld # 检查firewalld服务 system…...
分享(五):免费可用的多种类 API 大全集合整理
前言 搜罗了各大平台整理了一波免费可以用的 API ,有需要的收藏起来啦。 实名认证 运营商二要素 API :运营商校验此姓名、手机号码是否一致。 运营商三要素 API:运营商验证姓名、身份证号码、手机号码是否一致,返回验证结果称…...
8.1 假设验证的基本概念
学习目标: 要学习假设检验的基本概念,我会按照以下步骤进行: 了解假设检验的基本概念:假设检验是一种统计推断方法,用于判断某个假设是否成立。一般来说,假设检验包括原假设和备择假设两个假设,…...
C语言基础
为了学习数据结构,整理一篇基础的C语言入门知识(仅供自身学习用) 条件运算符 语法:exp1 ? exp2 : exp3; exp1是条件表达式,如果结果为真,返回exp2 如果结果为假,返回exp3 if (a > b)max …...
Docker教程:如何将Helix QAC创建为一个容器并运行?
在这个Docker教程中,你将了解到如何将Helix QAC创建为一个容器化的镜像并运行。 Docker的基本定义是一个开源且流行的操作系统级虚拟化(通常称为“容器化”)技术,它是轻量级且可移植的,主要在Linux和Windows上运行。D…...
1676_MIT 6.828 xv6中的CPU alarm_资料翻译整理
全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 我觉得看了几个MIT的课程之后让我觉得我的大学四年有点浪费时光,看起来MIT的课程的确是很有饱满度。 这里,再整理一份课程中的作业要求。 …...
STM32磁悬浮平衡术(一):PID算法调校与硬件选型指南
1. PID算法:磁悬浮系统的"大脑" 磁悬浮系统的核心挑战在于如何让浮子稳定悬浮。想象一下,你要用手指顶着一根铅笔保持直立——这需要不断微调手指的位置来抵消铅笔的倾斜。PID算法就是STM32中扮演这个"微调手指"角色的关键程序。 PI…...
earthengine-api 未来展望:路线图、新功能和社区发展趋势
earthengine-api 未来展望:路线图、新功能和社区发展趋势 【免费下载链接】earthengine-api Python and JavaScript bindings for calling the Earth Engine API. 项目地址: https://gitcode.com/gh_mirrors/ea/earthengine-api earthengine-api 作为连接地球…...
轴,V带轮,斜齿轮,丝杠零件图CAD图纸
轴作为机械系统中的核心传动部件,承担着传递扭矩与支撑旋转的重要功能。其设计需综合考虑材料强度、刚度及热处理工艺,以确保在复杂载荷下保持稳定运行。典型结构包含阶梯轴、空心轴等类型,通过优化轴肩定位与键槽布局,可有效提升…...
Marin说PCB之GMSL2 POC电路优化实战---从仿真到测试的完整解析
1. GMSL2 POC电路问题诊断与优化思路 最近在测试GMSL2 POC电路时遇到了一个典型问题:多路信号的插损(S21)和回损(S11)指标不达标。这种情况在实际项目中并不少见,但每次遇到都需要我们仔细分析原因并找到有…...
FRCRN命令行工具使用详解:从音频文件到降噪输出的完整流程
FRCRN命令行工具使用详解:从音频文件到降噪输出的完整流程 你是不是也遇到过这种情况?手头有一堆录音文件,背景里混杂着各种杂音——可能是空调的嗡嗡声、键盘的敲击声,或者是窗外的车流声。手动处理这些音频不仅费时费力&#x…...
掌握Calibre电子书管理:从格式转换到高级编辑的完整指南
掌握Calibre电子书管理:从格式转换到高级编辑的完整指南 【免费下载链接】calibre The official source code repository for the calibre ebook manager 项目地址: https://gitcode.com/GitHub_Trending/ca/calibre Calibre是一款功能强大的开源电子书管理器…...
图像比对与像素级分析:用diffimg实现高效差异检测
图像比对与像素级分析:用diffimg实现高效差异检测 【免费下载链接】diffimg Differentiate images in python - get a ratio or percentage difference, and generate a diff image 项目地址: https://gitcode.com/gh_mirrors/di/diffimg 在视觉内容创作与技…...
OpenLayers飞机航线动画实战:如何让SVG图标随航线动态转向(附完整代码)
OpenLayers飞机航线动画实战:SVG图标动态转向与轨迹平滑渲染技术解析 在航空监控、物流追踪等地理信息系统中,飞机或运输工具的实时轨迹展示一直是核心需求。传统静态路径显示已无法满足现代交互需求,如何实现图标随航线动态转向的平滑动画成…...
当LLM学会“思考”算法逻辑:拆解EoH如何用“思想+代码”协同进化,碾压传统自动设计
当LLM成为算法设计师:揭秘EoH如何用“思维代码”双螺旋进化重塑自动算法设计 想象一下,你正在指挥一支由建筑师和施工队组成的特殊团队。建筑师负责绘制蓝图,施工队负责将蓝图变为现实。但与传统团队不同,你的建筑师能根据施工反…...
【仅限首批内测用户开放】Polars 2.0清洗性能调优白皮书:含12个未公开API、3类CPU亲和性绑定策略
第一章:Polars 2.0大规模数据清洗技巧概览Polars 2.0 在性能、内存效率与API一致性上实现重大升级,为TB级结构化数据清洗提供了低延迟、高吞吐的原生解决方案。其基于Arrow 15的列式引擎、零拷贝切片能力及多线程LazyFrame执行计划优化,使复杂…...
