ROS學習之引數

2021-09-19 02:55:14 字數 3059 閱讀 8892

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。舉例如下:

ros::param::set ("background_r" , 255) ;

ros::param::set ("background_g" , 255) ;

ros::param::set ("background_b" , 0) ;

以上為設定我們的背景顏色引數。

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設定引數值 :這個元素,正如你所猜測的,將給定的值賦給給定名稱的引數。通常,這個引數名是相對的。例如,下面的啟動檔案片段相當於第 129 頁的 rosparam 命令集:

0.3.2私有引數

設定私有引數 另乙個可選方法是在節點元素中包含 param 元素。

. . .

在該結構下,引數名將被當做該節點的私有名稱。

0.3.3在檔案中讀取引數

最後,啟動檔案也支援 與rosparam load等價的命令,可以一次性從檔案中載入多個引數 7 :

這裡列出的引數檔案通常是通過 rosparam dump 命令建立的。與其他特定檔案的引用相同(例如 6.5.1 節的 include 元素),使用查詢替換來指定功能包的相對路徑是常見做法:

與 rosparam load 一樣,這個功能有助於測試,因為它允許用

戶重現在過去的某個時間有效的引數。

收藏

ROS學習之 cpp引數伺服器

wiki鏈結 wiki.ros.org roscpp overview parameter 20server ros的引數伺服器可以儲存字串,整型,浮點型,布林型,列表,字典,iso8601資料,64基編碼資料.字典資料要有字串鍵.roscpp的引數api支援所有這些,儘管在使用中常使用string...

ROS學習之服務

ros學習之服務 1 服務是點對點的,乙個節點傳送訊息,還需要等待接受節點的響應。而訊息發布後沒有響應之說,誰訂閱了這個話題,誰就可以讀取到此訊息。2 服務是一對一的,訊息可以多對多。0.1服務專業術語 客戶端 用來向伺服器傳送請求的。伺服器 接受伺服器請求,並採取一定處理回饋給客戶端。服務資料型別...

ROS學習筆記(六)理解ROS服務和引數

1.ros 服務 服務 services 是節點間通訊的另一種方法,服務允許節點傳送乙個服務或者接收乙個服務 2.使用rosservice 一些相關用法 rosservice list print information about active services rosservice call c...