文章目录

  • 背景
  • 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 命令

参考官方文档: Understanding services

背景

服务(Service)是ROS图(ROS graph)中节点的另一种通信方法。服务是基于调用和响应(call-and-response)的模式,而不是话题的发布者-订阅者(publisher-subscriber)模式。话题允许节点订阅数据流并获得持续的更新,而服务只在被客户端调用时提供数据。

1. 准备工作

启动两个 turtlesim 节点,/turtlesim 和 /teleop_turtle。

打开一个新的终端并运行:

ros2 run turtlesim turtlesim_node

打开另一个终端并运行

ros2 run turtlesim turtle_teleop_key

2. 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

你会看到 teleop_turtle 和 turtlesim 这两个节点都有同样的六个服务,其名称中都有 parameters 。在ROS 2中,几乎每个节点都有这些基础设施服务,而参数是建立在这些服务之上的。在下一个教程中会有更多关于参数的内容。在本教程中,将省略参数服务的讨论。

现在,让我们把注意力集中在针对海龟的服务上,/clear ,/kill ,/reset , /spawn , /turtle1/set_pen , /turtle1/teleport_absolute , 和 /turtle1/teleport_relative 。你可能记得在Using turtlesim and rqt:使用 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 命令

如果要看到所有正在运行的服务的类型,你可以在 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]

4. ros2 service find 命令

如果你想找到某个特定类型的所有服务,你可以使用命令:

ros2 service find <type_name>

例如,你可以通过下面这条命令找到所有 Empty 类型的服务:

ros2 service find std_srvs/srv/Empty

返回结果如下:

/clear
/reset

5. ros2 interface show 命令

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

ros2 interface show <type_name>

例如:

ros2 interface show std_srvs/srv/Empty

返回结果如下:

—将请求结构(上面)和响应结构(下面)分开。但是,正如你前面所学到的,空(Empty)类型不发送或接收任何数据。所以,自然地,它的结构是空白的。

让我们来查看一个具有发送和接收数据类型的服务,比如 /spawn 。从 ros2 service list -t 的结果可以知道 /spawn 的类型是 turtlesim/srv/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

6. ros2 service call 命令

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

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

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

ros2 service call /clear 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窗口将立即生成新的乌龟。

Understanding services:理解服务(Service)相关推荐

  1. Sharepoin学习笔记—架构系列—06 Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1

    Sharepoint服务是Sharepoint的重要组成,可以说Sharepoint的许多网站功能都是基于这些服务构架起来的.这里把Sharepoint服务的相关要点总结一下. 1.什么是 Share ...

  2. Sharepoin学习笔记—架构系列—Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1

    Sharepoin学习笔记-架构系列-Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1 Sharepoint服务是Sha ...

  3. Sharepoin学习笔记—架构系列—07nSharepoint服务(Services)与服务应用程序框架(Service Application Framework) 2

    上一篇我们以问答的方式明确了Sharepoint服务的一些概念,这里我们重点来看两个方面:Sharepoint服务器构架对象模型以及Sharepoint 服务应用程序的某些拓扑结构 一.Sharepo ...

  4. Sharepoin学习笔记—架构系列—Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 2

    上一篇我们以问答的方式明确了Sharepoint服务的一些概念,这里我们重点来看两个方面:Sharepoint服务器构架对象模型以及Sharepoint 服务应用程序的某些拓扑结构 一.Sharepo ...

  5. android 浏览器源码分析,从源码出发深入理解 Android Service

    原标题:从源码出发深入理解 Android Service 原文链接: 建议在浏览器上打开,删除了大量代码细节,:) 本文是 Android 系统学习系列文章中的第三章节的内容,介绍了 Android ...

  6. 微软LUIS语义理解服务介绍

    1.LUIS概述 LUIS(Language Understanding Intelligent Services)是微软新近推出了的的语义理解服务,可以方便用户进行API调用,创建自己场景的语义理解 ...

  7. Clause,开源的语义理解服务

    Clause项目QQ交流群:809987971, 点击链接加入群聊 Clause Chatopera Language Understanding Service,Chatopera 语义理解服务 h ...

  8. linux 进程间通信 dbus-glib【实例】详解三 数据类型和dteeth(类型签名type域)(层级结构:服务Service --> Node(对象、object) 等 )(附代码)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  9. 微服务架构之「 下一代微服务 Service Mesh 」

    点击上方"朱小厮的博客",选择"设为星标" 做积极的人,而不是积极废人 Service Mesh 被大家称为下一代的微服务,是微服务领域的一颗新星,被大家讨论的 ...

最新文章

  1. 【Linux入门到精通系列讲解】内存管理malloc和free函数
  2. 转载:LINQ to SQL更新数据库操作
  3. 关于Javaweb部署到linux服务器产生乱码?的原因分析
  4. 实验九——基本数据类型存储及应用总结
  5. T-SQL语句学习(三)
  6. java 中sub,Fn :: Sub中的嵌套Fn :: ImportValue不适用于SAM模板
  7. PancakeBunny获160万美元战略融资,Binance Labs领投
  8. 批量关停azure vm_创建Azure自动化以启动Azure VM
  9. Kubernetes 弃用 Docker !
  10. python打印json_Python漂亮打印JSON
  11. Selenium3笔记-WebDriver源码初探
  12. Javascript脚本之清除浏览器历史数据
  13. php文字音频插件下载安装,Goodhertz音频插件下载
  14. 戴尔计算机亮度如何调整,官方数据:如何调整Dell显示器的亮度
  15. sscms 导航调用方法
  16. YAPI 重点功能使用介绍
  17. java设计模式-单例模式
  18. jquery提交表单验证示例代码
  19. vue3 + js-cookie加密解密(普通版本/TS版本)
  20. 从鹿晗关晓彤恋情事件看运维的节假日准备工作

热门文章

  1. Android Intent之传递带有对象的集合(Serializable传递对象和对象集合)
  2. 流利说被强制退市:因市值过低 不符合上市要求
  3. windows 2008 r2 NTP同步Internet时间配置
  4. 鹰谷靶点 | PI3K靶向抑制剂治疗乳腺癌的研究进展
  5. HOU211学习总结
  6. 用计算机做出牙膏盒立体效果制作,使用Nuke进行2D转3D立体世界详解案例教程(二):制作3D立体效果...
  7. 使用sqoop迁移mysql数据到hive
  8. Linux文件系统概览
  9. rhel8安装libpcap-devel包
  10. Spring学习:Spring的IOC注解