求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
要资料
 
追随技术信仰

随时听讲座
每天看新闻
 
 
ROS教程
1.初级教程
1.1 安装和配置ROS环境
1.2 ROS文件系统导览
1.3 创建ROS软件包
1.4 构建ROS软件包
1.5 理解ROS节点
1.6 理解ROS话题
1.7 理解ROS服务和参数
1.8 使用rqt_console和roslaunch
1.9 使用rosed在ROS中编辑文件
1.10 创建ROS消息和服务
1.11 编写简单的发布者和订阅者(C++)
1.12 编写简单的发布者和订阅者(Python)
1.13 检验简单的发布者和订阅者
1.14 编写简单的服务和客户端(C++)
1.15 编写简单的服务和客户端(Python)
1.16 检验简单的服务和客户端
1.17 录制和回放数据
1.18 从bag文件中读取消息
1.19 roswtf入门
1.20 探索ROS维基
1.21 接下来做什么?
2.中级教程
2.1手动创建ROS包
2.2管理系统依赖项
2.3Roslaunch在大型项目中的使用技巧
2.4ROS在多机器人上的使用
2.5自定义消息
2.6在python中使用C++类
2.7如何编写教程
ROS标准
ROS开发者指南
标准计量单位和坐标约定
 
 
理解ROS服务和参数
来源: ros.org 在线教程    编辑:Alice(火龙果软件)
551 次浏览
10次  

Description: 本教程介绍了ROS服务和参数的知识,以及命令行工具rosservice和rosparam的使用方法。

Tutorial Level: BEGINNER

本教程假设上一教程启动的turtlesim_node仍在运行,现在我们来看看turtlesim提供了什么服务:

1 ROS服务

服务(Services)是节点之间通讯的另一种方式。服务允许节点发送一个请求(request)并获得一个响应(response)。

2 使用rosservice

rosservice可以很容易地通过服务附加到ROS客户端/服务器框架上。rosservice有许多可用于服务的命令,如下所示:

用法:

rosservice list         输出活跃服务的信息
rosservice call         用给定的参数调用服务
rosservice type         输出服务的类型
rosservice find         按服务的类型查找服务
rosservice uri          输出服务的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和/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

 

服务的类型为empty(空),这表明调用这个服务时不需要参数(即,它在发出请求时不发送数据,在接收响应时也不接收数据)。下面我们使用rosservice call命令调用此服务:

2.3 rosservice call

用法:

rosservice call [service] [args]

 

因为服务的类型为empty,所以进行无参数调用:

$ rosservice call /clear

 

跟想象的一样,它清除了turtlesim_node背景上的轨迹。

再让我们看看服务具有参数的情况。查看spawn(产卵)服务的信息:

$ rosservice type /spawn | rossrv show

 

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

 

这个服务能让我们可以在给定的位置和角度生成一只新的乌龟。name字段是可选的,这里我们不设具体的名字,让turtlesim自动创建一个。

$ rosservice call /spawn 2 2 0.2 ""

 

该调用返回了新产生的乌龟的名字:

name: turtle2

 

现在我们的turtlesim应该看起来像这样:

3 使用rosparam

rosparam能让我们在ROS参数服务器(Parameter Server)上存储和操作数据。参数服务器能够存储整型(integer)、浮点(float)、布尔(boolean)、字典(dictionaries)和列表(list)等数据类型。rosparam使用YAML标记语言的语法。一般而言,YAML的表述很自然:1是整型,1.0是浮点型,one是字符串,true是布尔型,[1, 2, 3]是整型组成的列表,{a: b, c: d}是字典。rosparam有很多命令可以用来操作参数,如下所示:

用法:

rosparam set            设置参数
rosparam get            获取参数
rosparam load           从文件中加载参数
rosparam dump           向文件中转储参数
rosparam delete         删除参数
rosparam list           列出参数名

我们来看看现在参数服务器上都有哪些参数:

3.1 rosparam list

$ rosparam list

可以看到turtlesim节点在参数服务器上有3个参数用于设定背景颜色:

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

 

让我们使用rosparam set来试着改变一个参数值:

3.2 rosparam set和rosparam get

用法:

rosparam set [param_name]
rosparam get [param_name]

现在我们修改背景颜色的红色通道值:

$ rosparam set /turtlesim/background_r 150

 

上述指令修改了参数的值,现在我们需要调用clear服务使得参数的修改能生效:

$ rosservice call /clear

 

现在我们的turtlesim看起来应该像这样:

然后我们来查看参数服务器上其他参数的值。获取背景的绿色通道的值:

$ rosparam get /turtlesim/background_g 

 

86

也可以用rosparam get /来显示参数服务器上的所有内容:

$ rosparam get /

 

rosdistro: 'noetic

  '
roslaunch:
  uris:
    host_nxt__43407: http://nxt:43407/
rosversion: '1.15.5

  '
run_id: 7ef687d8-9ab7-11ea-b692-fcaa1494dbf9
turtlesim:
  background_b: 255
  background_g: 86
  background_r: 69

 

你可能希望将其存储在一个文件中,以便下次可以重新加载它。这通过rosparam很容易就可以实现:

3.3 rosparam dump和rosparam load

用法:

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

在这里,我们将所有的参数写入params.yaml文件:

$ rosparam dump params.yaml

 

你甚至可以将yaml文件重载入新的命名空间,例如copy_turtle:

$ rosparam load params.yaml copy_turtle
$ rosparam get /copy_turtle/turtlesim/background_b

 

255

 

至此,我们已经了解了ROS服务和参数的工作原理。接下来,我们一同试试使用rqt_console和roslaunch。

 


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



551 次浏览
10次