1. 程式人生 > >5、理解ros服務

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