2020年10月29日 星期四

[ROS] roslaunch: <rosparam> 標籤的用法

在 roslaunch 的標籤中,有兩個標籤可以用來配置 Parameter Server 的參數:<param> 和 <rosparam>。兩者雖然都可以用來配置參數,但是功能上還是有些不同。下面將要介紹 <rosparam> 標籤如何使用,至於 <param> 標籤的使用,可以參考《roslaunch: <param> 標籤的用法》。

 

 

標籤說明

 

  • <rosparam>

 

此標籤用來配置 Parameter Server 中的參數,可以從 YAML 文檔中載入參數,或是將參數傾印到 YAML 文檔,也可以用來設定或刪除參數。有下列屬性可以使用:

 

command="load|dump|delete" (optional, default=load) : 指定使用哪個 rosparam 指令。

 

file="$(find pkg-name)/path/foo.yaml" (load or dump commands) : 指定檔案位置,用於 load 或 dump 指令。

 

param="param-name" (optional) : 指定參數名稱,不能用在 load 或 dump 指令上。

 

ns="namespace" (optional) : 將參數設置到指定的命名空間 (Namespace) 中。

 

subst_value="true|false" (optional) : 允許在 YAML 文本中使用 $(…) 等替代參數,例如:$(env ROS_MASTER_URI)。

(參考範例二)

 

補充說明:

 

  1. 可以將 <rosparam> 標籤放在 <node> 標籤內,在這種情況下,該參數被視為私有參數 (Private Parameter)。

 

  1. 在執行順序上,rosparam delete 和 dump 指令會比 load 指令優先,也會在任何其他參數上載到 Parameter Server 之前執行。至於 delete 和 dump 指令,則以在文檔中宣告的順序執行。

 

  1. rosparam load 指令有附加的作用,也就是如果宣告了一個命名空間,則這些參數將會被添加到該命名空間中。同理,load 指令也可以覆蓋先前宣告的參數。

 

  1. 在設置參數時,若使用 YAML 語法宣告一個字典 (dictionary),以此來設定參數的話,則可以省略 param 屬性。(參考範例三)

 

 

實例說明

 

下面舉一些例子來做說明。我們在 mypackage 套件裡面的 launch 目錄,新增一個簡單的 launch 文件來做測試。另外,在 script 目錄則是新增一個簡短的 Python 程式,用以讀取 Parameter Server 中的參數。

 

範例一:

 

此範例使用 <rosparam> 標籤的 load 指令,從一個 YAML 文檔載入參數。

 

-- rosparam1.launch

<launch>

  <rosparam command="load" file="$(find mypackage)/launch/myparam.yaml" />

  <node pkg="mypackage" type="checkparam.py" name="checkparam" output="screen" />

</launch>

 

-- myparam.yaml

myparam1: Hello

myparam2: World

 

-- checkparam.py

#!/usr/bin/env python

import rospy

 

rospy.init_node('checkparam')

print rospy.get_param('myparam1')

print rospy.get_param('myparam2')

rospy.spin()

 

執行 roslaunch mypackage rosparam1.launch 之後,可以看見螢幕分兩行顯示 Hello World。

 

範例二:

 

此範例使用 <rosparam> 標籤設定單一參數,其中第二個 <rosparam> 標籤使用 $(env ROS_DISTRO) 替代參數的方式,取得 ROS_DISTRO 環境變數值來做為設定。

 

-- rosparam2.launch

<launch>

  <rosparam param="myparam1">Hello</rosparam>

  <rosparam param="myparam2" subst_value="true">$(env ROS_DISTRO)</rosparam>

  <node pkg="mypackage" type="checkparam.py" name="checkparam" output="screen" />

</launch>

 

範例三:

 

此範例使用 <rosparam> 標籤一次設定多個參數,使用 YAML 語法宣告一個字典的方式來定義參數。

 

-- rosparam3.launch

<launch>

  <rosparam>

    myparam1: Hello

    myparam2: World

  </rosparam>

  <node pkg="mypackage" type="checkparam.py" name="checkparam" output="screen" />

</launch>

 

 

參考資料

 

  • roslaunch: <rosparam> tag

http://wiki.ros.org/roslaunch/XML/rosparam

 

沒有留言:

張貼留言

和我聯絡

名稱

以電子郵件傳送 *

訊息 *