首页 > 其他分享 > ROS2-Beginner:5-理解服务

ROS2-Beginner:5-理解服务

时间:2023-06-01 17:44:06浏览次数:47  
标签:Empty 服务 Beginner service clear 理解 ROS2 turtlesim ros2

背景

服务是ros graph中另一种通信方法。服务是基于调用和响应相比话题是发布者和订阅者模式。话题允许节点来订阅数据流并获得连续的更新。服务只当被具体客户端调用时才提供数据。

任务

1、打开turtlesim仿真器

ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

2、ros2 服务列表

显示如下服务列表

ros2 service list

您将看到两个节点有相同的六个服务在他们的参数中。ROS 2中的几乎每个节点都有这些基础设施服务,这些服务是参数构建的基础。

本节将聚焦在turtlesim具体的服务,/clear/kill/reset/spawn/turtle1/set_pen/turtle1/teleport_absolute以及/turtle1/teleport_relative。

3、ros2服务类型

服务具有描述服务的请求和响应数据的结构的类型。服务类型的定义类似于话题类型,服务类型有两个部分:一个消息用户请求,另一个用于响应。

查看服务的类型:

ros2 service type <service_name>

下面看一下/clear的类型:

ros2 service type /clear

Empty类型表示服务调用在发出请求时不发送数据,在接收响应时不接收数据。

3.1 ros2 service list -t

显示所有服务的具体类型

4、ros2 服务发现

如果想要发现具体服务,则使用下面

ros2 service find <type_name>

查找所有空类型的服务

ros2 service find std_srvs/srv/Empty
/clear
/reset

5、ros2 接口显示(ros2 interface show)

ros2 interface show <type_name>

查看一下/clear服务的类型,Empty:

ros2 interface show std_srvs/srv/Empty

返回

---

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

要查看/spown服务的请求和响应参数,请运行以下命令:
float32 x
float32 y
float32 theta
string name # Optional.  A unique name will be created and returned if this is empty
---
string name

第---行上方的信息告诉我们调用/spaw所需的参数。x、 y和θ决定了生成的海龟的2D姿态,而这个name显然是可选的。

在这种情况下,您不需要知道---行下面的信息,但它可以帮助您了解从call中获得的响应的数据类型。

6、ros2 service call

如何找到该类型参数的结构,可以使用以下方法调用服务:

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: ''}"

总结

节点可以使用ROS 2中的服务进行通信。与主题(一种单向通信模式,其中节点发布可由一个或多个订阅者使用的信息)不同,服务是一种请求/响应模式,其中客户端向提供服务的节点发出请求,服务处理请求并生成响应。

您通常不希望使用服务进行连续呼叫;话题甚至行动会更适合。

 

标签:Empty,服务,Beginner,service,clear,理解,ROS2,turtlesim,ros2
From: https://www.cnblogs.com/gary-guo/p/17449736.html

相关文章

  • ROS2-Beginner:3-理解节点
    目标:学习ROS2中节点的功能,以及与他们交互的工具背景1、ROS2graphROS图是ROS2元素同时一起处理数据的网络。它包含了所有可执行文件以及它们之间的连接,如果您要将它们全部映射出来并可视化的话。2、在ROS2中的节点在ROS中的每一个节点都应该负责单一的模块化目的,例如控制车轮......
  • AtCoder Beginner Contest 247 Ex Rearranging Problem
    洛谷传送门AtCoder传送门考虑我们如何判定一个排列是否能成为最终答案。连边\(i\top_i\),设环数为\(k\),那么最少交换次数为\(n-k\)。那么充要条件是,每个环所有点的\(c_i\)相同,并且\(n-k\leK\)且\(2\mid(K-(n-k))\)。\(K\)和\(n-k\)奇偶性相同是因为,......
  • Base64学习理解
    Base64是用64个可打印的字符来描述数据的编码方式为什么要整这个Base64呢,那是因为有的时候我们需要以可打印的字符串的形式传递数据,比如url传递之类的假设有个4字节的数据[97,32,245,0],我们要把它转成可打印的字符串的形式,首先不能直接把它转成字符串,因为ASCII中有不可打印......
  • 软件测试的理解
      IEEE定义:使用人工或自动的手段来运行或测量软件系统的过程,以检验软件系统是否满足规定的要求,并找出与预期结果之间的差异。    测试对象:软件需求、软件概要设计、软件详细设计、软件源代码、可运行程序、软件运行环境。覆盖到软件研发过程中的方方面面    五大要素......
  • AtCoder Beginner Contest 213 H Stroll
    洛谷传送门AtCoder传送门考虑一个朴素dp,\(f_{t,u}\)表示\(t\)时刻走到\(u\)点的方案数。有转移:\[f_{t,u}=\sum\limits_{(u,v)=E_i}\sum\limits_{k=0}^{t-1}f_{k,v}\timesp_{i,t-k}\]直接做时间复杂度\(O(mT^2)\),无法接受。发现转移是加法卷积形式......
  • Revit二次开发系列教程01-如何在Revit中创建模型过程的理解
    目录01案例02步骤讲解03关键类理解04总结05源码地址01案例创建一个结构墙usingAutodesk.Revit.Attributes;usingAutodesk.Revit.DB;usingAutodesk.Revit.UI;usingSystem.Linq;namespaceExampleBasic{[Transaction(TransactionMode.Manual)][Regener......
  • 理解RESTful 架构
    REST是所有Web应用都应该遵守的架构设计指导原则。 RepresentationalStateTransfer,翻译是”表现层状态转化”。 面向资源是REST最明显的特征,对于同一个资源的一组不同的操作。资源是服务器上一个可命名的抽象概念,资源是以名词为核心来组织的,首先关注的是名词。REST要求,必须通......
  • AtCoder Beginner Contest 288(D,E,F)
    AtCoderBeginnerContest288(D,E,F)D(思维)D有一个数组,然后有\(q\)次询问,每一次输入一对\(l,r\),我们要判断这一段里面的数是不是好数组好数组,在进行下面任意次操作后可以把这一段数字都变成\(0\),那么这就是个好数组操作是选择一个\(i\)和一个\(c\),但是\(i+k-1\)要小于\(......
  • 深度理解链式前向星
    我们首先来看一下什么是前向星.前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序,并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了.用len[i]来记录所有以i为起点的边在数组中的......
  • C/C++杂记:深入理解数据成员指针、函数成员指针
    1.数据成员指针对于普通指针变量来说,其值是它所指向的地址,0表示空指针。而对于数据成员指针变量来说,其值是数据成员所在地址相对于对象起始地址的偏移值,空指针用-1表示。例:代码示例:structX{inta;intb;};#defineVALUE_OF_PTR(p)(*(long*)&p)int......