机器人操作系统ROS Indigo 入门学习(8)——理解ROS service 和parameter

来源:互联网 发布:阿里云ecs手动搭建 编辑:程序博客网 时间:2024/05/20 06:30

 1.理解ROS service和parameter

这个教程将介绍ROS service和parameter和命令行工具rosservice 和rosparameter

 

1.1ROS Services

ROS Services是nodes之间进行通信的另一种方式.service允许nodes之间发送请求和接受应答.

 

1.2使用rosservice 

rosservice可以轻易的附着在ROS的客户或者服务框上,rosservice 可以有许多命令可以在topic上使用,如下所示:

用法:

rosservice list         print information about active services

rosservice call         call the service with the provided args

rosservice type         print service type

rosservice find         find services by service type

rosservice uri          print service ROSRPC uri

1.2.1使用rosservice list

$ rosservice list

打印:

/clear

/kill

/reset

/rosout/get_loggers

/rosout/set_logger_level

/spawn

/teleop_turtle/get_loggers

/teleop_turtle/set_logger_level

/turtle1/set_pen

/turtle1/teleport_absolute

/turtle1/teleport_relative

/turtlesim/get_loggers

/turtlesim/set_logger_level

这个命令会显示出node可以提供9服务,其中/rosout/get_loggers 和 /rosout/set_logger_level是和rosoutnode有关的.

让我们用rosservice type仔细看看这些服务.

 

 

1.2.2rossercie type

用法:

rosservice type [service]

clear服务的服务类型

$ rosservice type clear

打印:

std_srvs/Empty

这个服务是空的,这就意味着当调用这个服务时不带任何参数(比如,当发送请求时和接受回应时有任何的数据).让我们用rosservice call调用这个服务把.

 

1.2.3rosservice call

用法:

rosservice call [service] [args]

这里我们不用任何参数调用这个服务,因为这个服务是空的:

$ rosservice call /clear

这个命令确实清除了小乌龟的行走痕迹.

 

 

再看看有参数的service,看看service spawn的信息:

$ rosservice type spawn| rossrv show

输出:

 float32 x

 float32 y

float32 theta

string name

---

string name

 

 

这个服务将产生另一个小乌龟,它的名字是可选的,我们自己不给它起名字,让turtlesim这个package给它取名字:

$ rosservice call spawn 2 2 0.2 ""

参数的分别是x.y的坐标和角度还有名字

 

这个服务调用返回新的小乌龟的名字:

name: turtle2

现在应该看起来像这样

 

 

 

 

 

 

 

1.3使用rosparam

rosparam允许你储存和操作在ROS parameter server上的数据,parameter server可以储存整形,浮点型,布尔型,字典型和链表型的数据.rosparam 使用YAML 审定语言以符合语法.简单的例子:YAML看起来十分自然,1是整形,1.0是浮点型,one是字符串,true是布尔型,[1,2,3]是一列的整形,{a:b,c:d}是字典型,rosparam有许多命令可以运行用在parameters上,如下所示:

 

rosparam set            set parameter

rosparam get            get parameter

rosparam load           load parameters from file

rosparam dump           dump parameters to file

rosparam delete         delete parameter

rosparam list           list parameter names

让我们看看现在参数服务器上是什么参数

 

 

1.3.1rosparam list

$ rosparam list

 

我们可以看到turtlesim node 的背景颜色有三个参数

/background_b

/background_g

/background_r

/roslaunch/uris/aqy:51932

/run_id

我们用rosparam set改变其中一个参数的值:

 

1.3.2rosparam setrosparam get

用法:

rosparam set [param_name]

rosparam get [param_name]

改变背景颜色中的红色比例:

$ rosparam set background_r 150

然后调用clear service使这个参数改变生效:

$ rosservice call clear

现在turtlesim看起来像这个样子:

 

 

让我们看看参数服务器上的其他参数的值:

$ rosparam get background_g 

86

也可以用rosparam get/ 显示整个参数服务器的内容:

$ rosparam get /

 

background_b: 255

background_g: 86

background_r: 150

roslaunch:

  uris: {'aqy:51932': 'http://aqy:51932/'}

run_id: e07ea71e-98df-11de-8875-001b21201aa8

如果想保存这些数据到文件,可以在其他时间重载,对于rosparam来说这很容易:

 

1.3.3rosparam dumprosparam load

用法:

rosparam dump [file_name] [namespace]

rosparam load [file_name] [namespace]

我们把所有参数都写入params.yaml文件:

$ rosparam dump params.yaml

你可以载入这些yaml文件到新的命名空间,比如copy:

$ rosparam load params.yaml copy

$ rosparam get copy/background_b

输出

255

0 0