services為node間通訊的另一種方法, 利用發送request並得到response的方式溝通

6.1 一些命令

  • rosservice: 提供service相關的訊息
  • rosparam: 可以儲存並操作ros parameter server的數據

6.2 rosservice的使用

rosservice list # 輸出可用service的訊息
rosservice call # 使用service(帶參數)
rosservice type # 輸出service的type
rosservice find # find services by service type
rosservice uri #輸出service的ROSRPC uri

首先我們把非turtlesim相關的node關掉

即rostopic pub和rostopic echo這兩個

接下來使用rosservice list

我們可以看到除了rosout的兩個service外, turtlesim相關的services

現在觀察一下clear這個service的type

# rosservice type [service]
rosservice type clear # 輸出stdsrvs/Empty

此service的type為empty, 表示在使用這個service時不需要提供參數, 現在試著使用看看這個service

# rosservice call [service] [args]
rosservice call clear # 因為service type is empty, 不用給args

此時會發現turtlesim的軌跡被清空了

接下來我們使用看看要輸入args的service

rosservice type spawn | rossrv show

輸出為

float32 x
float32 y
float32 theta
string name
---
string name

這代表我們可以利用x, y, theta來spawn新的烏龜並且可以利用name來命名

rosservice call spawn 2 2 0.2 "" # return name: turtle2

6.3 rosparam的使用

rosparam set # 設置參數
rosparam get # 獲取參數
rosparam load # 從指定文件獲取參數
rosparam dump # 將參數寫入指定文件
rosparam delete # 刪除參數
rosparam list # 列出參數名稱(而非列出參數)
rosparam list

可以看到有三個用於設定背景顏色的參數

接下來試著設定一下背景顏色的參數

# rosparam set/get [param_name]
rosparam set background_r 150
rosservice call clear # 這句會將目前的畫面重新生成
rosparam get background_g # return 86
rosparam get / # 顯示所有parameter server上的參數

以上那些訊息可能會需要儲存起來以在日後使用

# rosparam dump [file name]
# rosparam load [file name] [namespace]
rosparam dump params.yaml
rosparam load params.yaml copy # 將此文件中的參數資訊讀到copy這個namespace中
rosparam get copy/background_b # return 255

results matching ""

    No results matching ""