[ROS]理解服务和参数

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

前言: 本教程介绍 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 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 67 回帖 • 445 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 1 关注
  • Anytype
    3 引用 • 31 回帖 • 12 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 545 关注
  • LeetCode

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

    209 引用 • 72 回帖
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 214 关注
  • 安全

    安全永远都不是一个小问题。

    203 引用 • 818 回帖
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    36 引用 • 155 回帖 • 2 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 399 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖
  • 浅吟主题

    Jeffrey Chen 制作的思源笔记主题,项目仓库:https://github.com/TCOTC/Whisper

    1 引用 • 28 回帖
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    167 引用 • 595 回帖 • 1 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    210 引用 • 2040 回帖
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 567 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 76 关注
  • 域名

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

    43 引用 • 208 回帖 • 1 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 459 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 675 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    28 引用 • 197 回帖 • 25 关注
  • iOS

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

    87 引用 • 139 回帖
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 174 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 502 关注
  • Webswing

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

    1 引用 • 15 回帖 • 638 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    295 引用 • 750 回帖 • 1 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用