ROS学习-理解ROS Services 和 Parameters

假设上一篇博客:ROS学习-理解ROS话题中所启动的小乌龟turtlesim节点仍然还在运行。

Services服务是节点之间进行相互联系的另外一种方式,允许节点之间进行发送请求和接收响应。

使用 rosservice

rosservice可以轻松的链接到ROS的client/service框架,其有很多关于service的命令,如下所示:
rosservice list print information about active services

rosservice list         print information about active services(输出活动services的信息)
rosservice call         call the service with the provided args(使用提供的参数来调用services)
rosservice type         print service type(输出services的类型)
rosservice find         find services by service type(通过services的类型寻找services)
rosservice uri          print service ROSRPC uri(输出services的ROSRPC uri)

rosservice list命令

使用rosservice list命令查看/turtlesim节点的13个service,/teleop_turtle节点的2个service以及/rosout节点的2个service,如下所示。

/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命令

接着让我们通过rosservice type命令来更加细致的看一下/clear这个service。其用法为:

rosservice type [service]

针对/clear这个service,命令变为下述形式:

$ rosservice type /clear

输出为:

std_srvs/Empty

这说明/clear这个service是空的,也即当使用rosservice call命令来调用这个service的时候不需要传送参数(即这个service在发送请求和接收响应过程中没有数据)。接下来我们使用rosservice call命令来调用/clear这个service。

rosservice call命令

rosservice call命令可以使用提供的参数来调用指定的service。用法如下:

rosservice call [service] [args]

针对/clear这个service,我们不用输入参数,所以命令为:

$ rosservice call /clear

执行上述命令之后,我们可以发现,原先小乌龟界面背景中的行驶轨迹被清除了。

在这里插入图片描述
在这里插入图片描述
/clear这个service是没有参数的,那么对应有参数的情况应怎么使用呢?
我们来针对/spawn这个service来进行了解一下,首先使用命令:

$ rosservice type /spawn

输出结果:

turtlesim/Spawn

代表/spawn这个service的参数类型为:turtlesim/Spawn,接着我们再使用下述命令查看其具体的参数说明:

rossrv show turtlesim/Spawn

输出为:

float32 x
float32 y
float32 theta
string name
---
string name

也就是/spawn这个service允许我们赋值一个新的小乌龟,需要指定这个新的小乌龟的位置和朝向,其名字字段是可选的。现在,让我们使用rosservice call命令,调用/spawn这个service,指定小乌龟的位置和朝向,空白名称,自动生成一个新的小乌龟,命令如下:

$ rosservice call /spawn 2 2 0.2 ""

生成新小乌龟之后界面如下所示:
在这里插入图片描述

使用 rosparam

rosparam让我们能够在ROS Parameter Server上存储和管理数据。ROS Parameter Server能够存储整型int、浮点数float、布尔bool、字典dictionaries以及列表lists等数据类型。rosparam使用YAML语法格式。在简单的情况下,YAML看起来非常自然:1是整数,1.0是浮点,1是字符串,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(列出参数的名称)

rosparam list命令

让我们看一下现在Parameter Server中存在什么参数:

$ rosparam list

输出:

/rosdistro
/roslaunch/uris/host_xiaochen__44599
/rosversion
/run_id
/turtlesim/background_b
/turtlesim/background_g
/turtlesim/background_r

接下来我们再使用“rosparam set ”和“rosparam get”命令来对这些参数的值进行操作。

rosparam set 和 rosparam get命令

两个命令的用法如下:

rosparam set [param_name]
rosparam get [param_name]

通过下述命令来改变red通道的值,从而改变背景的颜色:

$ rosparam set /turtlesim/background_r 150

上述命令已经改变了red通道的值,但是在界面中还没有显示出来变化。接着,使用rosservice call命令来对其状态进行更新,更新后的效果如下所示:
在这里插入图片描述
接着我们使用rosparam get命令获取指定参数的值,例如:/turtlesim/background_g ,命令如下:

$ rosparam get /turtlesim/background_g 

返回值为:

86

同时,我们也可以通过使用 / 来获取Parameter Server中所有的参数值:

$ rosparam get /

返回值为:

rosdistro: 'melodic

  '
roslaunch:
  uris: {
    
    host_xiaochen__44599: 'http://xiaochen:44599/'}
rosversion: '1.14.11

  '
run_id: bdf53208-45bb-11ec-bc90-7085c2dc7a69
turtlesim: {
    
    background_b: 255, background_g: 86, background_r: 150}

当然,我们也可以存储上述参数,这可以通过使用rosparam dump来存储参数,并使用rosparam load重新加载这些参数数据。

rosparam dump 和 rosparam load命令

两个命令的使用方法如下所示:

rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]

假如我们想要把所有的数据写到params.yaml数据文件中,则可以通过下述命令实现:

$ rosparam dump params.yaml

存储的文件如下所示:
在这里插入图片描述
同时,我们也可以加载这个参数文件,比如说,我们想要加载这个params.yaml参数文件到copy_turtle命名空间,如下所示:

$ rosparam load params.yaml copy_turtle

接着通过下述命令查看params.yaml参数文件是否被正确加载。

$ rosparam get /copy_turtle/turtlesim/background_b

返回值为:

255

上述内容为我们介绍了ROS Services 和 Parameters是如何工作的,下面我们再介绍一下 rqt_console 和 roslaunch命令。

猜你喜欢

转载自blog.csdn.net/wxc_1998/article/details/121330087