ROSservice 通信方式

操作演示,对 service 通信的理解请看:点击打开链接

1. 使用 rosservice

1.1  rosservice list

假设小乌龟节点仍在运行  rosrun turtlesim turtlesim_node

运行:

rosservice list

结果:

list 命令显示turtlesim节点提供了9个服务:重置(reset), 清除(clear), 再生(spawn), 终止(kill), turtle1/set_pen, /turtle1/teleport_absolute, /turtle1/teleport_relative, turtlesim/get_loggers, and turtlesim/set_logger_level. 同时还有另外两个rosout节点提供的服务: /rosout/get_loggers and /rosout/set_logger_level.


1.2 rosservice type

命令格式:

rosservice call [service] [args]

运行:

rosservice type clear
结果:


服务的类型为空(empty),这表明在调用这个服务是不需要参数(比如,请求不需要发送数据,响应也没有数据)


1.3 rosservice call

rosservice call命令调用服务
rosservice call clear
这个命令会清除之前的轨迹。

通过查看再生(spawn)服务的信息,了解带参数的服务:

rosservice type spawn| rossrv show


这个服务使得我们可以在给定的位置和角度生成一只新的乌龟。名字参数是可选的,不设具体的名字,让turtlesim自动创建一个:

rosservice call spawn 2 2 0.2 ""


2. srv文件

1.写法


srv文件的格式如上, --- 是分割线,

上面相当于 “问”,下面相当于 “答”。

如上例,“问”的部分为 bool 类型的检测,“答”的部分为返回检测到的结果,类型是一个数组,这个数组又定义在 msg 文件中(注: srv 只能嵌套 msg 文件),其中的 JointPOS[] 又定义在另一 msg 文件中。

2.修改

很关键的一步:我们要确保srv文件被转换成C++,Python和其他语言的源代码。

现在认为,已经如上一篇:点击打开链接所介绍的 msg,在CMakeLists.txt文件中增加了对message_generation的依赖,message_generationmsgsrv都起作用。

同样,跟msg文件类似,你也需要在CMakeLists.txt文件中做一些修改。查看上边的说明,增加额外的依赖项。

删掉#,去除对下边语句的注释:


总结

msg 和 srv 写完之后需要修改如下部分:


原文地址:https://www.cnblogs.com/NikkiNikita/p/9450738.html