本文内容来自官方wiki:http://wiki.ros.org/ROS/Tutorials/UnderstandingServicesParams

  1. ROS服务(service)
    服务也是ROS中一种通信机制,但是不同于主题的发布和订阅,服务采取了一种“请求(request)-响应(response)”的机制来进行数据交换。
    和服务有关的功能可以使用rosservice命令来进行。

    1. rosservice list 列出活动的服务信息
    2. rosservice call 使用给定参数调用服务
    3. rosservice type 打印出服务类型
    4. rosservice find 查找给定类型的服务
    5. rosservice uri 打印服务的ROSRPC
    1. rosservice list
      该命令列出当前活动的服务,例如在小乌龟的例子中,我们运行rosservice list
      返回如下:

      1. $ rosservice list
      2. /clear
      3. /kill
      4. /reset
      5. /rosout/get_loggers
      6. /rosout/set_logger_level
      7. /rostopic_21128_1568429034667/get_loggers
      8. /rostopic_21128_1568429034667/set_logger_level
      9. /rostopic_25467_1568471203069/get_loggers
      10. /rostopic_25467_1568471203069/set_logger_level
      11. /rqt_gui_py_node_25560/get_loggers
      12. /rqt_gui_py_node_25560/set_logger_level
      13. /rqt_gui_py_node_25926/get_loggers
      14. /rqt_gui_py_node_25926/set_logger_level
      15. /spawn
      16. /teleop_turtle/get_loggers
      17. /teleop_turtle/set_logger_level
      18. /turtle1/set_pen
      19. /turtle1/teleport_absolute
      20. /turtle1/teleport_relative
      21. /turtlesim/get_loggers
      22. /turtlesim/set_logger_level
    2. rosservice type
      然后,使用rosservice type可以查看服务类型:
      1. $ rosservice type /clear
      2. std_srvs/Empty

      返回Empty表示该服务不用指定参数,即只表示一个功能动作,而无需数据。

    3. rosservice call
      使用rosservice call可以调用服务。
      用法如下:
      1. rosservice call [service] [args]

      例如,想调用/clear,则使用如下语句:

      1. rosservice call /clear

      则会清除掉小乌龟移动留下的轨迹。

      我们可以看一下带有参数的服务/spwan的参数:

      1. $ rosservice type /spawn | rossrv show
      2. float32 x
      3. float32 y
      4. float32 theta
      5. string name
      6. ---
      7. string name

      可以看出/spawn服务类型的数据参数为3个float32表示位置(x,y)和朝向theta和一个字符串表示名字name。
      用如下命令调用该服务:

      1. rosservice call /spawn 2 2 0.2 ""

      则产生另外一个小乌龟:

  2. ROS参数(rosparam)
    rosparam允许在ROS参数服务器(Parameter Server)中存储并操作参数(个人理解类似于编程中的全局变量)。参数服务器采取YAML标记语言来存储如下数据类型:
    integers(整型), floats(浮点型), boolean(布尔型), dictionaries(字典(键值类型)), 和lists(列表类型)。参数相关操作使用rosparam命令进行,用法如下:
    1. rosparam set 设置参数值
    2. rosparam get 获取参数值
    3. rosparam load 从文件加载参数
    4. rosparam dump 存储参数到文件
    5. rosparam delete 删除参数
    6. rosparam list 列出参数名
    1. rosparam list

      该命令可以列出所有参数名,例如:

      1. $ rosparam list
      2. /background_b
      3. /background_g
      4. /background_r
      5. /rosdistro
      6. /roslaunch/uris/host_localhost__35773
      7. /rosversion
      8. /run_id
    2. rosparam set和rosparam get
      可以通过rosparam set设置参数值,例如如下命令设置背景色中的红色通道值为200:

      1. rosparam set /background_r 200

      必须再调用clear服务来刷新背景:

      1. $ rosservice call /clear

      则背景变成粉红色

      使用如下命令可以获得该背景中的绿色:

      1. $ rosparam get /background_g
      2. 86

      使用rosparam get /命令可获得所有参数值:

      1. $ rosparam get /
      2. background_b: 255
      3. background_g: 86
      4. background_r: 200
      5. rosdistro: 'kinetic
      6.  
      7. '
      8. roslaunch:
      9. uris: {host_localhost__35773: 'http://localhost:35773/'}
      10. rosversion: '1.12.14
      11.  
      12. '
      13. run_id: d0977b84-d694-11e9-b3cd-502b73e82f34
    3. rosparam dump和rosparam load
      可以使用rosparam dump存储参数,使用rosparam load加载参数:

      1. rosparam dump [file_name] [namespace]
      2. rosparam load [file_name] [namespace]

      可以指定参数文件名和命名空间
      如下命令将当前命名空间中的所有参数写入params.yaml文件。

      1. $ rosparam dump params.yaml

      如下命令从params.yaml文件中加载所有参数到copy命名空间。

      1. $ rosparam load params.yaml copy

      然后可以读取该空间中的参数:

      1. $ rosparam get /copy/background_b
        255

ROS学习笔记7-理解服务(services)和参数(parameter)的更多相关文章

  1. # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)

    目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...

  2. 微信小程序开发:学习笔记[7]——理解小程序的宿主环境

    微信小程序开发:学习笔记[7]——理解小程序的宿主环境 渲染层与逻辑层 小程序的运行环境分成渲染层和逻辑层. 程序构造器

  3. ROS学习笔记七:在ROS中使用USB摄像头

    下面是一些USB摄像头的驱动(大多数摄像头都支持uvc标准): 1 使用软件库里的uvc-camera功能包 1.1 检查摄像头 lsusb ----------------------------- ...

  4. ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters

    上一节完成了对nodes, Topic的理解,再深入一步: Services and Parameters 我不理解为何 ROS wiki 要把service与parameter放在一起介绍, 很想分 ...

  5. ROS学习笔记五:创建和使用ROS msg和srv

    1 msg和srv简介 1.1 msg文件 msg文件就是一个简单的text文件,其中每行有一个类型和名称,可用的类型如下: int8, int16, int32, int64 (plus uint* ...

  6. ROS学习笔记1-引言

    该学习笔记参考ROS官方wiki的内容,见:http://wiki.ros.org/ROS/Introduction 什么是ROSROS的全称是Robot Operating System,即机器人操 ...

  7. Android(java)学习笔记227:服务(service)之服务的生命周期 与 两种启动服务的区别

    1.之前我们在Android(java)学习笔记171:Service生命周期 (2015-08-18 10:56)说明过,可以回头看看: 2.Service 的两种启动方法和区别: (1)Servi ...

  8. Netty学习笔记(二) 实现服务端和客户端

    在Netty学习笔记(一) 实现DISCARD服务中,我们使用Netty和Python实现了简单的丢弃DISCARD服务,这篇,我们使用Netty实现服务端和客户端交互的需求. 前置工作 开发环境 J ...

  9. Dubbo -- 系统学习 笔记 -- 示例 -- 静态服务

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 静态服务 有时候希望人工管理服务提供者的上线和下线,此时需将注册中心标识为非动态管 ...

随机推荐

  1. kafka start bat

    start D:\Homes\kafka_2.12-2.3.0\bin\windows\kafka-server-start.bat D:\Homes\kafka_2.12-2.3.0\config\ ...

  2. [PHP]PHP中申明 declare(strict_types=1)的作用

    strict_types=1 针对参数类型开启严格模式,进行数据类型检验,默认是弱类型校验哪个文件写了declare,哪个文件中的所有代码就需要检查 declare(strict_types=1); ...

  3. python笔记14

    今日内容 带参数的装饰器: flask框架 + django缓存 + 写装饰器实现被装饰的函数要执行N次 模块 os sys time(三种类型) datetime 和 timezone[了解] 内容 ...

  4. iOS中常用的手势

    --前言 智能手机问世后的很长一段时间,各大手机厂商都在思考着智能手机应该怎么玩?也都在尝试着制定自己的一套操作方式.直到2007年乔布斯发布了iPhone手机,人们才认识到智能手机就应该这样玩. 真 ...

  5. DCL和DQL

    数据查询语言(DQL,Data Query Language) 主要是一些查询的sql语句. 语法 select * from test: 数据控制语言(DCL, Data Control Langu ...

  6. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 显示代码

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. 【转载】使用阿里云code和git管理项目

    使用代码云托管和git来管理项目可以使多客户端和多人开发更加高效.通过对比github,bitbucket和国内一些云托管服务发现阿里云在项目空间和传输速度及稳定性上更能满足公司开发的要求.本文将介绍 ...

  8. Spark教程——(9)Oozie编排Spark任务

    进入Hue管理界面,打开Oozie Editor: 将打包好的Spark程序上传到HDFS上,拖拽Spark任务,编辑任务属性,选择打包好的Spark程序,设置主函数所在类,设置选项参数: 保存为任务 ...

  9. Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2)C

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;string s;pair<int,in ...

  10. for循环语句及批量创建用户!

    1.for 语句结构for 变量名 in 取值列表do命令序列done ================================================================ ...