5、理解ros服務
一、ros服務
ros服務(service)是節點間交流的另外一種方式,服務類似於web中的服務端與客戶端的概念,節點類似一個客戶端,可以發出一個請求(request),然後接受一個響應(response)。
二、使用rosservice命令
此命令的用法如下:
rosservice list print information about active services
rosservice call call the service with the provided args
rosservice type print service type
rosservice find find services by service type
rosservice uri print service ROSRPC uri
1、rosservice list
首先啟動一個小海龜:
roscore
rosrun turtlesim turtle_teleop_key
然後使用rosservice list
命令,我們將得到:
/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/spawn
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set _logger_level
這條命令說明我們小海龜節點提供如上9種服務。
可以進一步使用rosservice type
檢視服務的詳細資訊。
2、rosservice type
用法:
rosservice type [service]
示例:
rosservice type clear
得到:
std_srvs/Empty
服務為空,這表明在呼叫這個服務的時候不需要任何引數(它在生成請求時不傳送任何資料和接受響應的時候也不接收任何資料)。
我們可以使用rosservice call
來呼叫服務。
3、rosservice call
用法:
rosservice call [service] [args]
示例:
rosservice call /clear
呼叫此服務會清除小海龜的軌跡線條。
接下來我們通過spawn服務認識一下有引數的服務:
rosservice type spawn| rossrv show
會得到:
float32 x
float32 y
float32 theta
string name
---
string name
使用這個服務,給定位置引數和角度引數我們可以建立一個新海龜,其中name引數是可選的,現在我們就利用此命令建立一個新海龜:
rosservice call spawn 2 2 0.2 ""
它將返回新海龜的名字:
name: turtle2
同時我們也可以看到在海龜視窗中多了一隻不同顏色的海龜。
三、使用rosparam命令
使用rosparam
命令可以在ROS的 Parameter Server上儲存和操作資料。Parameter Server可以儲存integers, floats, boolean, dictionaries, and lists
型別的資料。而rosparam
命令使用YAML的語法,YAML的語法非常簡單,但是要求比較嚴格,就不細講了。rosparam
命令的用法如下:
rosparam set set parameter
rosparam get get parameter
rosparam load load parameters from file
rosparam dump dump parameters to file
rosparam delete delete parameter
rosparam list list parameter names
1、rosparam list命令
終端下呼叫此命令:
rosparam list
得到:
/background_b
/background_g
/background_r
/rosdistro
/roslaunch/uris/host_192_168_31_101__46779
/rosversion
/run_id
讓我們嘗試用rosparam set
命令改變引數的值:
2、rosparam set和rosparam get命令
用法:
rosparam set [param_name]
rosparam get [param_name]
例如我們可以改變一下小海龜視窗的背景色——
首先設定引數:
rosparam set background_r 150
然後需要呼叫clear服務才可以使引數生效:
rosservice call clear
執行完這一步,發現海龜視窗的背景色變紫了。
然後我們可以檢視一下在引數伺服器上的其他引數,例如背景色綠通道的值:
rosparam get background_g
會得到:
86
使用/
獲取引數伺服器上的所有內容:
rosparam get /
輸出類似於:
background_b: 255
background_g: 86
background_r: 150
rosdistro: 'jade
'
roslaunch:
uris: {host_192_168_31_101__46779: 'http://192.168.31.101:46779/'}
rosversion: '1.11.16
'
run_id: bd3a4832-0230-11e6-80ee-c0188582eefb
你可以把這些引數儲存到檔案裡以方便再次使用:
3、rosparam dump和rosparam load命令
用法:
rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]
現在我們把引數伺服器的內容存到params.yaml
中:
rosparam dump params.yaml
你可以將這個yaml檔案載入到新的名稱空間裡,例如'copy'
:
rosparam load params.yaml copy
rosparam get copy/background_b
得到:
255