zoukankan      html  css  js  c++  java
  • 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 x
    float32 y
    float32 theta
    string name
    ---
    string name

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

    rosservice type /spawn | rossrv show

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

    rosservice call spawn 2 2 0.2 ""

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

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

  • 相关阅读:
    报表设计--主格设置-手工设置-示例
    报表设计--分组报表-分组小计
    报表设计--单元格公式-设置实例
    报表设计--自由报表-自由扩展
    报表设计--交叉报表-多层交叉-实例
    报表设计--交叉报表-多层交叉
    报表设计--分组报表-多层分组-数据汇总
    报表设计--分组报表-多层分组-横向扩展
    报表设计--分组报表-多层分组-纵向扩展
    报表设计--分组报表-普通分组-横向扩展
  • 原文地址:https://www.cnblogs.com/stemon/p/4187315.html
Copyright © 2011-2022 走看看