<b>2.4.14 動态參數</b>
ros的另一個功能是動态重配置應用。通常情況下,當你正在編寫一個新節點,你隻能以資料初始化節點内的變量。如果你想從外部節點動态地改變這些值,你可以使用參數伺服器、服務或主題。如果你使用一個pid節點來控制一個電動機,則應該使用動态重配置
應用。
在本節中,你将學習如何配置一個包含此功能的基本節點。添加必要的内容到cmakelists.txt和package.xml檔案。
為了使用動态重配置,你需要寫一個配置檔案并儲存在你功能包的cfg檔案夾中,建立一個檔案夾和新檔案如下:
在chapter2.cfg檔案中添加如下代碼:
代碼解釋:
以上代碼初始化ros并導入參數生成器:
以上代碼初始化參數生成器,通過它我們可以開始用下面的代碼行添加參數:
以上代碼加入不同的參數類型并設定預設值、描述、範圍等,參數有如下内容:
name 參數的名稱
type 參數值的類型
level 一個傳遞給回調的位掩碼
description 一個描述參數
default 節點啟動的初始值
min 參數最小值
max 參數最大值
參數的名稱必須唯一,參數值必須在最小和最大的範圍内:
最後一行生成必要的檔案并退出程式。注意.cfg檔案是用python寫的。本書的執行個體代碼主要使用c++編寫,但有時會使用python代碼片段。
因為檔案将由ros執行,是以需要改變檔案的權限,我們将使用chmod a + x使檔案可由任何使用者執行和運作,如下所示:
打開cmakelist.txt,加入下面代碼:
現在,我們要寫具有動态重配置支援的新節點。在src檔案夾中建立一個新檔案如下:
在檔案中寫入如下代碼段:
這裡進行代碼解釋,注意一些重要的行:
這些行包括ros頭檔案、參數伺服器以及我們先前建立的config檔案。
回調函數将輸出參數的新值。這是參數通路的方式,例如config.int_param。參數的名稱必須與example2.cfg配置檔案相同:
初始化伺服器,忽略chapter2_config配置檔案:
現在,我們向伺服器發送回調函數。當伺服器得到重新配置請求,它會調用回調函數。
一旦我們完成以上講解的步驟,我們需要在cmakelists.txt檔案中添加如下代碼:
現在,你必須編譯并運作節點和動态重配置界面(dynamic reconfigure gui),如下:
在你執行最後一行指令後,你會看到一個新視窗,通過它你可以動态重配置節點的參數,如下圖所示:
每當你通過滑塊、文本框等調整參數時,你可以在指令行看到正在運作的節點的這些改變,如下圖所示:
通過動态重配置,你可以更高效地開發和測試節點。與硬體一起配合使用這個程式是不錯的選擇。你将在接下來的章節中學習到更多内容。