天天看點

ROS機器人程式設計(原書第2版)2.4.14 動态參數

<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),如下:

在你執行最後一行指令後,你會看到一個新視窗,通過它你可以動态重配置節點的參數,如下圖所示:

每當你通過滑塊、文本框等調整參數時,你可以在指令行看到正在運作的節點的這些改變,如下圖所示:

通過動态重配置,你可以更高效地開發和測試節點。與硬體一起配合使用這個程式是不錯的選擇。你将在接下來的章節中學習到更多内容。