ROS学习之路(三)——通信构架(下)

1 service

Service是ROS的同步通信方式,Node间可以通过request-reply方式通信。
在这里插入图片描述
将NodeB写成service以后,不需要的时候NodeB不运行,当有节点请求时才会执行。注意,同步的意思是,NodeA发送请求后,该节点会被阻塞,直到NodeB返回请求才会执行。和topic不一样。两者区别:
在这里插入图片描述

1.1 src

service通信的数据格式定义在*.srv文件中,类比上一节中的msg,两者作用差不多。

1.2 src的写法

srv文件必须放在srv目录下!

bool start_detect
---
my_pkg/HumanPose[] pose_data

中间必须用“—”隔开,上面是请求服务的格式,下面是返回应答所遵守的格式。上问下答,一问一答。
HumanPose[]为自定义数据是定义在msg下的文件,注意HumanPose[]一定是msg格式的,不可能是srv,msg作为自定义数据类型。ros

1.3 一些命令

## 列出当前所有活跃的service
$ rosservic list
## 显示某个service的属性
$ rosservice info service_name
## 调用某个service
$ rosservice call service_name args #arg为希望传入的参数

## 列出所有的srv
$ rossrv list
## 显示某个srv内容
$ rossrv info srv_name

2 Parameter Serve

参数服务器,存储各种参数的字典,可用命令行,launch文件和node(API)读写。
用命令行设置参数的方法:

## 列出当前所有参数
$ rosparam list
## 显示某个参数的值
$ rosparam get param_key 
## 设置某个参数
$ rosparam set param_key param_value
## 保存参数到文件
$ rosparam dump file_name
## 从文件中读取参数
$ rosparam load file_name

以上的文件为YAML格式如下所示

name:'Zhangsan'
age:20
gender:'M'
score{Chinese:80,Math:90}
score_history:[85,82,88,90]

3 Action

类似service,带有进度反馈的通信方式,通常在长时间、可抢占的任务使用。
Action对应的文件为.action。

# Define the goal
uint32 dishwasher_id  # Specify which dishwasher we want to use
---
# Define the result
uint32 total_dishes_cleaned
---
# Define a feedback message
float32 percent_complete

goal相当于request,result一次,返回运行完的参数,feedback一直都有。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值