ROS Indigo beginner_Tutorials-08 ROS服务 和 ROS参数

我使用的虚拟机软件:VMware Workstation 11

使用的Ubuntu系统:Ubuntu 14.04.4 LTS

ROS 版本:ROS Indigo

1. 理解 ROS 服务 和 ROS 参数:

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

( 节点之间通讯的方式 : 话题(rostopic) 和 服务(rosservice) )

我们先来启动一个小海龟节点: ( 开3个终端分别运行下面三个命令 )

$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key

2. rosservice : ROS 服务命令

2.1 list :

我们使用下面的命令来看一下当前有哪些服务在运行: (重新开一个终端(Ctrl+Alt+T))

$ rosservice  list

输出:

/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

如果你没事先执行 roscore 命令来启动 /rosout 主节点,那么当你执行 rosservice list 命令,会输出下面的提示信息:

ERROR: Unable to communicate with master!

你需要先执行 roscore 命令。


2.2 type :

很多服务在运行:我们来看看 /clear 这个服务的类型:

$ rosservice type /clear 

输出:

std_srvs/Empty

服务的类型为空(std_srvs/Empty)。这个std_srvs/Empty是ROS系统自定义的一个变量类型或者说是一个结构体。我们如何查看这个std_srvs/Empty内究竟是什么:

$ rosmsg show std_msgs/Empty 

std_srvs/Empty 这个变量类型里面什么都没有,表示你在调用 /clear 服务时,不需要参数。 什么意思呢,下面举个例子:


2.3 call :

第一个例子: 清空小海龟窗口背景里的运行轨迹:

我们使用rosservice call 命令来调用服务:

$ rosservice call [服务名] [需要的参数] 

我们来调用上面的/clear这个服务:(因为 /clear 这个服务的类型是 std_srvs/Empty (空),所以对于 /clear 这个服务,不需要参数)

$ rosservice call /clear 

调用之后,回去看一看小海龟窗口的背景里的运行轨迹都没有了。 (如果你之前使用方向键让小海龟移动过。)

再来一个例子:再生一个小海龟

我们来看看再生(/spawn)这个服务:

先看看调用这个服务需要什么参数:。执行下面的组合命令:

$ rosservice type  /spawn | rossrv show 

输出:

float32 x
float32 y
float32 theta
string name
---
string name

现在知道调用 /spawn 服务需要什么参数,我们就来再产生一个小海龟: (如果你将 nane 设为""(空),那么系统会自动生成一个新名字)

$ rosservice call /spawn 2 2 0.2 "" 

这时,服务返回了新产生的乌龟的名字(“turtle2”)。 新产生的乌龟,如下图:


3. rosparam : ROS 参数命令 :

下面再介绍一个命令:rosparam 参数服务器

使用方法和上面的命令(rosservice)都类似:

3.1 list :

先来看一下,当前 ROS 里面有哪些参数 :

$ rosparam list 

3.2 setget :

3.2.1 set

$ rosparam set [参数名]
$ rosparam get [参数名]

如何使用,举例说明:

比如现在我改变小海龟窗口背景的颜色:

$ rosparam set /background_r 150 

现在还是小海龟窗口的背景颜色不会改变的, 你必须要先 clear 一下:

$ rosservice call /clear 

3.2.2 get

我们使用get关键字 来得到当前参数的信息:

$ rosparam get /background_r

得到全部参数的信息:

$ rosparam get / 



小结:

因为一个ROS机器人的启动,等同于要启动多个节点程序。也就是说,我们每次想使用键盘的方向键控制小海龟时,我们必须在3个终端中启动3个节点:

$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key

这样做很麻烦,我们可不可以写一个脚本程序,将我们要运行的命令都写在一个启动脚本程序中,这样,每当我们想启动一个机器人的时候,就不需要记住一堆启动节点的命令,我们直接运行这个启动脚本程序,就可以了。所以我们下一节讲: 如何编写一个简单的启动脚本程序

ROS Learning-009 beginner_Tutorials ROS服务 和 ROS参数的更多相关文章

  1. Learning Roadmap of Robotic Operating System (ROS)

    ROS Wiki: http://wiki.ros.org/ Robots Using ROS Textbooks: A Gentle Introduction to ROS Learning ROS ...

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

    本文内容来自官方wiki:http://wiki.ros.org/ROS/Tutorials/UnderstandingServicesParams ROS服务(service)服务也是ROS中一种通 ...

  3. Learning ROS: Getting started with roswtf (检查ROS系统,找出问题)

    本文主要部分来源于ROS官网的Tutorials. roswtf是ROS的检查工具,用于检查ROS安装和运行系统. Checking your installation&Offline mak ...

  4. ROS笔记1 安装及创建一个ROS Package

    安装 跟着官方的安装指引来就行了.安装前要先确定自己的ros版本和ubuntu版本.这二者是一一对应的. http://wiki.ros.org/ROS/Installation 主要是package ...

  5. ROS入门笔记(二):ROS安装与环境配置及卸载(重点)

    ROS入门笔记(二):ROS安装与环境配置及卸载(重点) [TOC] 1 ROS安装步骤 1.1 ROS版本 ROS目前只支持在Linux系统上安装部署, 它的首选开发平台是Ubuntu. 发布时间 ...

  6. ROS与深度相机入门教程-在ROS使用kinect v1摄像头

    ROS与深度相机入门教程-在ROS使用kinect v1摄像头 说明: 介绍在ros安装和使用kinect v1摄像头 介绍freenect包 安装驱动 deb安装 $ sudo apt-get in ...

  7. 5、SAMBA服务一:参数详解

    ①:SAMBA服务一:参数详解 ②:SAMBA服务二:配置实例 一.SAMBA简介 samba指SMB(Server Message Block,服务器信息块)协议在网络上的计算机之间远程共享Linu ...

  8. 在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决

    ksoap2-android-3.0.0-jar 第三方库来调用.net 写的Web Service 如果没有参数,那么调用一切顺利,但是如果服务是带参数的,那么服务端接收的参数都是nul.      ...

  9. ROS Learning-004 beginner_Tutorials 介绍简单的ROS命令

    ROS Indigo beginner_Tutorials-03 介绍简单的ROS命令 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04 ...

随机推荐

  1. Jade模板引擎使用详解

    在 Express 中调用 jade 模板引擎 jade 变量调用 if 判断 循环 Case 选择 在模板中调用其他语言 可重用的 jade 块 (Mixins) 模板包含 (Includes) 模 ...

  2. python的类

    一.语法 python类的机制是 C++ 的类机制和 Modula-3 的类机制的混合体: 允许多继承的类继承机制,派生类可以重写它父类的任何方法,一个方法可以调用父类中重名的方法: 1.动态特性:  ...

  3. 基于RDBMS的OLAP的解决方案

    BI项目如何开发: 了解OLAP的分析方法: 对数据进行多维建模分析,也就是自己设计自己的数据方体,之后程序自动生成数据方体 数据方体: 1.自动成的表结构,仅仅有你需要的列 2.生成一条SQL语句( ...

  4. mysql sleep连接过多解决办法

    睡眠连接过多,会对mysql服务器造成什么影响? 严重消耗mysql服务器资源(主要是cpu, 内存),并可能导致mysql崩溃. 造成睡眠连接过多的原因? 1. 使用了太多持久连接(个人觉得,在高并 ...

  5. 代码生成器 CodeSmith 的使用(二)

    在第一篇中,简单的介绍了 CodeSmith 的使用方法,这次做一个生成简单的数据库字段属性的模板.以下只粘贴主要的代码片段. <%-- Name: Copyright © Sun 2013-2 ...

  6. opencv边缘检测的入门剖析(第七天)

    ---边缘检测概念理解--- 边缘检测的理解可以结合前面的内核,说到内核在图像中的应用还真是多,到现在为止学的对图像的操作都是核的操作,下面还有更神奇的! 想把边缘检测出来,从图像像素的角度去想,那就 ...

  7. CentOS 7.4 安装部署 iRedMail 邮件服务器

    在公司部署了一套开源的邮件网关Scrollout F1用来测试,由于Scrollout F1需要使用IMAP协议连接到邮件服务器上的隔离邮箱,抓取GOOD和BAD文件夹里的邮件进行贝叶斯学习,但公司的 ...

  8. Zabbix监控系统端口

    参考网站: https://www.cnblogs.com/nulige/p/7072019.html

  9. getitem, setitem, delitem (把类实例化成字典的类型)

    class Foo(object):     def __init__(self):         self.data = {} def __getitem__(self, key):        ...

  10. 超简单,webpack配置

    有看过我的博客的童鞋可能有看到我最近有在利用闲暇时间做一个前后台均涵盖的音乐播放器项目,但是呢,我是一个小小的前端,对后台的了解可以说只停留在很初级的阶段,当然了音乐播放器的音乐列表是后台轮循出来的, ...