码迷,mamicode.com
首页 > 其他好文 > 详细

ROS服务的理解

时间:2014-12-26 20:07:58      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

服务是节点之间通信的另一种方式,服务允许节点发起一个请求和接收一个响应。

打开终端在里面输入:

roscore

查看当前的运行节点:

rosnode list

返回结果:

/rosout

查看当前的运行服务:

rosservice list

返回结果:

/rosout/get_loggers
/rosout/set_logger_level
可以看到当前只有一个运行节点,有两个运行服务.

现在运行小乌龟的节点

另外打开一个终端在里面输入:

rosrun turtlesim turtlesim_node

把上面的过程走一遍,查看当前的运行节点和服务,返回结果:

/rosout
/turtlesim //这个名字可以修改
/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/spawn
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level

这里面的除了原来的那两个,都是小乌龟开启的服务.

使用rosservice type可以查看提供的服务的类型,它的使用方法如下:

rosservice type [service]

实例:

rosservice type clear

查看clear服务的类型,返回结果为:

std_srvs/Empty

返回的结果是empty,这就说明当调用这个服务时,传递的参数为空,也就是说在request和response中都没有参数的传递。


可以使用rosservice call调用服务:

rosservice call [service] [args]

实例:

$ rosservice call /clear

这里我们调用的时候没有任何的参数,因为/clear是empty类型的。它的效果就是清除乌龟的运行轨迹。


下面来看一个有参数的服务:

rosservice type spawn
返回结果:
turtlesim/Spawn

查看这个服务类型的具体细节:

rossrv show turtlesim/Spawn

返回:

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

或者这两条指令合成一个更加简洁:

rosservice type /spawn | rossrv show

spawn命令允许我们根据给定的坐标和角度产生另一个乌龟,并且可以给这个新产生的乌龟起一个名字,也可以不起名字。如:

rosservice call spawn 2 2 0.2 ""

在这条命令执行完成后,就会出现另一只乌龟(这时并没有重新启动一个node)。

ROS中的服务是基于请求和响机制的,在上面的例子中,我们通过终端发送请求,节点接收后,做出响应。

ROS服务的理解

标签:

原文地址:http://www.cnblogs.com/stemon/p/4187315.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!