這一節介紹ROS服務和參數,以及rosservice和rosparam命令的使用
我們的小烏龜仍然在運行,可以看一下它提供了什么服務:
1 ROS服務
服務是node跟其他node交流的另一種方式。Service允許node發送一個請求然后接受一個回復。
2 使用rosservice
它可以輕松地通過Service連接到ROS客戶端或服務框架。它有很多命令可以用在topic上。
用法:
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
2.1 rosservice list
$ rosservice list
運行后顯示turtlesim 提供了9個服務,還有與rosout 相關的服務。因為之前用Ctrl+c結束了一些東西,也遺留下了別的服務:
/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/rostopic_4364_1488456319134/get_loggers
/rostopic_4364_1488456319134/set_logger_level
/rostopic_7446_1488504811853/get_loggers
/rostopic_7446_1488504811853/set_logger_level
/rqt_gui_py_node_3638/get_loggers
/rqt_gui_py_node_3638/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.2 rosservice type
用法:
rosservice type [service]
我們來看看clear服務是什么類型:
$ rosservice type /clear
顯示:
std_srvs/Empty
這個意思就是它發送的請求和回復都沒有任何參數。
2.3 rosservice call
用法:
rosservice call [service] [args]
我們呼叫這個服務的時候不需要參數:
$ rosservice call /clear
然后我們發現小海龜的背景清除干凈了。
再看個需要參數的:
$ rosservice type /spawn| rossrv show
float32 x
float32 y
float32 theta
string name
---
string name
這個服務可以讓我們創建一只新海龜:
$ rosservice call /spawn 2 2 0.2 ""
它會返回小海龜名稱。
3 使用rosparam
這個命令可以用來在ROS參數服務器存儲和操作參數。
- rosparam uses the YAML markup language for syntax. In simple cases, YAML looks very natural: 1 is an integer, 1.0 is a float, one is a string, true is a boolean, [1, 2, 3] is a list of integers, and {a: b, c: d} is a dictionary. rosparam has many commands that can be used on parameters, as shown below:*
用法:
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
3.1 rosparam list
$ rosparam list
顯示這個:
/background_b
/background_g
/background_r
/rosdistro
/roslaunch/uris/host_ubuntu__35711
/rosversion
/run_id
能看出來有三個參數決定背景顏色,我們試著改一下:
3.2 rosparam set and rosparam get
用法:
rosparam set [param_name]
rosparam get [param_name]
現在改變紅色通道:
$ rosparam set /background_r 150
現在我們需要讓clear服務使參數生效:
$ rosservice call /clear
獲取綠色通道參數:
$ rosparam get /background_g
還可以讓它顯示整個service的內容:
$ rosparam get /
返回結果如下:
background_b: 255
background_g: 86
background_r: 200
rosdistro: 'kinetic
'
roslaunch:
uris: {host_ubuntu__35711: 'http://ubuntu:35711/'}
rosversion: '1.12.6
'
run_id: f56bed9c-ff18-11e6-b6a3-000c29724ec8
你可能想存下來參數下次再讀進來,可以的:
3.3 rosparam dump and rosparam load
用法:
rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]
我們把所有參數寫入 params.yaml:
$ rosparam dump params.yaml
可以在新的命名空間重新加載:
$ rosparam load params.yaml copy
$ rosparam get /copy/background_b