求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 


业务架构设计
4月18-19日 在线直播



基于UML和EA进行系统分析设计
4月25-26日 北京+在线



AI 智能化软件测试方法与实践
5月23-24日 上海+在线
 
追随技术信仰

随时听讲座
每天看新闻
 
 
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(火龙果软件)
778 次浏览
18次  

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元





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



778 次浏览
18次