ROS學習筆記(九)- 理解ROS服務和參數

這一節介紹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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容