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

 

沒有留言:

張貼留言

和我聯絡

名稱

以電子郵件傳送 *

訊息 *