当前位置:网站首页>ROS2系列知识(4): 理解【服务】的概念
ROS2系列知识(4): 理解【服务】的概念
2022-08-01 00:17:00 【无水先生】
Humble Hawksbill (humble) — ROS 2 Documentation: Humble documentation
前言
ROS2通信基本的概念有九个,分别是:Node、topic、service、actions、rqt、launch、record-play、backdata、parameter;本文着重讲述service概念。

一、背景知识
服务是 ROS 图中节点的另一种通信方式。服务基于调用和响应模型,而不是主题的发布者-订阅者模型。虽然主题允许节点订阅数据流并获得持续更新,但服务仅在客户端专门调用它们时才提供数据。也就是说,如果服务也雷同于主题,就会大多数时间都在空跑,浪费资源。
二、开启 演示方式
启动两个 turtlesim 节点,/turtlesim 和 /teleop_turtle。
打开一个新终端并运行:
ros2 run turtlesim turtlesim_node打开另一个终端并运行:
ros2 run turtlesim turtle_teleop_key三、显示服务项
打开一个终端,执行:
ros2 service list会显示:

您将看到两个节点都有相同的六个服务,名称中带有参数。几乎 ROS 2 中的每个节点都有这些基础设施服务,这些基础设施服务都是基于这些服务构建的。下一个教程中将有更多关于参数的内容。在本教程中,将省略参数服务的讨论。
现在,让我们关注特定于 turtlesim 的服务,
- /clear、
- /kill、
- /reset、
- /spawn、
- /turtle1/set_pen、
- /turtle1/teleport_absolute 和
- /turtle1/teleport_relative。
您可能还记得在使用 turtlesim 和 rqt 教程中使用 rqt 与其中一些服务进行交互。
四、服务的种类
服务具有描述服务的请求和响应数据的结构的类型。服务类型的定义类似于主题类型,除了服务类型有两部分:一个消息用于请求,另一个用于响应。
要找出服务的类型,请使用以下命令:
ros2 service type <service_name>我们来看看turtlesim的/clear服务。在新终端中,输入命令:
ros2 service type /clear将返回:
std_srvs/srv/Empty
Empty 类型表示服务调用在发出请求时不发送数据,在收到响应时不接收数据。
五、看所有的可访问服务
要同时查看所有活动服务的类型,可以在 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]
...六、ros2 服务查找
如果要查找特定类型的所有服务,可以使用命令:
ros2 service find <type_name>例如,您可以像这样找到所有 Empty 类型的服务:
ros2 service find std_srvs/srv/Empty哪个会返回:
/clear
/reset七、ros2界面展示
您可以从命令行调用服务,但首先您需要知道输入参数的结构。
ros2 interface show <type_name>要在 /clear 服务的类型上运行此命令,请为 Empty:
ros2 interface show std_srvs/srv/Empty会返回:
---
这里【---】将请求结构(上)与响应结构(下)分开。但是,正如您之前所了解的,Empty 类型不发送或接收任何数据。所以,很自然,它的结构是空白的。
让我们用一个发送和接收数据的类型来内省一个服务,比如 /spawn。从 ros2 service list -t 的结果,我们知道 /spawn 的类型是 turtlesim/srv/Spawn。
要查看 /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--- 行上方的信息告诉我们调用 /spawn 所需的参数。 x、y 和 theta 确定生成的海龟的位置,而名称显然是可选的。
在这种情况下,您不需要知道该行下方的信息,但它可以帮助您了解从调用中获得的响应的数据类型。
八 ros2 服务调用
现在您知道什么是服务类型、如何查找服务类型以及如何查找该类型参数的结构,您可以使用以下方式调用服务:
ros2 service call <service_name> <service_type> <arguments><arguments> 部分是可选的。例如,您知道空类型服务没有任何参数:
ros2 service find 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 窗口将立即更新新生成的海龟:

九 总结
节点可以使用 ROS 2 中的服务进行通信。与主题不同 - 一种单向通信模式,节点发布可供一个或多个订阅者使用的信息 - 服务是客户端向节点发出请求的请求/响应模式提供服务,服务处理请求并生成响应。
您通常不想使用服务进行连续呼叫;主题甚至行动会更合适。
Understanding services — ROS 2 Documentation: Humble documentation
边栏推荐
猜你喜欢

类和对象:中
Carefully organize 16 MySQL usage specifications to reduce problems by 80% and recommend sharing with the team

Kyoto University:Masaki Waga | 黑箱环境中强化学习的动态屏蔽

《ArchSummit:时代的呐喊,技术人听得到》

Flink 1.13(八)CDC

Rainbow share | how to use moving targets defense technology to guard against the unknown
![[Cloud Residency Co-Creation] [HCSD Big Celebrity Live Broadcast] Personally teach the secrets of interviews in big factories](/img/7a/278ffada1cc660e7f5c2d7c66fa38e.png)
[Cloud Residency Co-Creation] [HCSD Big Celebrity Live Broadcast] Personally teach the secrets of interviews in big factories

C# Rectangle基本用法和图片切割

MVCC总结

cobaltstrike
随机推荐
lua入门案例实战123DIY
One line of code to solve CoreData managed object properties change in SwiftUI problem of animation effects
leetcode:126. 单词接龙 II
When can I use PushGateway
Matlab / ArcGIS 处理GPM全球月均降水数据
IPD流程专业术语
Matlab/Arcgis processing nc data
WindowInsetsControllerCompat简单使用
[微服务]分布式事务解决方案-Seata
消息队列消息存储设计(架构实战营 模块八作业)
SQL injection Less47 (error injection) and Less49 (time blind injection)
虚继承的原理
vim的基本使用-底行模式
vector的基本实现
TFC CTF 2022 WEB Diamand WriteUp
Unity3D学习笔记10——纹理数组
Usage of mysql having
继承和友元,静态成员的关系
Recommendation system: Summary of common evaluation indicators [accuracy rate, precision rate, recall rate, hit rate, (normalized depreciation cumulative gain) NDCG, mean reciprocal ranking (MRR), ROC
Exam preparation plan