考试首页 | 考试用书 | 培训课程 | 模拟考场 | 考试论坛  
  当前位置:Linux认证 > 综合辅导 > 文章内容
  

Linux教程:机器人操作系统ROS学习教程

来源:robotos.net [ 2016年2月14日 ] 【

描述:这篇教程借助于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节点的背景。
•       

机器人操作系统ROS学习教程

我们查看一下带参数的服务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

执行结果会如下图所示:
•       

机器人操作系统ROS学习教程

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

执行结果如下所示:
•       

机器人操作系统ROS学习教程

我们查看参数服务中的其它参数值,看一下背景色中的绿色部分数值:

$ rosparam get background_g

•        86

我们也可以通过rosparam get/ 命令获取参数服务中所有参数的数值:

$ rosparam get /

•        background_b: 255
•        background_g: 86
•        background_r: 150
•        roslaunch:
•          uris: {'aqy:51932': '//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

本文纠错】【告诉好友】【打印此文】【返回顶部
将考试网添加到收藏夹 | 每次上网自动访问考试网 | 复制本页地址,传给QQ/MSN上的好友 | 申请链接 | 意见留言 TOP
关于本站  网站声明  广告服务  联系方式  站内导航  考试论坛
Copyright © 2007-2013 中华考试网(Examw.com) All Rights Reserved