[跟我学ROS]7.熟悉ROS系统中的服务和参数

来源:互联网 发布:冠军对决 知乎 编辑:程序博客网 时间:2024/06/06 10:10


文章转载自:http://www.robotos.net/thread-16-1-1.html


描述:这篇教程借助于rosservice和rosparam命令工具介绍ROS系统中的服务及参数。


假设你上一个教程中练习的turtlesim_node还在运行,我们看一下turtlesim节点都提供有哪些服务。

1.        ROS服务

服务是节点之间通信的另一种方式,通过服务节点可以发送请求并接收反馈;

2.        rosservice的用法

rosservice可以很容易的依附到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节点提供9个服务:reset, clear, spawn, kill,turtle1/set_pen, /turtle1/teleport_absolute, /turtle1/teleport_relative, turtlesim/get_loggers, 和turtlesim/set_logger_level.还有两个与rosout节点相关的服务:/rosout/get_loggers and /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.2 rosservice type

用法:
rosservice type [service]

我们查明clear服务是什么类型的:
$ rosservice type clear



•        std_srvs/Empty

这个服务是空的,意味着调用这个服务时不用任何参数(亦即,发送请求或接收反馈时不用借助于任何参数),我们用rosservice call来调用这个服务:

2.3 rosservice call

用法:
rosservice call [service] [args]

这里我们调用时没带任何参数,因为这个服务为空类型的:
$ rosservice call clear




正如我们所料,它清空了turtlesim_node节点的背景。
•         
7.1.png
我们查看一下带参数的服务spawn:
$ rosservice type spawn| rossrv show



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

这个服务让我们在指定的位置生成一个新的海龟。name区域是可选的(可以不设置),我们不用指定名字产生一个海龟;
$ rosservice call spawn 2 2 0.2 ""




这个调用会返回新产生的海龟的名字:
•        name: turtle2

执行结果会如下图所示:
•         
7.2.png
3.        rosparam的用法

rosparam 允许我们操作并保存ROS系统中参数服务中的数据。参数服务可以存储integer,float,boolean,dictionaries及lists。rosparam采用YAML标记语言,简单的讲,YAML看起来非常自然:1 is an integer, 1.0 is a float, one is a string, true is a boolean, [1, 2, 3] is a list of integers, and {a: b, c: d} is a dictionary. 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




我们看到turtlesim节点有三个有关背景色的参数保存在参数服务中:
•        /background_b
•        /background_g
•        /background_r
•        /roslaunch/uris/aqy:51932
•        /run_id

我们用rosparam set改变其中一个参数:

3.2 rosparam set and rosparam get

用法:
rosparam set [param_name]
rosparam get [param_name]

这里我们改变背景色的红色部分:
$ rosparam set background_r 150




上述命令改变了参数的值,我们必须调用clear服务才能使改变的参数生效:
$ rosservice call clear




执行结果如下所示:
•         
7.3.png
我们查看参数服务中的其它参数值,看一下背景色中的绿色部分数值:
$ rosparam get background_g



•        86

我们也可以通过rosparam get/ 命令获取参数服务中所有参数的数值:
$ 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 and rosparam load

用法:
rosparam dump [file_name]
rosparam load [file_name] [namespace]

我们保存所有参数到一个名字为params.yaml的文件中:
$ rosparam dump params.yaml




你可以加载这些yaml文件到新的命名空间,比如copy:
$ rosparam load params.yaml copy$ rosparam get copy/background_b



•        255

英文文档:http://www.ros.org/wiki/ROS/Tutorials/UnderstandingServicesParams

注:欢迎你转载本篇文章,时飞提醒你转载时请注明出处!

原创粉丝点击