首页 > 代码库 > ROS服务的理解
ROS服务的理解
服务是节点之间通信的另一种方式,服务允许节点发起一个请求和接收一个响应。
打开终端在里面输入:
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 xfloat32 yfloat32 thetastring name---string name
或者这两条指令合成一个更加简洁:
rosservice type /spawn | rossrv show
spawn命令允许我们根据给定的坐标和角度产生另一个乌龟,并且可以给这个新产生的乌龟起一个名字,也可以不起名字。如:
rosservice call spawn 2 2 0.2 ""
在这条命令执行完成后,就会出现另一只乌龟(这时并没有重新启动一个node)。
ROS中的服务是基于请求和响机制的,在上面的例子中,我们通过终端发送请求,节点接收后,做出响应。
ROS服务的理解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。