天天看點

ros基礎必看之roslaunch日常使用+進階

#

roslaunch 進階

  • roslaunch在一次傳遞中計算XML檔案。包含按深度第一周遊順序處理。标記按順序計算,最後一個設定獲勝。是以,如果一個參數有多個設定,則将使用為該參數指定的最後一個值。
  • 依賴覆寫行為可能很脆弱。不能保證正确指定了重寫(例如,如果在包含的檔案中更改了參數名)。相反,建議使用$(arg)/設定完成覆寫行為。

替代參數

Roslaunch标記屬性可以使用替換參數,Roslaunch 将在啟動節點之前解析這些參數。目前支援的替換參數包括:

(1)

$ (env ENVIRONMENT_VARIABLE)                              
           

換目前環境中變量的值。如果未設定環境變量,則啟動将失敗。此值不能被<env>标記覆寫。

(2)

$ (optenv ENVIRONMENT_VARIABLE)                                                   
$(optenv ENVIRONMENT_VARIABLE default_value) |
           

如果環境變量已設定,請将其替換。如果提供了預設值,則在未設定環境變量時将使用該值。如果未提供預設值,則将使用空字元串。預設值可以是由空格分隔的多個單詞。 |

example:

<param name="foo" value="$(optenv NUM_CPUS 1)" />
  <param name="foo" value="$(optenv CONFIG_PATH /home/marvin/ros_workspace)" />
  <param name="foo" value="$(optenv VARIABLE ros rocks)" />
           

(3)

$ (find pkg)
           

指定包的**相對路徑。**到包目錄的檔案系統路徑将被内聯替換。由于寫死路徑抑制了啟動配置的可移植性,是以強烈鼓勵使用包相關路徑。前斜杠和後斜杠将被解析為本地檔案系統約定。

exmaple:

$(find rospy)/manifest.xml
這裡用的是相對路徑
           

(4)

$(anon name)
           

在名稱的基礎上産生匿名id

(5)

$(arg foo)
           

計算為<arg>标記指定的值。在聲明arg的同一啟動檔案中必須有相應的<arg>标記

example:

<param name="foo" value="$arg my_foo" />
value等于my_foo這個參數的值
           

(6)

$(eval <expression>)
           

允許計算任意複雜的python表達式。

(7)

$(dirname)
           

傳回啟動檔案所在目錄的絕對路徑。這可以與eval和if/unless結合使用來修改基于安裝路徑的行為,或者隻是為了友善相對于目前檔案而不是相對于包根(如$(find PKG))引用啟動或yaml檔案。

常用标簽解析

<param>

定義要在參數伺服器上設定的參數。可以指定textfile、binfile或command屬性來設定參數值,除了值<param>标記可以放在<node>标記中,在這種情況下,該參數被視為私有參數。

還可以使用<param>标記中的~param文法(請參閱ROS names)跨組或節點設定私有參數。聲明的參數将被設定為<node>标記中的本地參數,這些标記位于相同的範圍内(即group或ns标記)。

屬性 描述
name 參數名稱
value 參數值
type 指定參數類型。str int double bool yaml (optional) 其中bool用“true”"false"辨別
textfile=“$(find pkg_name)”/path/file.txt (optional) 檔案的内容将被讀取并作為字元串存儲。盡管強烈建議您使用包相對$(find)/file.txt文法指定位置,但該檔案必須在本地可通路。
binfile="$(find pkg-name)/path/file" (optional) 檔案的内容将被讀取并存儲為base64編碼的XML-RPC二進制對象。
command output将被讀取并以字元串方式儲存

<rosparam>

标簽允許使用rosparam YAML檔案從ROS參數伺服器加載和轉儲參數。它還可以用于删除參數。标記可以放在标記中,在這種情況下,該參數被視為私有名稱。

<rosparam command="load" file="$(find pkg-name)/path/foo.yaml">
           

<arg>

<arg>允許您通過指定通過指令行傳遞、通過<include>傳遞或為更進階别檔案聲明的值來建立更多可重用和可配置的啟動檔案。Args不是全局的。arg聲明特定于單個啟動檔案,非常像方法中的本地參數。您必須顯式地将arg值傳遞給包含的檔案,這與在方法調用中一樣。

屬性 描述
name 參數名
default (optional) 預設參數的值,不可以與value屬性一起用
value 參數值
doc (optional) 描述參數值

附件

其他不常用的可以在wiki檢視

http://wiki.ros.org/roslaunch/XML

ros