ROS学习之参数
ROS學習之參數
??????? 除 了 前 面 介 紹 過 的 消 息 傳 遞 , ROS 還 提 供 另 一 種 參 數( parameters )機制用于獲取節點的信息。其主要思想是使用集中參數服務器( parameter server )維護一個變量集的值,包括整數、浮點數、字符串以及其他數據類型,每一個變量用一個較短的字符串標識? 。由于允許節點主動查詢其感興趣的參數的值,它們適用于配置那些不會隨時間頻繁變更的信息。
0.1命令行指令
0.1.1參數列表
rosparam list 顯示當前所有參數
??? 注意:在當前版本的 ROS 中,參數服務器是節點管理器的一部分,因此,它總是通過 roscore 或者 roslaunch 自動啟動。在所有情況下,參數服務器都能在后臺正常工作,因此沒有必要去花心思考慮它。然而,需要銘記的是,所有的參數都屬于參數服務器而不是任何特定的節點。這意味著參數——即使是由節點創建的——在節點終止時仍將繼續存在。
0.1.2查詢參數
rosparam get parameter_name? 查詢某個參數值
??? 例如,如下命令將讀取參數/rosdistro 的值:
rosparam get /rosdistro
??? 其輸出為字符串 indigo,這并不奇怪(譯者注:rosdistro 指ROS 的版本,如果讀者使用其他的發行版,將產生不同的輸出)。
0.1.3設置參數
rosparam set parameter_name parameter_value
??? 該命令可以修改已有參數的值或者創建一個新的參數。例如,以下命令可以創建一系列字符串參數,用以存儲一組卡通鴨子的顏色偏好:
rosparam set /duck_colors/huey red
rosparam set /duck_colors/dewey blue
rosparam set /duck_colors/louie green
rosparam set /duck_colors/webby pink
???? 另外,我們可以同時設置同一命名空間中的幾個參數:
rosparam set namespace values
???? 這里要以 YAML 字典的形式表示參數和對應值的映射關系。
???? 下面的例子和前面四行命令具有同樣的作用:
rosparam set /duck_colors "huey: red
dewey: blue
louie: green
webby: pink"
???? 需要注意的是,這種語法需要在命令中使用換行符。當然,這并不會造成什么問題,因為第一個引號告訴 bash 命令尚未完成。當在引號內按下回車時,終端將插入一個換行符而不是執行命令。
0.1.4創建和加載參數文件
????? 為了以 YAML 文件的形式存儲命名空間中的所有參數,可以使用 rosparam dump 命令:
rosparam dump filename namespace
????? 與 dump 相反的命令是 load,它從一個文件中讀取參數,并將它們添加到參數服務器:
rosparam load filename namespace
0.2用C++獲取參數
??? 使用ROS參數的C++接口是相當簡單的:
void ros::param::set(parameter_name, input_value);
bool ros::param::get(parameter_name, output_value);
??? 在這兩種情況下,參數名是一個字符串,它可以是全局的、相對的或者是私有的。set 函數中的輸入值 input_value 可以是std::string、bool、int 或 double 類型;get 函數的輸出值應該是上述某個類型的變量(通過引用傳遞)。如果參數值讀取成功,則get 函數返回 true;如果出現了問題,通常表示所請求的參數還沒有被指定一個值,則該函數返回 false。舉例如下:
以上為設置我們的背景顏色參數。
const std::string PARAM_NAME = "~max_vel" ; double maxVel ; bool ok = ros::param::get (PARAM_NAME, maxVel) ;?以上為讀取“~max_vel”參數值,并存儲到本地變量maxvel中。
?
0.3在啟動文件中設置參數
0.3.1設置參數
???可以使用param元素請求roslaunch設置參數值 :<param name="param-name" value="param-value" />這個元素,正如你所猜測的,將給定的值賦給給定名稱的參數。通常,這個參數名是相對的。例如,下面的啟動文件片段相當于第 129 頁的 rosparam 命令集:
<group ns="duck_colors">
<param name="huey" value="red" />
0.3.2私有參數
設置私有參數 另一個可選方法是在節點元素中包含 param 元素。
<node . . . >
<param name="param-name" value="param-value" />
. . .
</node>
在該結構下,參數名將被當做該節點的私有名稱。
0.3.3在文件中讀取參數
??? 最后,啟動文件也支持 與rosparam load等價的命令,可以一次性從文件中加載多個參數 7 :
<rosparam command="load" file="path-to-param-file" />
??? 這里列出的參數文件通常是通過 rosparam dump 命令創建的。與其他特定文件的引用相同(例如 6.5.1 節的 include 元素),使用查找替換來指定功能包的相對路徑是常見做法:
<rosparam
file="$(find package-name)/param-file"
/>
與 rosparam load 一樣,這個功能有助于測試,因為它允許用
戶重現在過去的某個時間有效的參數。
?
轉載于:https://www.cnblogs.com/flyingjun/p/8856981.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: 【编程语言】Java基础进阶——面向对象
- 下一篇: 基于Python的Web自动化(Sele