文档章节

理解ROS服务和参数

慕水
 慕水
发布于 2017/09/08 13:21
字数 1111
阅读 38
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

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

 

ROS Services

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

 

使用rosservice

rosservice可以很轻松的使用 ROS 客户端/服务器框架提供的服务。rosservice提供了很多可以在topic上使用的命令,如下所示:

使用方法:

rosservice list         输出可用服务的信息
rosservice call         调用带参数的服务
rosservice type         输出服务类型
rosservice find         依据类型寻找服务find services by service type
rosservice uri          输出服务的ROSRPC uri

 

rosservice list

 

$ rosservice list

list 命令显示turtlesim节点提供了9个服务:重置(reset), 清除(clear), 再生(spawn), 终止(kill), turtle1/set_pen, /turtle1/teleport_absolute, /turtle1/teleport_relative, turtlesim/get_loggers, and 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服务:

rosservice type

使用方法:

rosservice type [service]

我们来看看clear服务的类型:

$ rosservice type clear

 

std_srvs/Empty

服务的类型为空(empty),这表明在调用这个服务是不需要参数(比如,请求不需要发送数据,响应也没有数据)。下面我们使用rosservice call命令调用服务:

 

rosservice call

使用方法:

rosservice call [service] [args]

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

$ rosservice call clear

正如我们所期待的,服务清除了turtlesim_node的背景上的轨迹。

turtlesim.png

通过查看再生(spawn)服务的信息,我们来了解带参数的服务:

$ rosservice type spawn| rossrv show
  • float32 x
    float32 y
    float32 theta
    string name
    ---
    string name

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

$ rosservice call spawn 2 2 0.2 ""

服务返回了新产生的乌龟的名字:

  • name: turtle2

现在我们的乌龟看起来应该是像这样的:

  • turtle(service).png

 

Using rosparam

rosparam使得我们能够存储并操作ROS 参数服务器(Parameter Server)上的数据。参数服务器能够存储整型、浮点、布尔、字符串、字典和列表等数据类型。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           列出参数名

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

 

rosparam list

 

$ rosparam list

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

  • /background_b
    /background_g
    /background_r
    /roslaunch/uris/aqy:51932
    /run_id

Let's change one of the parameter values using rosparam set:

 

rosparam set and rosparam get

Usage:

rosparam set [param_name]
rosparam get [param_name]

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

$ rosparam set background_r 150

上述指令修改了参数的值,现在我们调用清除服务使得修改后的参数生效:

$ rosservice call clear

现在 我们的小乌龟看起来应该是像这样:

  • turtle(param).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很容易就可以实现:

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

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

本文转载自网络

慕水
粉丝 1
博文 11
码字总数 0
作品 0
深圳
私信 提问
加载中

评论(0)

ROS学习笔记7-理解服务(services)和参数(parameter)

本文内容来自官方wiki:http://wiki.ros.org/ROS/Tutorials/UnderstandingServicesParams ROS服务(service) 服务也是ROS中一种通信机制,但是不同于主题的发布和订阅,服务采取了一种“请求...

osc_kalanll2
2019/09/15
2
0
ROS学习笔记二:ROS系统架构及概念

本文主要是了解ROS的系统架构、文件夹结构以及工作所需的核心文件。 ROS系统架构主要被设计和划分为三部分,每一部分代表一个层级的概念:<span style="color:red">文件系统级(The filesyst...

osc_3fzeg1rk
2019/03/20
6
0
client library&roscpp

Client Library & roscpp ROS为机器人开发者提供了不同语言的编程接口,比如C++接口叫做roscpp,python接口叫做rospy,Java接口叫做rosjava。尽管语言不通,但这些接口都可以用来创建toppic、...

徐凯_xp
2019/05/04
0
0
ros 编译 节点 话题 服务 参数

编译ROS程序包(使用catkin_make) ROS入门教程-理解ROS节点 roscore 使用rosnode(获取节点信息的ROS工具) 使用 rosrun(运行节点工具) 理解ROS话题 roscore turtlesim 通过键盘远程控制t...

cc_moe
03/31
0
0
开发函数计算的正确姿势 —— 使用 ROS 进行资源编排

前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计...

阿里云官方博客
2019/09/24
11
0

没有更多内容

加载失败,请刷新页面

加载更多

中国城市中心点坐标

以下为经过整理的地区数据,可以直接复制到json中使用 '上海': [121.487899486, 31.24916171], '临沧': [100.092612914, 23.8878061038], '丽江': [100.229628399, 26.8753510895], '保山': ......

osc_3nr2bq5w
24分钟前
13
0
apply,call ,bind

通过 apply(),call() 方法,能够编写用于不同对象的方法 . 这两个方法是一样的,差别在于接受参数形式不同,apply接受数组 ,call接受字符串参数 bind 目的是创建一个新函数 ,这个新函数的t...

东东笔记
25分钟前
16
0
pandas之cut(),qcut()

https://www.cnblogs.com/nicetoseeyou/p/10655422.html pandas之cut(),qcut() 功能:将数据进行离散化 可参见博客:https://blog.csdn.net/missyougoon/article/details/83986511 , 例子简易......

osc_bskubcvl
25分钟前
18
0
优雅地使用pt-archiver进行数据归档(转)

一、引言 最近由于业务需求,需要将公有云RDS(业务库)的大表数据归档至私有云MySQL(历史库),以缩减公有云RDS的体积和成本。 那么问题来了,数据归档的方式有n种,选择哪种呢?经过一番折...

osc_1ipdqsf2
27分钟前
12
0
api接口安全性问题

首先是正常的接口安全性设计 1、参数签名,防止篡改(MD5,SHA1,hmacSHA1) 2、防止重放校验(一次性的验证码,接口幂等性) 3、接口加密(RSA,AES等加解密算法),可以采用rsa加密签名,a...

花树堆雪
27分钟前
26
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部