ROS入门_1.10 理解ROS服务和参数
目錄
本教程假設(shè)從前一教程啟動(dòng)的turtlesim_node仍在運(yùn)行,現(xiàn)在我們來(lái)看看turtlesim提供了什么服務(wù):
1. ROS Services
服務(wù)(services)是節(jié)點(diǎn)之間通訊的另一種方式。服務(wù)允許節(jié)點(diǎn)發(fā)送請(qǐng)求(request)?并獲得一個(gè)響應(yīng)(response)
rosservice可以很輕松的使用 ROS 客戶端/服務(wù)器框架提供的服務(wù)。rosservice提供了很多可以在topic上使用的命令,如下所示:
使用方法:
rosservice list 輸出可用服務(wù)的信息 rosservice call 調(diào)用帶參數(shù)的服務(wù) rosservice type 輸出服務(wù)類型 rosservice find 依據(jù)類型尋找服務(wù)find services by service type rosservice uri 輸出服務(wù)的ROSRPC uri
1.1 rosservice list
$ rosservice list
list?命令顯示turtlesim節(jié)點(diǎn)提供了9個(gè)服務(wù):重置(reset),?清除(clear),?再生(spawn),?終止(kill),?turtle1/set_pen,?/turtle1/teleport_absolute,?/turtle1/teleport_relative,?turtlesim/get_loggers, and?turtlesim/set_logger_level. 同時(shí)還有另外兩個(gè)rosout節(jié)點(diǎn)提供的服務(wù):?/rosout/get_loggers?and?/rosout/set_logger_level.
- /clear /kill /reset /rosout/get_loggers /rosout/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命令更進(jìn)一步查看clear服務(wù):
1.2 rosservice type
使用方法:
rosservice type [service]我們來(lái)看看clear服務(wù)的類型:
$ rosservice type clearstd_srvs/Empty
服務(wù)的類型為空(empty),這表明在調(diào)用這個(gè)服務(wù)是不需要參數(shù)(比如,請(qǐng)求不需要發(fā)送數(shù)據(jù),響應(yīng)也沒(méi)有數(shù)據(jù))。下面我們使用rosservice?call命令調(diào)用服務(wù):
1.3 rosservice call
使用方法:
rosservice call [service] [args]因?yàn)榉?wù)類型是空,所以進(jìn)行無(wú)參數(shù)調(diào)用:
$ rosservice call clear正如我們所期待的,服務(wù)清除了turtlesim_node的背景上的軌跡。
通過(guò)查看再生(spawn)服務(wù)的信息,我們來(lái)了解帶參數(shù)的服務(wù):
$ rosservice type spawn| rossrv show- float32 x float32 y float32 theta string name --- string name
這個(gè)服務(wù)使得我們可以在給定的位置和角度生成一只新的烏龜。名字參數(shù)是可選的,這里我們不設(shè)具體的名字,讓turtlesim自動(dòng)創(chuàng)建一個(gè)。
$ rosservice call spawn 2 2 0.2 ""服務(wù)返回了新產(chǎn)生的烏龜?shù)拿?#xff1a;
- name: turtle2
現(xiàn)在我們的烏龜看起來(lái)應(yīng)該是像這樣的:
2. Using rosparam
rosparam使得我們能夠存儲(chǔ)并操作ROS?參數(shù)服務(wù)器(Parameter Server)上的數(shù)據(jù)。參數(shù)服務(wù)器能夠存儲(chǔ)整型、浮點(diǎn)、布爾、字符串、字典和列表等數(shù)據(jù)類型。rosparam使用YAML標(biāo)記語(yǔ)言的語(yǔ)法。一般而言,YAML的表述很自然:1?是整型,?1.0是浮點(diǎn)型,?one是字符串,?true是布爾,?[1,?2,?3]是整型列表,?{a:?b,?c:?d}是字典.?rosparam有很多指令可以用來(lái)操作參數(shù),如下所示:
使用方法:
rosparam set 設(shè)置參數(shù) rosparam get 獲取參數(shù) rosparam load 從文件讀取參數(shù) rosparam dump 向文件中寫(xiě)入?yún)?shù) rosparam delete 刪除參數(shù) rosparam list 列出參數(shù)名我們來(lái)看看現(xiàn)在參數(shù)服務(wù)器上都有哪些參數(shù):
2.1 rosparam list
$ rosparam list
我們可以看到turtlesim節(jié)點(diǎn)在參數(shù)服務(wù)器上有3個(gè)參數(shù)用于設(shè)定背景顏色:
- /background_b /background_g /background_r /roslaunch/uris/aqy:51932 /run_id
Let's change one of the parameter values using?rosparam?set:
2.2 rosparam set and rosparam get
Usage:
rosparam set [param_name] rosparam get [param_name]現(xiàn)在我們修改背景顏色的紅色通道:
$ rosparam set background_r 150上述指令修改了參數(shù)的值,現(xiàn)在我們調(diào)用清除服務(wù)使得修改后的參數(shù)生效:
$ rosservice call clear現(xiàn)在 我們的小烏龜看起來(lái)應(yīng)該是像這樣:
現(xiàn)在我們來(lái)查看參數(shù)服務(wù)器上的參數(shù)值——獲取背景的綠色通道的值:
$ rosparam get background_g- 86
我們可以使用rosparam?get?/來(lái)顯示參數(shù)服務(wù)器上的所有內(nèi)容:
$ rosparam get /- background_b: 255 background_g: 86 background_r: 150 roslaunch: uris: {'aqy:51932': 'http://aqy:51932/'} run_id: e07ea71e-98df-11de-8875-001b21201aa8
你可能希望存儲(chǔ)這些信息以備今后重新讀取。這通過(guò)rosparam很容易就可以實(shí)現(xiàn):
2.3 rosparam dump and rosparam load
使用方法:
rosparam dump [file_name] rosparam load [file_name] [namespace]現(xiàn)在我們將所有的參數(shù)寫(xiě)入params.yaml文件:
$ rosparam dump params.yaml你甚至可以將yaml文件重載入新的命名空間,比如說(shuō)copy空間:
$ rosparam load params.yaml copy $ rosparam get copy/background_b- 255
至此,我們已經(jīng)了解了ROS服務(wù)和參數(shù)服務(wù)器的使用,接下來(lái),我們一同試試使用 rqt_console 和 roslaunch
總結(jié)
以上是生活随笔為你收集整理的ROS入门_1.10 理解ROS服务和参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 华为鸿蒙与佳华,华为鸿蒙系统发布,带来三
- 下一篇: 云计算底层技术-虚拟网络设备(Bridg