• ROS学习笔记7-理解服务(services)和参数(parameter)


    本文内容来自官方wiki:http://wiki.ros.org/ROS/Tutorials/UnderstandingServicesParams

    1. ROS服务(service)
      服务也是ROS中一种通信机制,但是不同于主题的发布和订阅,服务采取了一种“请求(request)-响应(response)”的机制来进行数据交换。
      和服务有关的功能可以使用rosservice命令来进行。
      rosservice list        列出活动的服务信息
      rosservice call       使用给定参数调用服务
      rosservice type      打印出服务类型
      rosservice find       查找给定类型的服务
      rosservice uri         打印服务的ROSRPC 源
      
      1. rosservice list
        该命令列出当前活动的服务,例如在小乌龟的例子中,我们运行rosservice list
        返回如下:
        $ rosservice list
        /clear
        /kill
        /reset
        /rosout/get_loggers
        /rosout/set_logger_level
        /rostopic_21128_1568429034667/get_loggers
        /rostopic_21128_1568429034667/set_logger_level
        /rostopic_25467_1568471203069/get_loggers
        /rostopic_25467_1568471203069/set_logger_level
        /rqt_gui_py_node_25560/get_loggers
        /rqt_gui_py_node_25560/set_logger_level
        /rqt_gui_py_node_25926/get_loggers
        /rqt_gui_py_node_25926/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
        
      2. rosservice type
        然后,使用rosservice type可以查看服务类型:
        $ rosservice type /clear
        std_srvs/Empty
        

        返回Empty表示该服务不用指定参数,即只表示一个功能动作,而无需数据。

      3. rosservice call
        使用rosservice call可以调用服务。
        用法如下:
        rosservice call [service] [args]

        例如,想调用/clear,则使用如下语句:

        rosservice call /clear
        

         则会清除掉小乌龟移动留下的轨迹。

        我们可以看一下带有参数的服务/spwan的参数:

        $ rosservice type /spawn | rossrv show
        float32 x
        float32 y
        float32 theta
        string name
        ---
        string name
        

         可以看出/spawn服务类型的数据参数为3个float32表示位置(x,y)和朝向theta和一个字符串表示名字name。
        用如下命令调用该服务:

        rosservice call /spawn 2 2 0.2 ""
        

        则产生另外一个小乌龟:

    2. ROS参数(rosparam)
      rosparam允许在ROS参数服务器(Parameter Server)中存储并操作参数(个人理解类似于编程中的全局变量)。参数服务器采取YAML标记语言来存储如下数据类型:
      integers(整型), floats(浮点型), boolean(布尔型), dictionaries(字典(键值类型)), 和lists(列表类型)。参数相关操作使用rosparam命令进行,用法如下:
      rosparam set            设置参数值
      rosparam get            获取参数值
      rosparam load           从文件加载参数
      rosparam dump           存储参数到文件
      rosparam delete         删除参数
      rosparam list           列出参数名
      
      1. rosparam list

        该命令可以列出所有参数名,例如:

        $ rosparam list
        /background_b
        /background_g
        /background_r
        /rosdistro
        /roslaunch/uris/host_localhost__35773
        /rosversion
        /run_id
        
      2. rosparam set和rosparam get
        可以通过rosparam set设置参数值,例如如下命令设置背景色中的红色通道值为200:

        rosparam set /background_r 200
        

         必须再调用clear服务来刷新背景:

        $ rosservice call /clear
        

        则背景变成粉红色

         使用如下命令可以获得该背景中的绿色:

        $ rosparam get /background_g
        86
        

        使用rosparam get /命令可获得所有参数值:

        $ rosparam get /
        background_b: 255
        background_g: 86
        background_r: 200
        rosdistro: 'kinetic
        
          '
        roslaunch:
          uris: {host_localhost__35773: 'http://localhost:35773/'}
        rosversion: '1.12.14
        
          '
        run_id: d0977b84-d694-11e9-b3cd-502b73e82f34
        
      3. rosparam dump和rosparam load
        可以使用rosparam dump存储参数,使用rosparam load加载参数:

        rosparam dump [file_name] [namespace]
        rosparam load [file_name] [namespace]
        

         可以指定参数文件名和命名空间
        如下命令将当前命名空间中的所有参数写入params.yaml文件。

        $ rosparam dump params.yaml
        

        如下命令从params.yaml文件中加载所有参数到copy命名空间。

        $ rosparam load params.yaml copy
        

         然后可以读取该空间中的参数:

        $ rosparam get /copy/background_b
        255

  • 相关阅读:
    十六、异步编程——messagedialog
    关于委托的一个摘录
    com interop 简述
    [STAThread]的使用
    Python初识和基础语法
    Python基础数据类型以及格式化输出
    JS读取PHP中设置的中文cookie时出现乱码的解决方法
    解决跨域读写Cookies的问题,(ASP、PHP、ASP.NET、JSP)解决方案
    多字段distinct查询
    Dedecms当前位置{dede:field name='position'/}修改,去掉>方法
  • 原文地址:https://www.cnblogs.com/spyplus/p/11520756.html
Copyright © 2020-2023  润新知