【ROS2入门】ROS 2 services 概述

news2024/11/17 4:32:22

        大家好,我是虎哥,从今天开始,我将花一段时间,开始将自己从ROS1切换到ROS2,在上一篇中,我们一起了解ROS 2中Topic, 这一篇,我们主要会围绕ROS中另外一个重要的概念“Services ”,详细介绍其具体的命令行操作指令。

目录

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(手动调用)


         服务(Services)是ROS图上,节点的另一种通信方法。服务基于呼叫和响应模型,而不是主题的发布者-订户模型。虽然主题允许节点订阅数据流并获得持续更新,但服务仅在客户端专门调用时提供数据。

 可以有多节节点调用这个服务,但是一个服务的服务端,只能有一个。

1 、启动模拟节点

到现在,你应该可以轻松地启动turtlesim。打开一个终端,执行如下命令:

ros2 run turtlesim turtlesim_node

打开一个新的终端,启动遥控节点:

ros2 run turtlesim turtle_teleop_key

2、 ros2 service list(列表)

保持turtlesim 打开状态,再打开一个新的终端,执行“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

您将看到两个节点都有相同的六个服务,名称中都有参数。ROS 2中的几乎每个节点都有这些基础设施服务,这些服务是基于这些基础设施建立的。在下一个教程中将有更多关于参数的内容。在本教程中,参数服务将从讨论中省略。

#通用基础服务
/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
​
/turtlesim/describe_parameters
/turtlesim/get_parameter_types
/turtlesim/get_parameters
/turtlesim/list_parameters
/turtlesim/set_parameters
/turtlesim/set_parameters_atomically

现在,让我们重点关注特定于turtlesim的服务,/clear、/ckill、/reset、/subject、/turtle1/set_pen、/turle1/telest_absolute和/turtle1/telest_relateve。您可能还记得在“介绍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

要同时查看所有活动服务的类型,可以将--show types选项(缩写为-t)附加到列表命令中:

#命令
ros2 service list -t

我们可以得到如下回复:

nvidia@ubuntu:~$ ros2 service list -t
/clear [std_srvs/srv/Empty]
/kill [turtlesim/srv/Kill]
/reset [std_srvs/srv/Empty]
/spawn [turtlesim/srv/Spawn]
/teleop_turtle/describe_parameters [rcl_interfaces/srv/DescribeParameters]
/teleop_turtle/get_parameter_types [rcl_interfaces/srv/GetParameterTypes]
/teleop_turtle/get_parameters [rcl_interfaces/srv/GetParameters]
/teleop_turtle/list_parameters [rcl_interfaces/srv/ListParameters]
/teleop_turtle/set_parameters [rcl_interfaces/srv/SetParameters]
/teleop_turtle/set_parameters_atomically [rcl_interfaces/srv/SetParametersAtomically]
/turtle1/set_pen [turtlesim/srv/SetPen]
/turtle1/teleport_absolute [turtlesim/srv/TeleportAbsolute]
/turtle1/teleport_relative [turtlesim/srv/TeleportRelative]
/turtlesim/describe_parameters [rcl_interfaces/srv/DescribeParameters]
/turtlesim/get_parameter_types [rcl_interfaces/srv/GetParameterTypes]
/turtlesim/get_parameters [rcl_interfaces/srv/GetParameters]
/turtlesim/list_parameters [rcl_interfaces/srv/ListParameters]
/turtlesim/set_parameters [rcl_interfaces/srv/SetParameters]
/turtlesim/set_parameters_atomically [rcl_interfaces/srv/SetParametersAtomically]

4 、ros2 service find(查找)

如果要查找特定类型的所有服务,可以使用以下命令:

ros2 service find <type_name>

例如,您可以找到所有Empty类型的服务,如下所示:

ros2 service find std_srvs/srv/Empty

得到如下回复:

nvidia@ubuntu:~$ ros2 service find std_srvs/srv/Empty
/clear
/reset

5 、ros2 interface show(接口展示)

您可以从命令行调用服务,但首先需要知道输入参数的结构。

ros2 interface show <type_name>.srv

To run this command on the /clear service’s type, Empty:

ros2 interface show std_srvs/srv/Empty.srv
#回复
nvidia@ubuntu:~$ ros2 interface show std_srvs/srv/Empty.srv
---

---将请求结构(上面)与响应结构(下面)分开。但是,正如您之前所了解的,Empty类型不会发送或接收任何数据。因此,它的结构自然是空白的。

让我们找一个具有发送和接收数据的类型的服务,例如/spown。从ros2服务列表-t的结果中,我们知道/spown的类型是turtlesim/srv/spown。要查看/spown调用和请求中的参数,请运行以下命令:

#命令
ros2 interface show turtlesim/srv/Spawn.srv
#回复
nvidia@ubuntu:~$ ros2 interface show turtlesim/srv/Spawn.srv
float32 x
float32 y
float32 theta
string name # Optional.  A unique name will be created and returned if this is empty
---
string name

---行上方的信息告诉我们调用/生成所需的参数。x、 y和theta决定了生成的海龟的位置,名字显然是可选的。在这种情况下,下面的信息不是您需要知道的,但它可以帮助您了解从呼叫中获得的响应的数据类型。

6 、ros2 service call(手动调用)

现在您知道了什么是服务类型,如何查找服务类型,以及如何查找该类型参数的结构,您可以使用以下方法调用服务:

ros2 service call <service_name> <service_type> <arguments>

<arguments>部分是可选的。例如,您知道Empty类型服务没有任何参数:

ros2 service call /clear std_srvs/srv/Empty

此命令将清除您的乌龟绘制的所有线条。

        现在,让我们通过调用/生成并输入参数来生成一个新的海龟。命令行服务调用中的输入<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中的服务进行通信。只有当节点明确请求信息时,服务才会将信息传递给该节点,并且每个请求只传递一次(而不是在连续流中)。您通常不想使用服务进行连续呼叫;主题或甚至行动将更适合。

以上就是我今天要分享的内容。纠错,疑问,交流: 911946883@qq.com

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

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

相关文章

excel图表技巧:如何在折线图上标注极值

折线图是大家日常工作中经常使用的一类基础图表&#xff0c;作用是体现数据的变化趋势。例如将每月的销售额通过折线图展示出来&#xff0c;数值变化就会很直观&#xff1a;抛开图表的美化&#xff0c;基本上大家做出来的折线图都是上图中的样子&#xff0c;而老菜鸟做出来的折…

<Linux>进度条小程序和git使用详解

进度条小程序和git使用详解 文章目录进度条小程序和git使用详解一、Linux第一个小程序 - 进度条1.\r && \n2.行缓冲3.进度条二、git使用详解1.git概述1.1.历史背景1.2.版本控制1.3.集中式与分布式的区别2.Gitee仓库创建2.1.新建仓库2.2.复制仓库链接2.3.克隆仓库2.4.扩…

Redis基础命令操作四之集合类型HASH

HASH命令 命令举例说明HSETHSET [OUTKEY] [INKEY][INVALUE]集合添加键值对[INKEY][INVALUE]HGETHGET [OUTKEY] [INKEY]获取集合中inkey对应的valueHGETALLHGETALL [OUTKEY]获取集合中所有key,value信息HDELHDEL [OUTKEY] [INKEY]从集合中删除inkey键值对HLENHLEN [OUTKEY]获…

linux部署KubeSphere和k8s集群(二)

上一篇文章讲述了在单个节点上安装 KubeSphere和k8s&#xff0c;这节主要讲解k8s多节点集群部署 第一步&#xff1a;设置主机名称hostname--(3台机器都设置) hostnamectl set-hostname k8s-master hostnamectl set-hostname k8s-node1 hostnamectl set-hostname k8s-node2 第二…

_Linux多线程--生产者消费者模型篇

文章目录1. 为何要使用生产者消费者模型2. 基于BlockingQueue的生产者消费者模型3. C queue模拟阻塞队列的生产消费模型条件变量使用规范简单测试1. BlockQueue (缓存--超市)2. ConProd.cc3. 结果展示升级版测试&&设计与RAII风格的加锁方式1. BlockQueue.hpp2. Task.hp…

MATLAB 实现路由算法详细教程(完整代码+数据)

问题描述&#xff1a;鉴于我们小组成员都来自计通学院&#xff0c;我们对专业知识计算机网络内的路由器进行研究。我们知道在整个互联网中&#xff0c;有着很多个小的无法互相连通的小网络&#xff0c;早在上世纪六十年代&#xff0c;针对不同网络无法互联的问题&#xff0c;路…

IC芯片类元件创建

--摘自凡亿教育 一、VS1003音频芯片 首先&#xff0c;先创建新的元器件库 按箭头所指的即可。 然后&#xff0c;我们右击箭头所指的键&#xff0c;选择第六个矩形。 然后&#xff0c;依次放置管脚 点击箭头所指&#xff0c;既可放置管脚。 由于我们放置管脚的时候&#xff…

python的webdriver应用

本文总结如何使用python的webdriver插件&#xff0c;应用自动化测试以及爬虫抓取数据。工具选择谷歌版本下载&#xff1a;https://www.iplaysoft.com/tools/chrome/webdriver版本&#xff1a;http://npm.taobao.org/mirrors/chromedriver/ 或https://chromedriver.storage.goog…

顺序表学习指南,请查收~

作者&#xff1a;爱塔居的博客_CSDN博客-JavaSE,数据结构领域博主 专栏&#xff1a;数据结构 作者简介&#xff1a;大三学生&#xff0c;希望一起进步&#xff01; 文章目录 目录 文章目录 一、顺序表基本概念 二、练习 一、顺序表基本概念 &#x1f33a;顺序表是用一段物理地…

常用工具的常用操作

写在前面 记录可能用到的各种工具常见技巧。 1&#xff1a;sublime 1.1&#xff1a;操作多列 首先选中要操作的列所在的行&#xff1a; 然后点击selection&#xff0c;spit lines&#xff1a; 接下来移动左右键就可以操作了&#xff0c;删除或者批量添加内容&#xff1a; 1…

创客匠人助力机构招生获客转化

后疫情时代&#xff0c;各行各业部署线上化成为一门必修课。 创客匠人作为一家专注教育培训行业的知识付费技术服务商&#xff0c;为了更好的帮助教培机构、教育企业立足于内容传播需求&#xff0c;打通线上线下资源通道&#xff0c;将线下资源向"线上核心平台"靠拢…

无极低码:100套大屏可视化源码,包含多个行业

随着互联网的发展&#xff0c;各项技术的不断成熟&#xff0c;数据可视化在新的时代&#xff0c;人们对数据的呈现方式开始有了新的要求。科技感、美观、直观、动感等等都成为现代软件系统新的设计和思考方向&#xff0c;特别是硬件的发展和数据的发展&#xff0c;数据分析的需…

Vue3商店后台管理系统设计文稿篇(一)

记录使用vscode构建Vue3商店后台管理系统&#xff0c;这是第一篇&#xff0c;主要记录Vue3项目创建过程&#xff0c;以及数据的挂载 文章目录一、Vue3项目创建二、取消代码规范检查三、数据简单挂载正文内容&#xff1a; 一、Vue3项目创建 使用如下命令全局安装yarn npm i -g …

Java开发 - Mybatis框架初体验

前言 在前文中&#xff0c;我们已经学习了Spring框架&#xff0c;Spring MVC框架&#xff0c;相信大家对这些基础的内容已经熟练使用了&#xff0c;今天&#xff0c;我们继续来学习Mybatis框架。就目前而言&#xff0c;Mybatis框架依然是比较实用的框架&#xff0c;这篇博客&a…

SpringMVC知识点记录

SpringMVC知识点记录1. SpringMVC简介2. 入门案例3. RequestMapping注解4. SpringMVC获取请求参数5. 域对象共享数据6.SpringMVC的视图7. RESTful8. RESTful 案例9. SpringMVC处理ajax请求10. 文件上传和下载11. 拦截器12. 异常处理器13. 注解配置SpringMVC14. SpringMVC执行流…

hgame2023 week1 writeup

#WEEK1 RE 1、re-test_your_IDA ida打开可见flag&#xff1a; int __cdecl main(int argc, const char **argv, const char **envp) {char Str1[24]; // [rsp20h] [rbp-18h] BYREFsub_140001064("%10s");if ( !strcmp(Str1, "r3ver5e") )sub_140001010…

移动端 - 搜索组件(search-input篇)

我们先来看一下最终效果 这样的搜索组件在移动端是很常见的, 大部分需求都是: 1. 搜索框进行搜索关键字 2. 热门搜索 3. 搜索历史 4. 搜索结果(提供上拉加载效果) 上述的基本需求也是我们现在需要去实现的, 先来说一下大致的方向: 1. search 一般都是一个路由组件, 所以先…

20.Isaac教程--Python接口(Python API)

Isaac Python接口(Python API) ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 虽然 Isaac SDK 的大部分部分都是用 C 编码的&#xff0c;但您可以选择使用 Python 构建您的应用程序。 本文档介绍了 Isaac SDK 的 Python API。 Python API 允许您…

Day859.高性能队列Disruptor -Java 并发编程实战

高性能队列Disruptor Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于高性能队列Disruptor的内容。 并发容器 中Java SDK 提供了 2 个有界队列&#xff1a; ArrayBlockingQueueLinkedBlockingQueue 它们都是基于 ReentrantLock 实现的&#xff0c;在高并发场景下&…

人工智能的过去与未来——萌芽

1943年—M-P模型 美国神经生理学家Warren McCulloch和数理逻辑学家Walter Pitts在合作的《A logical calculus of the ideas immanent in nervous activity》论文中对生物神经元进行建模&#xff0c;并提出了一种形式神经元模型&#xff0c;命名为McCulloch-Pitts模型。 生物…