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

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

最新文章

  1. 《Note --- Unreal --- MemPro (CONTINUE... ...)》
  2. 产生冠军 hdoj_2094 巧用set
  3. 获取youku视频下载链接(wireshark抓包分析)
  4. 报错:org.hibernate.AssertionFailure: null id in com.tt.hibernate.entities.News entry (don't flush the Session after an exception occurs)
  5. Android中的PopupWindow
  6. 长串英文数字强制折行解决办法css
  7. POJ 2452 Sticks Problem
  8. Any changes made by a writer will not be seen by other users of the database until the changes have been completed
  9. Python3基础 index 返回一个元素在列表中第一次出现的索引值
  10. .NET 命名规范 代码示例
  11. SR4000笔记
  12. Win32 的dll导入
  13. SPOJ 0287 Smart Network Administrator
  14. Learning How to Learn, Part 1
  15. 现代3D图形编程学习-设置三角形颜色(译)
  16. 使用C#开发Android应用之WebApp
  17. Asp.Net Core微信服务中间件-.NetCore2.1
  18. SpringBoot2.0源码分析(一):SpringBoot简单分析
  19. @ControllerAdvice注解的使用
  20. linux:C++实现ping

热门文章

  1. Mybatis 测试延迟加载
  2. 【Codeforces】CF 165 E Compatible Numbers(状压dp)
  3. windows挂载gluseter NFS卷
  4. 听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构
  5. Python Json序列化与反序列化
  6. 关于tcp的三次握手与四次挥手,以及粘包
  7. 20.Scrapy日常练手
  8. linux 使用随笔
  9. hbase权限管理
  10. Centos LVM 创建 删除 扩大 缩小