ROS学习笔记【4】:ROS通信架构 service action parameter service

publish和subcribe是单向传输,但这种传输方式有时候并不能满足我们的要求

所以我们就有了service,同步通信方式,node间通过request-reply方式通信

过程描述:node A需要某个数据,发出了一个request调用service,然后在原地等候(阻塞),直到服务器端返回结果,然后nodeA继续执行。

和之前的topic的对比:

 service通信的数据格式定义在*.srv文件中,可以类比topic中的*.msg(srv文件放在/Pkg/srv文件夹中)

srv文件格式:

在srv文件中有三个短横,上面是请求数据需要遵守的格式,下面是数据传回的格式

这个humanpose是一个msg自定义的格式(看第二个格子),也就是说srv可以嵌套msg,但是srv不能嵌套srv

而这个自定义的humanpose.msg中又嵌套了另外一个自定义的msg  JointPos。也就是说msg中可以嵌套msg

在自定义完msg或者srv后一定要去修改CMakeList.txt和package.xml,添加编译和运行时依赖

(具体写法还是要百度一下)

常用指令:

Parameter Server:参数服务器(静态)

维护着一个字典,里面包含着参数和配置。方便一些数据的读写,可以用命令行,launch文件,API中进行读写

常用指令:

在launch文件中的配置方法:

(yaml文件可以视为一个字典文件)

之前提到过service通讯模型在请求后提出请求的节点会阻塞,但是有时候请求响应的时间比较长(大量计算,小车动作),这个时候service的client可能要等很久才可以知道结果。所以我们希望有一个实时的反馈。

 

Action:(升级版service)带有状态反馈的通信方式,通常用在长时间、可抢占的任务

可以中途取消,可以在运行中途知道运行了多少进度(或者其他状态信息)

action通讯的数据格式定义在*.action文件中,相当于.srv对应service,.msg对应于topic

action文件的书写:

一个 action文件分为三段,用“---”隔开

当然result可以空定义,只用多次回传的feedback信息

https://www.icourse163.org/learn/ISCAS-1002580008#/learn/content?type=detail&id=1004034129&sm=1

网课地址↑

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值