zoukankan      html  css  js  c++  java
  • ROS学习之服务

    ROS学习之服务

    在ROS中,节点通信有多种方法。笔者在前面讲过消息(即一个节点向话题中发布消息,其他多个节点可以订阅消息。),本篇文章讲解另一种方法,服务。服务是两个节点之间的通信。主要区别如下所示:

    1)服务是点对点的,一个节点发送消息,还需要等待接受节点的响应。而消息发布后没有响应之说,谁订阅了这个话题,谁就可以读取到此消息。

    2)服务是一对一的,消息可以多对多。

    0.1服务专业术语

    客户端:用来向服务器发送请求的。

    服务器:接受服务器请求,并采取一定处理回馈给客户端。

    服务数据类型:数据传输的类型。

    0.2命令行指令

    0.2.1服务列表

    rosservice list显示当前所有服务

    0.2.2查找提供服务的节点

          要完成这个反向查询,即查找提供给定服务的节点,可以使用这条指令:
    rosservice node service-name
            正如期望的,当查询关于任意由 rosnode info /turtlesim 指令列出的服务时,这条指令将给出/turtlesim; 而查询其他两条服务时,返回的节点是/rosout。
            查找服务的数据类型 可以利用下面的指令来确定一个服务的数据类型:
    rosservice info service-name
             例如,在终端中输入下面这条命令
    rosservice info /spawn
              得到的结果是:
    Node: /turtlesim
    URI: rosrpc://Donatello:47441
    Type: turtlesim/Spawn
    Args: x y theta name
               可以看到,/spawn 服务的数据类型是 turtlesim/Spawn。同消息类型类似,服务数据类型有两个部分,其一声明拥有此数据类型的包,其二声明类型本身。

    0.2.3查询服务数据类型

            当服务的数据类型已知时,我们可以使用rossrv 指令来获得此服务数据类型的详情:
    rossrv show service-data-type-name

             例如:rossrv show turtlesim/Spawn
    输出如下结果:
    float32 x
    float32 y
    float 32 theta
    string name
    ---
    string name

              在这里,短横线(---)之前的数据是请求项,这是客户节点发送到服务节点的信息。短横线之后的所有字段是响应项,或者说是服务节点完成请求后发送回请求节点的信息。

    0.2.4调用服务

        为了直观地观察服务是如何工作的,你可以使用下面这条指令,从命令行中调用它们:

    rosservice call service-name request-content
        请求内容部分应该列出请求每一个域的值,正如 rossrv show指令所展示的。下面是一个例子:
    rosservice call /spawn 3 3 0 Mikey
        这条服务调用的效果是在现有仿真器中,位置 ( x , y ) = (3,3) 处创建一个名为“Mikey”的新海龟,其朝向角度 θ = 0 。

    0.3客户端程序

    0.3.1

    0.3.2

    0.4服务器程序

  • 相关阅读:
    flask 数据迁移
    docker daemon 配置代理
    dbcm with kubenetes
    curl 访问 k8s
    kubernetes 集群安全配置
    k8s dashboard
    k8s v1.5.8 单节点搭建
    etcd raft library
    split files test
    ubuntu两个python版本共存并切换默认版本
  • 原文地址:https://www.cnblogs.com/flyingjun/p/8857298.html
Copyright © 2011-2022 走看看