本文內容來自官方wiki:http://wiki.ros.org/ROS/Tutorials/UnderstandingServicesParams
- ROS服務(service)
服務也是ROS中一種通信機制,但是不同於主題的發布和訂閱,服務采取了一種“請求(request)-響應(response)”的機制來進行數據交換。
和服務有關的功能可以使用rosservice命令來進行。
rosservice list 列出活動的服務信息 rosservice call 使用給定參數調用服務 rosservice type 打印出服務類型 rosservice find 查找給定類型的服務 rosservice uri 打印服務的ROSRPC 源
- rosservice list
該命令列出當前活動的服務,例如在小烏龜的例子中,我們運行rosservice list
返回如下:
$ rosservice list /clear /kill /reset /rosout/get_loggers /rosout/set_logger_level /rostopic_21128_1568429034667/get_loggers /rostopic_21128_1568429034667/set_logger_level /rostopic_25467_1568471203069/get_loggers /rostopic_25467_1568471203069/set_logger_level /rqt_gui_py_node_25560/get_loggers /rqt_gui_py_node_25560/set_logger_level /rqt_gui_py_node_25926/get_loggers /rqt_gui_py_node_25926/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
- rosservice type
然后,使用rosservice type可以查看服務類型:
$ rosservice type /clear std_srvs/Empty
返回Empty表示該服務不用指定參數,即只表示一個功能動作,而無需數據。
- rosservice call
使用rosservice call可以調用服務。
用法如下:rosservice call [service] [args]
例如,想調用/clear,則使用如下語句:
rosservice call /clear
則會清除掉小烏龜移動留下的軌跡。
我們可以看一下帶有參數的服務/spwan的參數:
$ rosservice type /spawn | rossrv show float32 x float32 y float32 theta string name --- string name
可以看出/spawn服務類型的數據參數為3個float32表示位置(x,y)和朝向theta和一個字符串表示名字name。
用如下命令調用該服務:rosservice call /spawn 2 2 0.2 ""
則產生另外一個小烏龜:
- rosservice list
- ROS參數(rosparam)
rosparam允許在ROS參數服務器(Parameter Server)中存儲並操作參數(個人理解類似於編程中的全局變量)。參數服務器采取YAML標記語言來存儲如下數據類型:
integers(整型), floats(浮點型), boolean(布爾型), dictionaries(字典(鍵值類型)), 和lists(列表類型)。參數相關操作使用rosparam命令進行,用法如下:
rosparam set 設置參數值 rosparam get 獲取參數值 rosparam load 從文件加載參數 rosparam dump 存儲參數到文件 rosparam delete 刪除參數 rosparam list 列出參數名
- rosparam list
該命令可以列出所有參數名,例如:
$ rosparam list /background_b /background_g /background_r /rosdistro /roslaunch/uris/host_localhost__35773 /rosversion /run_id
-
rosparam set和rosparam get
可以通過rosparam set設置參數值,例如如下命令設置背景色中的紅色通道值為200:rosparam set /background_r 200
必須再調用clear服務來刷新背景:
$ rosservice call /clear
則背景變成粉紅色
使用如下命令可以獲得該背景中的綠色:
$ rosparam get /background_g 86
使用rosparam get /命令可獲得所有參數值:
$ rosparam get / background_b: 255 background_g: 86 background_r: 200 rosdistro: 'kinetic ' roslaunch: uris: {host_localhost__35773: 'http://localhost:35773/'} rosversion: '1.12.14 ' run_id: d0977b84-d694-11e9-b3cd-502b73e82f34
-
rosparam dump和rosparam load
可以使用rosparam dump存儲參數,使用rosparam load加載參數:rosparam dump [file_name] [namespace] rosparam load [file_name] [namespace]
可以指定參數文件名和命名空間
如下命令將當前命名空間中的所有參數寫入params.yaml文件。$ rosparam dump params.yaml
如下命令從params.yaml文件中加載所有參數到copy命名空間。
$ rosparam load params.yaml copy
然后可以讀取該空間中的參數:
$ rosparam get /copy/background_b
255
- rosparam list