launch文件概述---1


摘要: 原創博客:轉載請表明出處: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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM