摘要: 原創博客:轉載請表明出處:http://www.cnblogs.com/zxouxuewei/
資源鏈接:http://wenku.baidu.com/link?url=PhyN3C6ghqovJ0qtg8dnTEPEku6WFDnB2dOeMqfErVLx8hB4MksBUULiNLlvjwWtsgDRTcizA2jCFhCjdgu0rRTfsq2mUtiRr5GKUtfYtMi
pdf轉world:http://www.convertpdftoword.net/
1.計算次序
roslaunch與XML文件單一傳遞。include是按照深度優先遍歷的順序處理。標簽tag進行串行處理並且最后的設置有效。因此,若一個參數被多次設置,最后指定的值將被使用。
依靠重寫覆蓋的行為是不可取的。因為沒有誰能保證重寫是正確的(如,include文件中參數名改變了)。相反,比較推薦的是使用$(arg)/<arg>設置來進行重寫行為。
2.替代參數(substitutionargs:置換符)
Roslaunchtag屬性可使用置換符,這要在啟動節點之前解決。目前支持的置換參數如下:
$(env NVIRONMENT_VARIABLE)
替代當前的環境變量的值。如果環境變量沒有設置,啟動將失敗。該值不能由<env>標簽重寫。
2).$(optenv ENVIRONMENT_VARIABLE) $(optenv ENVIRONMENT_VARIABLE default_value)
如果設置了,則替代一個環境變量值。如果默認值default_value提供了,環境變量沒有設置時將使用默認值。如果沒有默認值,將使用空字符串。default_value可以是用空格分開的多個單詞。例子:
<paramname="foo"value="$(optenv NUM_CPUS 1)"/> <paramname="foo"value="$(optenv CONFIG_PATH /home/wsh/ros_workspace)"/>
<paramname="foo"value="$(optenv VARIABLE ros rocks)"/>3).$(findpkg)
3).$(find pkg)
$(findrospy)/manifest.xml.指定包的相對路徑。文件系統到包目錄的路徑將被內聯的替換。由於硬件編碼抑制了啟動配置的可移植性,我們鼓勵使用包相對路徑。本地文件系統公約的前后削減問題得到解決
4).$(anon name)
$(anonrviz-1)產生基於名稱的匿名ID。名字本身是一個獨特的標識符:不同的$(anonfoo)用法將創建相同的“匿名”的名字。主要用於“節點名稱”屬性中以創建匿名節點。ROS要求每個節點都有唯一的名字
例如:
<nodename="$(anonfoo)" pkg="rospy_tutorials" type="talker.py"/>
<nodename="$(anonfoo)" pkg="rospy_tutorials" type="talker.py"/>
如果兩個節點有一樣的名字將會發生錯誤。
5).$(argfoo)
$(argfoo)計算由<arg>標簽指定的值。在聲明arg的同一啟動文件中必須有對應的<arg>標簽。例如:
<paramname="foo" value="$(argmy_foo)"/>
將指定my_foo到foo參數.另一個例子:
<nodename="add_two_ints_server" pkg="beginner_tutorials" type="add_two_ints_server"/> <nodename="add_two_ints_client" pkg="beginner_tutorials" type="add_two_ints_client" args="$(arga)$(argb)"/>
將會從<add_two_ints>例子中啟動server和client,作為參數值a和傳遞。產生的啟動項目能用如下語句調用:
roslaunch beginner_tutorials launch_file.launch a:=1 b:=5
置換參數目前在本地機器上已經解決。換句話說,環境變量和ROS包的路徑能在當前的環境中設置,甚至遠程啟動的過程也可以。
3.if和unless屬性
所有標簽tags都支持if和unless屬性(基於計算的值包含或者排除一個tag)。”1”和“true”是值。”0”和“false”假值。其它值是錯的。
if=value(optional) 如果value值為true,包括標簽和內容。
unless=value(optional) 除非value為真,包含標簽和內容.
例子:
<groupif="$(argfoo)"> <!--stuff that will only be evaluated if foo is true--></group> <paramname="foo"value="bar"unless="$(argfoo)"/>
4.相關標簽
<launch>
<node> <machine>
<include> <remap> <env> <param> <rosparam> <group>
<test> <arg>
5.例子.launchXML配置文件
注:按照慣例,roslaunchXML文件的擴展名為.launch,
如example.launch。
5.1最小例子(MinimalExample)
下面的示例是一個最小的啟動配置腳本。它啟動了一個節點'talker',位“rospy_tutorials”包中。這個節點在本地機使用當前配置的ROS環境啟動(如ros_root)。
<launch> <nodename="talker"pkg="rospy_tutorials"type="talker"/></launch>
5.2一個稍微復雜的例子
<launch> <!-- local machine already has a definition by default.This tag overrides the default definition withspecific ROS_ROOT and ROS_PACKAGE_PATH values --> <machine name="local_alt" address="localhost" default="true" ros-root="/u/user/ros/ros/" ros-package-path="/u/user/ros/ros-pkg" /> <!-- a basic listener node --> <node name="listener-1" pkg="rospy_tutorials" type="listener" /> <!-- pass args to the listener node --> <node name="listener-2" pkg="rospy_tutorials" type="listener" args="-fooarg2" /> <!-- a respawn-able listener node -->
<node name="listener-3" pkg="rospy_tutorials" type="listener"respawn="true" />
<!-- start listener node in the 'wg1' namespace -->
<node ns="wg1" name="listener-wg1" pkg="rospy_tutorials" type="listener"respawn="true" />
<!-- start a group of nodes in the 'wg2' namespace -->
<group ns="wg2">
<!-- remap applies to all future statements in this scope. -->
<remap from="chatter" to="hello"/>
<node pkg="rospy_tutorials" type="listener" name="listener" args="--test" respawn="true" />
<node pkg="rospy_tutorials" type="talker" name="talker">
<!-- set a private parameter for the node -->
<param name="talker_1_param" value="a value" />
<!-- nodes can have their own remap args -->
<remap from="chatter" to="hello-1"/>
<!-- you can set environment variables for a node -->
<env name="ENV_EXAMPLE" value="some value" />
</node>
</group>
</launch>
5.3設置參數
也可以在參數服務器上設置參數。在節點啟動之前,這些參數被存儲在服務器上。如果值是明確的,可以省略 type 類型屬性。支持的類型是 str, int, double, bool。也可以不使用 textfile 或 binfile 屬性來
指定一個文件目錄。
例如:
<launch> <param name="somestring1" value="bar" /> <!-- force to string instead of integer --> <param name="somestring2" value="10" type="str" /> <param name="someinteger1" value="1" type="int" /> <param name="someinteger2" value="2" /> <param name="somefloat1" value="3.14159" type="double" /> <param name="somefloat2" value="3.0" /> <!-- you can set parameters in child namespaces --> <param name="wg/childparam" value="a child namespace parameter" /> <!-- upload the contents of a file to the server --> <param name="configfile" textfile="$(find roslaunch)/example.xml" /> <!-- upload the contents of a file as base64 binary to the server --> <param name="binaryfile" binfile="$(find roslaunch)/example.xml" /> </launch>