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