Services(服务)
这部分我们聊聊ROS服务和参数,当然也要使用rosservice和rosparam。我们依然接着笔记三,来看看/turtlesim提供什么服务。我们在前面说过,服务是另外一种节点直接通信的方式,服务允许节点发送request(需求)和接收response(回应)。
rosservice通过服务能够轻松的连接ROS客户端或服务的框架,rosservice有几条命令可以用于主题:
rosservice list 打印活跃服务的信息
rosservice call 根据提供的参数调用服务
rosservice type 打印服务类型
rosservice find 通过服务类型寻找服务
rosservice uri print service ROSRPC uri
OK,我们先来用第一个最熟悉的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
让我们用type命令看的更清楚一些:
用法:rosservice type [service]
$ rosservice type /clear
返回如下:
std_srvs/Empty
这里我们发现这个clear服务参数是空的,这就说明他在被调用的时候是不需要输入参数的。也即是他在发送需求的时候不会发送数据,接收回应的时候页不会接收数据。接下来让我们来调用他看看:
用法:rosservice call [service] [args]
$ rosservice call /clear
图片里小乌龟原来移动的轨迹已经被全部清空了,也就是说他清理了/turtlesim的后台。下面我们讲一个带参数的服务:
$ rosservice type /spawn| rossrv show
返回如下:
float32 x
float32 y
float32 theta
string name
---
string name
/spawn这个服务是生成一个新的小乌龟,看参数我们知道,我们可以给定一个坐标位置还有旋转角度,甚至还可以给他命名,当然已经有名字文件这个选项了,所以我们也可以不给他命名,那么让我们来试试:
$ rosservice call /spawn 2 2 0.2 ""
Paramete(参数)
rosparam允许我们储存和操作ROS参数服务(Parameter Server)的数据,这个参数服务能够储存整型,浮点型,布尔型,词典和清单。rosparam用YAML语法来组织语言,例如1是整型,1.0是浮点型,一是字符串,true是布尔型,[1,2,3]是清单,{a:b,c:d}是词典。rosparam有许多命令用在参数方面,我们来一起看下:
rosparam set 设置参数
rosparam get 获取参数
rosparam load 从文件载入参数
rosparam dump 将参数写进文件
rosparam delete 删除参数
rosparam list 列出参数名
我们先用列出/turtlesim节点的参数,可以看到背景颜色的参数RGB:
$ rosparam list
返回如下:
/background_b
/background_g
/background_r
/roslaunch/uris/aqy:51932
/run_id
接下来我们试试改一下其中的参数,看看背景颜色是否改变:
用法:rosparam set [param_name]
rosparam get [param_name]
$ rosparam set /background_r 150
$ rosservice call /clear
我们还可以获得所有的参数:
$ 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 dump [file_name] [namespace]
rosparam load [file_name] [namespace]
$ rosparam dump params.yaml
我们看看写进没有,顺便我们将这个文件放在一个新的命名空间里:
$ rosparam load params.yaml copy
$ rosparam get /copy/background_b
返回如下:
255