7.理解ROS服务与参数
安装与设置你的ROS环境(rawmeat:http://wiki.ros.org/ROS/Tutorials/UnderstandingServicesParams)
注意:本教程翻译的日期是2018.9.12,wiki.ros.org可能会有更新,如语意有差异请以官网英文原版为准,我是不负泽任的。
描述:这个教程介绍ROS服务,参数和使用rosservice与rosparam命令行工具
教程等级:初学者
下一个教程:使用rqt_console与roslaunch
内容 |
---|
1.ROS 服务 |
2.使用rosservice |
1.rosservice list |
2.rsoservice type |
3.rsoservice call |
3.使用 rosparam |
1.rosparam list |
2.rsoparam set与 rosparam get |
3.rosparam dump与 rosparam load |
假设你的turtlesim_node仍然从上一个教程中正在运行,让我们看看turtlesim提供什么服务:
1.ROS 服务
Service是另外一种节点之间可以相互沟通的方式。service允许节点发送request与接收response。
2. 使用rosservice
rosservice可以很容易地将service附加到ROS的用户/服务框架上。rosservice有许多可以用在话题上的指令 ,如下所示:
用法:
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
2.1 rosservice list
$ rosservice list
List命令向我们展示了turtlesim节点提供九个服务:reset, clear, spawn, kill, turtle1/set_pen,/turtle1/teleport_absolute,/turtle1/teleport_relative, turtlesim/get_loggers, and turtlesim/set_logger_level.
/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
让我们更加接近地看看使用rosservice type的clear服务:
2.2 rosservice type
用法:
rosservice type [service]
让我们找找clear服务是什么类型:
$ rosservice type /clear
std_srvs/Empty
这个服务是空的,意味着当服务被唤醒的时候,将不会有任何arguments(这就是说它请求的时候不发送数据,收到回复的时候不接收数据)。我们称这种服务使用rosservice call:
2.3 rosservice call
用法:
rosservice call [service] [args]
这儿我们将不用arguments召唤,因为服务是空类型的:
$ rosservice call /clear
结果如我们所预期的,turtlesim_node的背景被清除了。
让我们看看服务有arguments的情况,通过看看服务结果的信息:
$ rosservice type /spawn | rossrv show
float32 x
float32 y
float32 theta
string name
—
string name
这个服务让我们在给定的位置与方向产生了一只新的turtle。名字域是可选的,所以我们不给我们的新的turtle名字,让turtlesim为我们创造一个。
$ rosservice call /spawn 2 2 0.2 “”
这个服务召唤返回了新创造的turtle的名字
name:turtle2
我们的turtlesim应该如下所示:
3.使用 rosparam
Rosparam允许你在ROS Parameter Server储存和操纵数据。parameter server可以储存整形,浮点,逻辑,词典和列表。rosparam使用YAML标记语言。在一些简单的例子中,YAML看起来非常自然:1是一个整形,1.0是一个浮点型,one是一个字符串,true是逻辑,【1,2,3】是整形的列表,{a:b,c:d}是词典。rosparam有许多命令,可以使用在parameter使用,如下所示:
用法:
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
让我们看看param server上现在有什么参数.
3.1roaparam列表
$ rosparam list
这儿我们可以看见turtlesim节点在param server上有三个参数,对于背景颜色:
/background_b
/background_g
/background_r
/rosdistro
/roslaunch/uris/host_57aea0986fef__34309
/rosversion
/run_id
让我们使用rosparam set改变其中一个参数的值:
3.2 rosparam set和rosparam get
用法:
rosparam set [param_name]
rosparam get [param_name]
这儿我们会改变背景颜色到红色:
$ rosparam set /background_r 150
这个改变了参数的数值,现在我们必须召唤clear服务来使参数改变起效果:
$ rosservice call /clear
现在我们的turtlessim看起来是这样的:
现在让我们看看param server中其他参数的值,让我们得到绿色背景:
$ rosparam get /background_g
86
我们也可以使用rosparam get / 来向我们展示完整的parameter server的内容。
$ 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就很简单:
3.3 rosparam dump和rosparam load
用法:
rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]
这儿我们写参数进入params.yaml
$ rosparam dump params.yaml
你甚至可以加载这些yami文件进入一个新的命名空间,比如说copy:
$ rosparam load params.yaml copy
$ rosparam get /copy/background_b
255
现在你可以理解ROS服务和param是如何工作的了,让我们尝试try using rqt_console and roslaunch