在开始这部分前,要保证turtlesim_node正在运行。
1. ROS Services
除了之前所说的topic之外,Services是节点们之间通讯的另一种途径。services即服务,允许节点发送请求request并接受相应reponse。
2. rosservice
rosservice可以轻易地通过服务附加到ROS的client/service即客户/服务框架之上。rosservice有很多可以用于services的命令,展示如下:
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
列表中的命令告诉我们turtlesim节点提供了9个服务services:
reset, clear, spawn, kill, turtle1/set_pen, /turtle1/teleport_absolute, /turtle1/teleport_relative, turtlesim/get_loggers, turtlesim/set_logger_level.
同时,也有两个与单独的 rosout节点相关的services:
/rosout/get_loggers , /rosout/set_logger_level.
2.2 rosservice type
使用方法:
rosservice type [service]
让我们看一下clear服务是什么类型:
该服务为空的,这意味着当服务进行调用时,它不接受任何参数(即,当做请求时它不发送任何数据,在接受回应时也不接受任何数据)。
让我们用rosservice call来调用它
2.3 rosservice call
使用方法:
rosservice call [service] [args]
此处我们将无参数调用因为该服务的类型是空的:
$ rosservice call /clear
上图为命令使用前,上图为命令时用后
如上图所示,这个命令把turtlesim_node节点的背景清除了。
下面,让我们通过查看spawn服务的信息来看一下有参数的服务的情形。
$ rosservice type /spawn | rossrv show
如上图所示,$ rosservice type /spawn | rossrv show就是将两个命令相结合,并且第一个命令得到的结论,作为第二个命令的使用参数,通过上图可很清楚的看出来。
回归到spawn服务上来。该服务允许我们在指定的位置和方向上复制出一只乌龟,名字的字段是可选的,所以,我们不要为我们的新乌龟起名字,让turtlesim为我们生成一个。
3. rosparam
rosparam允许你在ROS参数服务器上存储和操作数据。参数服务器可以存储整型、浮点型、布尔型、字典和列表。rosparam使用YAML组成语言作为语法。再简单情况下,YAML看起来很自然:1是整数,1.0是浮点数,one是字符串,true是布尔型,[1,2,3]是整数列表,{a:b,c:d}是字典。rosparam有很多可以用于参数的命令,如下所示:
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
让我们看一下参数服务器目前有哪些参数
3.1 rosparam list
$ rosparam list
让我们用rosparam set命令来改变其中一个参数的值:
3.2 rosparam get 和 rosparam set
使用方法
rosparam set [param_name]
rosparam get [param_name]
这里,我们修改背景颜色的红色通道:
$ rosparam set /background_r 150
此时已经修改了参数值,但是你会发现背景颜色并没有发生改变,现在,我们必须调用clear服务,才能让上面的参数值更改命令生效/:
$ rosservice call /clear
下面让我们看一下参数服务器中其他参数的值。让我们看一下绿色背景通道的值:
$ rosparam get /background_g
我们也可以用 rosparam get / 来向我们展示所有参数服务器中的内容:
$ rosparam get /
3.3 rosparam dump 和 roaparam 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