【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的课程的确是很有饱满度。 这里,再整理一份课程中的作业要求。 …...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
