使用 <arg> 標籤可以宣告一些 arg 參數,這些參數有點像是 launch 文件裡面的區域變數。除了可以直接在 launch 文件指定參數值之外,還可以從命令列或是 <include> 標籤帶入參數值,讓 launch 文件能夠更加靈活的配置與運用。
標籤說明
- <arg>
此標籤可以用來宣告一個 arg 參數。<arg> 標籤有三種使用方式:
<arg name="foo" /> : 宣告一個 arg 參數。由於沒有指定參數值,因此參數值必須由命令列或 <include> 標籤傳入,否則引用時會顯示錯誤。
<arg name="foo" default="1" /> : 宣告一個帶有預設值的 arg 參數,參數的預設值可以被命令列帶入的參數值所覆蓋。若 <include> 標籤帶入相同的參數,則也會被 <include> 標籤帶入的參數值所覆蓋。
<arg name="foo" value="bar" /> : 宣告一個賦值的 arg 參數,此參數值無法被覆蓋。不能由命令列或 <include> 標籤帶入的參數值來覆蓋此設定。
注意事項:命令列帶入的參數只能覆蓋最上層 (top-level) 的參數值。
<arg> 標籤有下列屬性可以使用:
name="arg_name" : 參數名稱。
default="default value" (optional) : 設定參數的預設值。此屬性和 value 屬性不能同時使用,必須擇一使用。
value="value" (optional) : 設定參數值。此屬性和 default 屬性不能同時使用,必須擇一使用。
doc="description for this arg" (optional) : 提供參數的敘述。
實例說明
下面舉一些例子來做說明。我們在 mypackage 套件裡面的 launch 目錄,新增一個簡單的 launch 文件來做測試。另外,在 script 目錄則是新增一個簡短的 Python 程式,用以列印帶入的參數。
範例一:
-- arg1.launch
<launch> <arg name="myarg1" value="Hello" /> <arg name="myarg2" default="World" /> <node pkg="mypackage" type="checkargs.py" name="checkargs" output="screen" args="$(arg myarg1) $(arg myarg2)" /> </launch> |
-- checkargs.py
#!/usr/bin/env python import sys, rospy
rospy.init_node('checkargs') print sys.argv[1] + ",", print sys.argv[2] + "!"
|
執行 roslaunch mypackage arg1.launch 之後,螢幕會顯示 Hello, World!
範例二:
此範例從命令列帶入參數值,覆蓋 myarg2 的預設值。執行 roslaunch mypackage arg1.launch myarg2:=ROS 之後,myarg2 的預設值 "World" 會被 "ROS" 所取代,螢幕會顯示 Hello, ROS!
範例三:
此範例透過 <include> 標籤帶入參數值,覆蓋 myarg2 的預設值。執行 roslaunch mypackage arg2.launch 之後,myarg2 的預設值 "World" 會被 "ROS" 所取代,螢幕會顯示 Hello, ROS!
-- arg2.launch
<launch> <include file="arg1.launch"> <arg name="myarg2" value="ROS" /> </include> </launch> |
參考資料
- roslaunch: <arg> tag
http://wiki.ros.org/roslaunch/XML/arg
沒有留言:
張貼留言