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

       


       

       

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM