ROS2学习——(ROS2 services)

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

1.打开小海龟

2.查看service列表,运行:ros2 service list,可以看到如下清单:

可以看到/turtlesim和/teleop_turtle各有6个参名字相同且都含有parameter的service

几乎ros2的每个节点都有这些service。

现在看turtlesim特有的服务:/clear,/kill,/spawn,/turtle/set_pen,/turtle/teleport_absolute和/turtle/teleport_relative,这些信息也可以在rqt中看到。

service也和topic相似的数据结构,但是service类型拥有两部分,一组信息是请求,一组信息是响应。要获取service类型,可以使用命令:ros2 service type <service_name>,如

ros2 service type /clear

终端中返回:std_srvs/srv/Empty

其中Empty类型意思是service在发出请求时不发送数据,在收到响应时不接受数据

3.ros2 service list -t

与ros2 topic list -t类似,返回带类型的service列表,如图:

 4. ros2 service find

如果要查找特定类型的所有服务,可以使用命令:ros2 service find <type_name>,如

ros2 service fine std_srvs/srv/Empty

可以得到:/clear和/reset

5.ros2 interface show

可以通过命令行call service,但是首先应该知道输入参数的数据结构,使用命令:ros2 interface show <type_name>.srv

如 ros2 interface show std_srvs/srv/Empty.srv(不加.srv也可以出来相同的结果)

可以得到返回值:---,“---”时分割请求数据结构和响应数据结构的符号,也就是请求和响应的数据结构都是空白的,

输入命令: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/thrta,值小乌龟的位置和姿态值,name是可选项

6.ros2 service call

上面知道了service类型,和类型的数据结构,然后可以通过命令呼叫服务:

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

其中<artuments>部分是可选项,例如Empty类型的service不需要任何参数,即:

ros2 service call /clear std_srvs/srv/Empty

这个命令会清空海龟窗口。

接下来尝试/spawn命令并输入参数:

ros2 service call /spawn turtlesim/srv/Spawn "{x: 2,y: 2,theta: 0.2,name: ''}"

会在海龟窗口召唤一个新的海龟,如图所示:

总结:

节点间(node)可以使用ROS2中的服务(service)进行通讯,与主题(topic)不同,主题是一种单向的通讯模式,节点通过主题发布发布信息(可以由一个或者多个订阅者使用),服务是客户端向节点发出请求的<请求/响应>模式提供服务。

对于连续的发出指令,服务(service)是不适合的,主题(topic)和行动(action)更适合。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值