文档章节

理解ROS服务和参数

慕水
 慕水
发布于 2017/09/08 13:21
字数 1111
阅读 14
收藏 0
点赞 0
评论 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
深圳
docker中的ROS容器与ROS主机的连接

docker中的ROS容器与远端ROS主机的连接 docker是目前一个比较流行的开源的应用容器引擎,ROS(robot operating system)是流行的机器人操作系统。结合二者,在云机器人研究方面是一种可能性的...

chenming_hnu ⋅ 2017/03/05 ⋅ 0

ROS进阶学习的过程

环境的安装与配置 这里有第一次按照书上的方法进行安装的步骤,也有后面学习中遇到的问题,需要对ROS进行重新安装配置的过程。 ROS使用教程-关于安装 初次在ubuntu14上安装ros-indigo的过程,...

CSDNhuaong ⋅ 2017/11/04 ⋅ 0

ros打开笔记本摄像头,单目标定

笔记本摄像头多是usb 镜头 下载包或者sudo apt-get install ros-indigo-usb-cam 打开驱动 端口为/dev/video0, 如果你外接了usb摄像头,你应该把该端口改成video1,自行从/dev下验证 对应的话题...

qq_35508344 ⋅ 2017/12/21 ⋅ 0

批量云资源管理与自动化运维总结

1.什么是ROS? 是一款帮助阿里云用户简化云计算资源管理和自动化运维的服务,其本质是一个UTF8 编码的json格式的文件。 2.应用场景: 3.ROS限制和约束: 每个堆栈允许创建的最大资源数(云服...

饮尽楚江秋 ⋅ 06/13 ⋅ 0

ros:global_planner 整体解析 解释了全局规划的多种实现原因(挺有用)

ROS: global_planner 整体解析 在目前的ROS版本中,机器人全局路径规划使用的是navfn包,这在movebase的默认参数中可以找到 baseglobalplanner (string, default: "navfn/NavfnROS")。而在n...

CWY_007 ⋅ 2017/07/05 ⋅ 0

基于Ubuntu 的 Parrot ARDrone 2.0的SDK安装以及ardrone_autonomy和tum_ardrone的安装和使用

经过了一个多星期的摸索,现在开始慢慢理解Parrot ARDrone 2.0的使用。现在总结一下遇到的问题,希望用这款无人机的人能够得到一些帮助,毕竟不能总是做一个伸手党。 Parrot ARDrone 2.0是法...

osgoodwu ⋅ 2016/12/07 ⋅ 0

ROS学习笔记(三)先锋机器人的使用 — 参考 ROS wiki 和 Mobile wiki

–参考方案: 找到了关于p3-dx的一些关于ROS的资料 https://github.com/ManolisCh/pioneerp3dx https://github.com/SeRViCE-Lab/p3-dx http://wiki.ros.org/demopioneer 先锋机器人ROS的教程......

David_Han008 ⋅ 2017/01/25 ⋅ 0

机器人操作系统(ROS)教程4:ROS的框架【转】

转自:http://www.arduino.cn/thread-11351-1-1.html 在进行ROS的代码开发前,有必要了解一些ROS的概念。 首先,ROS的系统代码分为两部分:main和universe。 1.main:是ROS的核心部分,它提供...

sky-heaven ⋅ 2016/11/09 ⋅ 0

Building OpenCascade on Windows with Visual Studio

Building OpenCascade on Windows with Visual Studio eryar@163.com 摘要Abstract:详细说明OpenCascade的编译配置过程,希望对你编译OpenCascacde有所帮助。本文内容来自OCCT的Overview文档...

eryar ⋅ 2013/09/23 ⋅ 0

ROS 导航 :make_plan (路线规划)

以下是在学习ROS 导航时,按照自己的理解整理的资料,有不对的地方请指出。 路径规划:从一个点到另一个点,规划出最优的路线。用到service :makeplan (navmsgs/GetPlan) 服务名为movebasen...

yiranhaiziqi ⋅ 2016/10/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

彻底删除Microsoft Office的方法

参照此链接彻底删除Office https://support.office.com/zh-cn/article/%e4%bb%8e-pc-%e5%8d%b8%e8%bd%bd-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=zh-CN&rs=zh-CN&ad=CN......

Kampfer ⋅ 29分钟前 ⋅ 0

大盘与个股之间关系

大盘走多:积极出手 顺势加码 大盘走空: 少量出手 退场观望 大盘做头:逆势减码 少量操作 大盘做底 : 小量建仓 小量试单

guozenhua ⋅ 30分钟前 ⋅ 0

Day16 LVM(逻辑卷管理)与磁盘故障小案例

lvm详解 简述 LVM的产生是因为传统的分区一旦分区好后就无法在线扩充空间,也存在一些工具能实现在线扩充空间但是还是会面临数据损坏的风险;传统的分区当分区空间不足时,一般的解决办法是再...

杉下 ⋅ 37分钟前 ⋅ 0

rsync实现多台linux服务器的文件同步

一、首先安装rsync,怎样安装都行,rpm,yum,还是你用源码安装都可以。因为我用的是阿里云的ESC,yum install rsync就ok了。 二、配置rsync服务 1.先建立个同步数据的帐号 123 groupadd r...

在下头真的很硬 ⋅ 50分钟前 ⋅ 0

前端基础(三):函数

字数:1685 阅读时间:5分钟 函数定义 在最新的ES规范中,声明函数有4中方法: -函数声明 -函数表达式 -构造函数Function -生成器函数 1.函数声明 语法: function name([param[, param2 [....

老司机带你撸代码 ⋅ 今天 ⋅ 0

Java虚拟机的Heap监狱

在Java虚拟机中,我是一个位高权重的大管家,他们都很怕我,尤其是那些Java 对象,我把他们圈到一个叫做Heap的“监狱”里,严格管理,生杀大权尽在掌握。 中国人把Stack翻译成“栈”,把Hea...

java高级架构牛人 ⋅ 今天 ⋅ 0

Spring MVC基本概念

只写Controller

颖伙虫 ⋅ 今天 ⋅ 0

微软重金收购GitHub的背后逻辑原来是这样的

全球最大的开发者社区GitHub网站花落谁家的问题已经敲定,微软最终以75亿美元迎娶了这位在外界看来无比“神秘”的小家碧玉。尽管此事已过去一些时日,但整个开发者世界,包括全球各地的开源社...

linux-tao ⋅ 今天 ⋅ 0

磁盘管理—逻辑卷lvm

4.10-4.12 lvm 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化、挂载-->扩容。 磁盘分区 注: 创建分区时需要更改其文件类型为lvm(代码8e) 分区 3 已设置为 Linu...

弓正 ⋅ 今天 ⋅ 0

Spring源码解析(六)——实例创建(上)

前言 经过前期所有的准备工作,Spring已经获取到需要创建实例的 beanName 和对应创建所需要信息 BeanDefinition,接下来就是实例创建的过程,由于该过程涉及到大量源码,所以将分为多个章节进...

MarvelCode ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部