參數服務的使用
關鍵詞:getParam(); setParam();yaml
背景代碼:
|
.......... ros::NodeHandle na; std::string initNodeName ; na.getParm("nodeName", initNodeName); ............. |
疑問:1/nodeName沒有見到有定義的地方?2/代碼字面意思應該是從某個地方取值賦給變量initNodeName,可是nodeName中的值從何而來?
解答:
1/nodeName實際上是ros系統中提供的一種參數服務器的用法,實際上有地方對該參數服務器進行了定義;
2/其意義類似于內存共享原理,(可以利用ros中的指令或者在代碼中使用setParam()對這個參數服務器進行賦值,然后再使用getParam()接口提取參數服務器中的值進行使用);
參數服務器的基本使用:
ros系統中的主要通信為話題、服務、動作,從大框架的角度來看參數服務器也可以當做是一種節點間的通信方法,其用法類似供所有節點使用的全局變量,這樣的方法十分的靈活,但是又是需要特別的注意;
機器人工作時,我們有需要對機器人的參數(如傳感器參數、算法的參數)進行設置。其中有些參數是要對應于特定的場景有不同的功能或者是算發等的選擇,這個時候有一個可以自由控制的外部接口將會是很舒服的一件事。參數服務器正好可以解決這個問題,并且不止可以單個的參數修改(使用:rosparam指令可以都參數服務器實現設置/獲取.......),同時也可以通過.yaml文件對參服務器進行批量的下發(對應的指令為 :rosparam load XXX.yaml)。
使用命令對參數服務器的使用:
查看參數服務器列表:rosparam list
獲取參數服務器:rosparam get 參數服務器名稱
設置參數服務器值:rosparam set 參數服務器名稱 “ 根據定義YAML格式參數服務器的類型需要設置的值(如:p: 1.0)”
加載到文件中:rosparam dump 轉儲數據文件名稱
從文件中加載: rosparam load 文件名稱(.yaml文件)
刪除一個參數服務器:rosparam delete 參數服務器名稱
使用.launch文件對參數服務器的操作(需要使用到命令:roslaunch 節點報名 .launch文件名稱):
定義一個數:
文件格式類似如下:
定義了一個名為“robot_type”,string類型的值為“clean”的參數服務器(這個參數服務器可以當做配置文件使用,在代碼中做不同分支處理)
<launch>
<param name = "robot_type", type = "string", value = "clean">
</launch>
使用roslaunch從文件中加載參數服務器(相當于運行:rosparam load jnt1_gains.yaml);
<launch>
<rosparam command = "load" file = "jnt1_gains.yaml" />
</launch>
(.yaml文件格式和使用方法鏈接:https://www.ibm.com/developerworks/cn/xml/x-1103linrr/)
.yaml簡介
基本格式:
key :value
如:(注意:冒號后面必須要有空格)
name : "robot_type"
hight : 1999
weith: 2000
weight: 30000
浙公網安備 33010602011771號