[ROS]理解服务和参数

本贴最后更新于 2801 天前,其中的信息可能已经物是人非

前言: 本教程介绍 ROS 中的服务和参数,同时也介绍了 rosservice 和 rosparam 命令行工具。

在开始本教程前首先让 turtlesim_node 运行起来:
##1.ROS Services

服务是节点之间互相通信的另外一种方式。服务允许节点发送请求或者接受响应。

##2.Using rosservice

rosservice 可以很容易的讲连接 ROS 的客户或者服务框架和服务。rosservice 有很多命令,同时也可以在主题上使用,如下用法:
rosservice list 打印正在提供服务的信息
rosservice call 通过提供的参数调用服务
rosservice type 打印服务的类型
rosservice find 通过服务类型查找服务
rosservice uri 打印 ROSRPC 链接
###2.1rosservice list
命令窗口输入:
$ rosservice list
这个命令会显示 turtlesim_node 节点提供的九个服务:reset,clear,spawn,kill,turtle1/set_pen,/turtle1/teleport_absolute,/turtle/teleport_relative,turtlesim/get_loggrs 和 tuetlesim/set_logger_level.单独的 rosout 节点也提供了 2 个服务:/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.2rosservice type
用法:
rosservice type service
clear 服务是什么类型:
$ rosservice type clear
std_srvs/Empty
这个服务是空的类型,这意味着 这个服务调用的时候是不需要参数的(比如发送请求或者得到响应的时候是没有数据的)。让我们通过 rosservice call 来调用这个服务:
###2.3rosservice call
用法:
rosservice call [service] [args]
这里我们调用的时候没有参数,因为这个服务本身参数就是空的:
$ rosservice call /clear
这个命令完成了我们的期望,他刷新了 turtlesim_node 的背景。

让我们看看服务有参数的情况,通过 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
现在 turtlesim 窗口看起来应该是这样子:

##3.使用 rosparam
rosparam 允许你保存和操作在 ROS Parammeter Server 上的数据。Parammeter 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 参数列表
让我们看看 param 服务器上现在有什么参数:
###3.1rosparam list
$ rosparam list
这里我们看到 turtlesim 节点的背景颜色有 3 个参数在 param 服务器上。
/background_b
/background_g
/background_r
/roslaunch/uris/aqy:51932
/run_id
让我们通过 rosparam set 来设置其中的一个参数:
###3.2rosparam set and rosparam get
用法:
rosparam set [param_name]
rosparam get [param_name]
这个我们可以改变背景颜色的 red 值:
$ rosparam set background_r 150
这条命令改变了参数的值,现在我们调用 clear 服务来让改变的参数起效:
$ rosservice call clear
现在我们的 turtlesim 窗口看起来的样子如下:
~
现在让我们来看看 param 服务器上的其他参数的值。让我们来得到背景 green 的值:
$ rosparam get background_g
86
我们也可以使用 rosparam get /来显示 Parameter Server 上全部的内容。
$ 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 可以很简单的实现:
###3.3rosparam dump and rosparam load
用法:
rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]
这里我们把所有的参数写入文件 params.yaml
$ rosparam dump params.yaml
你甚至可以从新的命名空间加载这些 yaml 文件,例如:
$ rosparam load params.yaml copy
$ rosparam get copy/background_b
255
现在我们理解了 ROS service 和参数是如何工作的,下面继续学习 rat_console 和 roslaunch.

  • ROS
    23 引用 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 685 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 6 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    35 引用 • 35 回帖
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖 • 1 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    6551 引用 • 29424 回帖 • 246 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖 • 2 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 443 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    103 引用 • 294 回帖
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    40 引用 • 40 回帖
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    205 引用 • 357 回帖 • 1 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    4 引用 • 55 回帖 • 8 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    82 引用 • 122 回帖 • 621 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 42 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 71 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    40 引用 • 24 回帖
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    84 引用 • 139 回帖
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 399 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 636 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖 • 1 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 174 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    180 引用 • 447 回帖 • 1 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 247 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖 • 1 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖 • 2 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    21 引用 • 37 回帖 • 513 关注