前言: 本教程介绍 ROS 中的服务和参数,同时也介绍了 rosservice 和 rosparam 命令行工具。
在开始本教程前首先让 turtlesim_node 运行起来:
##1.ROS Services
服务是节点之间互相通信的另外一种方式。服务允许节点发送请求或者接受响应。
##2.Using rosservice
rosservice 可以很容易的讲连接 ROS 的客户或者服务框架和服务。rosservice 有很多命令,同时也可以在主题上使用,如下用法:
rosservice list 打印正在提供服务的信息
rosservice call 通过提供的参数调用服务
rosservice type 打印服务的类型
rosservice find 通过服务类型查找服务
rosservice uri 打印 ROSRPC 链接
###2.1rosservice list
命令窗口输入:
$ rosservice list
这个命令会显示 turtlesim_node 节点提供的九个服务:reset,clear,spawn,kill,turtle1/set_pen,/turtle1/teleport_absolute,/turtle/teleport_relative,turtlesim/get_loggrs 和 tuetlesim/set_logger_level.单独的 rosout 节点也提供了 2 个服务:/rosout/get_loggers 和/rosout/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.2rosservice type
用法:
rosservice type service
clear 服务是什么类型:
$ rosservice type clear
std_srvs/Empty
这个服务是空的类型,这意味着 这个服务调用的时候是不需要参数的(比如发送请求或者得到响应的时候是没有数据的)。让我们通过 rosservice call 来调用这个服务:
###2.3rosservice call
用法:
rosservice call [service] [args]
这里我们调用的时候没有参数,因为这个服务本身参数就是空的:
$ rosservice call /clear
这个命令完成了我们的期望,他刷新了 turtlesim_node 的背景。
让我们看看服务有参数的情况,通过 spawn 来查看服务生成的信息:
$ rosservice type spawn| rossrv show
float32 x
float32 y
float32 theta
string name
string name
这个服务让我们能够在给定的位置和方向生成一只新的小乌龟。名字是可选的,所以我们可以给这个新的小乌龟一个新的名字,并让 turtlesim 创建这个新乌龟。
$ rosservice call spawn 2 2 0.2 ""
调用这个服务将返回新创建的指定名字的小乌龟:
name: turtle2
现在 turtlesim 窗口看起来应该是这样子:
##3.使用 rosparam
rosparam 允许你保存和操作在 ROS Parammeter Server 上的数据。Parammeter Server 能够保存整型、浮点型、布尔、字典和列表。rosparam 使用 YAML 标记语言的语法。简单的情况下,YAML 看起来非常的自然:1 是整型,1.0 是浮点型,one 是字符串,true 是布尔值,[1,2,3]是一个整型列表,{a:b,c:d}是字典。rosparam 有许多命令可以用在参数上,如下所示:
rosparam set 设置参数
rosparam get 得到参数
rosparam load 从文件中加载参数
rosparam dump 下载参数到文件上
rosparam delete 删除参数
rosparam list 参数列表
让我们看看 param 服务器上现在有什么参数:
###3.1rosparam list
$ rosparam list
这里我们看到 turtlesim 节点的背景颜色有 3 个参数在 param 服务器上。
/background_b
/background_g
/background_r
/roslaunch/uris/aqy:51932
/run_id
让我们通过 rosparam set 来设置其中的一个参数:
###3.2rosparam set and rosparam get
用法:
rosparam set [param_name]
rosparam get [param_name]
这个我们可以改变背景颜色的 red 值:
$ rosparam set background_r 150
这条命令改变了参数的值,现在我们调用 clear 服务来让改变的参数起效:
$ rosservice call clear
现在我们的 turtlesim 窗口看起来的样子如下:
~
现在让我们来看看 param 服务器上的其他参数的值。让我们来得到背景 green 的值:
$ 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.3rosparam dump and rosparam load
用法:
rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]
这里我们把所有的参数写入文件 params.yaml
$ rosparam dump params.yaml
你甚至可以从新的命名空间加载这些 yaml 文件,例如:
$ rosparam load params.yaml copy
$ rosparam get copy/background_b
255
现在我们理解了 ROS service 和参数是如何工作的,下面继续学习 rat_console 和 roslaunch.
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于