【ROS2指南-5】理解ROS2服务

news2025/1/15 19:56:47

目标:使用命令行工具了解 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. xytheta确定生成的海龟的位置,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 参数”中,您将学习如何配置节点设置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/415829.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu18.04安装linux-lab

Ubuntu18.04安装linux-lab 文章目录Ubuntu18.04安装linux-labdocker安装linux-lab安装意外事件流处理参考资料本文主要目的是搭建linux内核实验环境 因为工作需要所以学习linux内核&#xff0c;目前主要根据《linux内核完全注释》和《自己动手写操作系统》进行学习&#xff0c…

代码随想录【链表】---->反转链表、两两交换链表中的节点

文章目录206. 反转链表思路双指针实现递归写法24. 两两交换链表中的节点思路代码实现206. 反转链表 题目LeetCode206. 反转链表 思路 翻转链表实际上只需要将每一个节点的指针域指向前一个节点即可&#xff0c;原来第一个节点的指针域指向NULL指针 原头节点是1&#xff0c…

前端的性能对业务数据的影响

性能总论 一切没有 profiling 的性能都是耍流氓。凡是真正有价值的性能优化&#xff0c;必定是从端到端的业务场景建立体系来考虑的。 性能体系的建立可以分成以下几部分&#xff1a; 现状评估和建立指标&#xff1b;技术方案&#xff1b;执行&#xff1b;结果评估和监控。 …

【博学谷学习记录】超强总结,用心分享 | 架构师 Redis学习总结

文章目录1.Redis概述&安装配置安装启动2.Redis的Key的设计规范1、key名设计2、避免bigkey**string字符串类型**hash类型&#xff08;散列表&#xff09;list列表类型set集合类型sortedset有序集合类型bitmap位图 类型geo地理位置类型1.Redis概述&安装配置 官网&#x…

SQL SERVER数据库生成数据字典并且导出方法

SQL SERVER数据库生成数据字典并且导出方法打开SQL SERVER 2014找到你所需要建立数据字典的数据库在代码区输入如下SQL语句点击运行&#xff0c;导出或者带标题复制出来打开SQL SERVER 2014找到你所需要建立数据字典的数据库 右键→点击 新建查询 在代码区输入如下SQL语句 S…

椭圆型偏微分方程和格林函数

一、本文先简单地介绍一下Green 函数&#xff0c; 第一部分内容来自于文献 [0]BI-GreenNet: Learning Green’s Functions by Boundary Integral Network [1] Evans, L.C.: Partial Differential Equations. American Mathematical Society, Providence, R.I. (2010) [2]Learn…

Redis数据库的安装和命令使用以及python的调用

Redis 简介 Redis是完全开源免费的&#xff0c;是一个高性能的key-value数据库。 Redis与其他 key- value 缓存产品有以下三个特点&#xff1a; Redis支持数据的持久化&#xff0c;可将内存中的数据保存在磁盘中&#xff0c;重启时再次加载使用。Redis不仅支持简单的key-val…

故障定级和定责

故障管理的第一步是对故障的理解&#xff0c;只有正确地面对故障&#xff0c;我们才能够找到更合理的处理方式。 这便需要做两个工作&#xff1a;一是跟踪线上故障处理和组织故障复盘&#xff0c;二是制定故障定级定责标准&#xff0c;同时有权对故障做出定级和定责。 所以&a…

网上选课系统——管理员子系统的设计与实现

本系统是C/S&#xff08;客户端/服务器&#xff09;两层结构。采用C#数据库编程语言。服务器部分是SQL Server2000 关系数据库。客户端分为学生选课子系统和管理员管理子系统&#xff0c;它们通过存于后台数据库的数据产生联系。 无论是学生子系统还是管理员子系统&#xff0c…

Follow My Heart Of Apirl. 2023

This article will tell all my story in my daily file to make some deep memories in my heart for Apirl.2023. The line template: The template will be used as the mark of the storys start. 2023.04.10 Commodity n. 货物、商品、日用品 1. Global commodity prices …

《OpenCV3和Qt5计算机视觉应用开发》学习笔记

Qt Creator中使用opencv 在.pro文件中添加 INCLUDEPATH D:\MajorSoftware\opencv\opencv\build\include LIBS D:\MajorSoftware\opencv\opencv\mingw_build\lib\libopencv_*.a一个插件就是一个简单的库&#xff0c;如.dll&#xff0c;可以在运行时加载和使用插件&#xff…

基于模型预测控制(MPC)的微电网调度优化的研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

7针0.96寸OLED的HAL库代码(硬件SPI/全代码/stm32f1/CubeMX配置/包含有正负浮点数/100%一次点亮)

系列文章链接 HC-SR04超声波模块的使用 编码电机以及双电机驱动 4针 0.96OLED的使用 更多有意思的文章点击“我的主页” --------&#x1f610; 更多有意思的视频 -----> B站 想要亿只独角兽 --------&#x1f610; 前言 之前发布了一篇硬件I2C的0.96 OLED驱动代码&#…

全国计算机等级考试——二级JAVA完整大题题库【五十三道】

全国计算机等级考试二级 JAVA 题目内容 编写于2023.04.10 分为40道选择题和3道大题&#xff08;大题是程序填空类型&#xff09; 其中选择题只能进去做一次&#xff0c;一旦退出来则不可再进&#xff08;注意&#xff01;&#xff09;。大题可以重复进入&#xff0c;重复做。…

JavaScript【七】JavaScript中的内置顶层函数

文章目录&#x1f31f;前言&#x1f31f;内置&#x1f31f;顶层&#x1f31f;内置顶层函数&#x1f31f; Number()&#x1f31f; parseInt()&#x1f31f;parseFloat()&#x1f31f;String()&#x1f31f;Boolean()&#x1f31f; isNaN()&#x1f31f;eval()&#x1f31f;Numbe…

(详细)《美国节日》:某月的第几个星期几

目录 一、题目描述&#xff1a; 二、思路&#xff1a; 1、给定 年月日&#xff0c;如何知道这天是星期几&#xff1f; 2、已知这个月的第一天是星期几&#xff0c;如何知道第三个星期一是几号&#xff1f; 3、最后一个星期一 三、思路总结 四、代码 一、题目描述&#xf…

机器学习---集成学习报告

1.原理以及举例 1.1原理 集成学习&#xff08;Ensemble Learning&#xff09;是一种机器学习策略&#xff0c;它通过结合多个基学习器&#xff08;base learners&#xff09;的预测来提高模型的性能。集成学习的目标是创建一个比单个基学习器更准确、更稳定的最终预测模型。这…

力扣---LeetCode面试题17.04.消失的数字

文章目录前言面试题17.04.消失的数字方法一&#xff1a;方法二&#xff1a;异或解析&#xff1a;方法三&#xff1a;总结前言 我有我要赶去的远方&#xff0c;风雨兼程披星戴月 本章的内容是力扣每日随机一题的部分方法的解析 提示&#xff1a;以下是本篇文章正文内容&#xf…

安全防御 --- 恶意代码、防病毒

一、恶意代码 1、按照传播方式分类 &#xff08;1&#xff09;病毒 概念&#xff1a;病毒是一种基于硬件和操作系统的程序&#xff0c;具有感染和破坏能力&#xff0c;这与病毒程序的结构有关。病毒攻击的宿主程序是病毒的栖身地&#xff0c;它是病毒传播的目的地&#xff0…

2023.04.09 学习周报

文章目录摘要文献阅读1.题目2.摘要3.简介4.本文贡献5.传统方法6.IDLSTM-EC7.实验7.1 数据集7.2 基线7.3 评估指标7.4 实验结果8.结论9.展望MDS降维算法1.基本思想2.优化目标3.数学推导4.算法流程马尔可夫链1.随机过程2.简介3.数学定义4.转移概率矩阵5.状态转移矩阵的稳定性Navi…