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 set和rosparam 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 dump和rosparam 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