2020年11月3日 星期二

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

使用 <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] + "!"


rospy.spin()

 

執行 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

 

沒有留言:

張貼留言

和我聯絡

名稱

以電子郵件傳送 *

訊息 *