1. 程式人生 > >ROS之launch文件的編寫

ROS之launch文件的編寫

令行 獲取 nod 其他 num 信息 blank 定義 替換

摘自:https://www.cnblogs.com/zjiaxing/p/5542614.html ROS提供了一個同時啟動節點管理器(master)和多個節點的途徑,即使用啟動文件(launch file)。事實上,在ROS功能包中,啟動文件的使用是非常普遍的。任何包含兩個或兩個以上節點的系統都可以利用啟動文件來指定和配置需要使用的節點。通常的命名方案是以.launch作為啟動文件的後綴,啟動文件是XML文件。一般把啟動文件存儲在取名為launch的目錄中。 每個XML文件都必須要包含一個根元素。根元素由一對launch標簽定義:<launch> … <launch>元素都應該包含在這兩個標簽之內。

節點屬性之節點元素的形式:

<node pkg=”package-name” type=”executable-name” name=”node-name”/>在節點標簽末尾的斜杠“/”是必須的,但很容易忘。你也可以這樣顯式地給出結束標簽: <node pkg=”…”type=”…” name=”…”></node> 如果該節點有子節點,例如 remap 或者 param 元素,那麽該顯式結束標簽是必不缺少的。還有就是name屬性給節點指派了名稱,它將覆蓋任何通過調用 ros::int來賦予節點的名稱。在默認狀態下,從啟動文件啟動節點的標準輸出被重定向到一個日誌文件中,而不是在制臺顯示。該日誌文件的名稱是: ~/.ros/log/run_id/node_name-number-stout.log 其中,run_id 是節點管理器(master)啟動時生成的一個唯一標示符。

節點屬性之顯示屬性:

某個單獨的節點在控制臺中輸出信息,只需在節點元素中配置:output=”screen”配置了該屬性的節點會將標準輸出顯示在屏幕上而不是記錄到日誌文檔。

節點屬性之復位屬性:

對於每個節點,設置復位屬性為真 respawn=”true”,這樣當節點停止的時候,roslaunch會重新啟動該節點。比如在某個節點因為軟件崩潰或硬件故障以及其他原因導致過早退出系統的時候會起到作用。 節點屬性之必要節點:當一個節點被聲明為必要節點即 required=”true”終止的時候,roslaunch 會終止所有其他活躍節點並退出。比如在依賴控制臺的機器人遙控導航中,關閉了該遠程控制節點所在的窗口,roslaunch將會終止其他節點,然後退出。

節點屬性之命名空間:

ns=”namespace”,前提是節點的代碼在創建 ros::Pbulisher 和 ros::Subccriber 對象時使用了像 turtle1/pose 這樣的相對名稱 (而不是/turtle1/pose 這樣的全局名稱)。同樣,啟動文件中的節點名稱是相對名稱。例如<node name="turtlesim_node" pkg="turtlesim " type="turtlesim_node" ns="sim1" />而不能是 node name="/turtlesim_node" ,可以這麽不準確的理解:兩只連體小龜,他們做一件事是同時在做,比如讓他們以不同的速度前進,他們做不到,若做手術分開,把他倆放在不同的房間(命名空間)他倆真正地獨立起來,這樣每個小龜可以接受不同的命令去做事,而且互不幹擾。動文件默認命名空間是全局命名空間“/”,因此,節點的默認命名空間就解析為/sim1,所以對應的全局名稱即/sim1/turtlesim_node。

名稱重映射:

重映射是基於替換的思想,每個重映射包含一個原始名稱和一個新名稱。每當節點使用重映射中的原始名稱時,ROS客戶端庫就會將它默默地替換成其對應的新名稱。例如,運行一個 turtlesime 的實例, 如果想要把海龜的姿態數據發布到話題/tim 而不是/turtle1/pose,就可以使用如下命
令:rosrun turtlesim turtlesim_node turtle1/pose:=tim 通過啟動文件的方式,只需在啟動文件內使用重映射(remap)元素即可:<remap from=”turtle1/pose”to ”tim”/>

包含其他文件:

如果想在啟動文件中包含其他啟動文件的內容( 包括所有的節點和參數),可以使用包含(include)元素<include file=”$(find package-name)/launch-file-name”>由於直接輸入路徑信息很繁瑣且容易出錯,大多數包含元素都使用查找(find)命令搜索功能包的位置來替代直接輸入路徑。

啟動參數:

roslaunch還支持啟動參數,有時也簡稱為參數甚至args。在ROS中prarmeter和argument 是不同的,雖然翻譯一樣。parameter是運行中的ROS系統使用的數值,存儲在參數服務器(parameter server)中,每個活躍的節點都可以通過 ros::param::get 函數來獲取parameter的值,用戶也可以通過rosparam來獲得parameter的值而argument只在啟動文件內才有意義他們的值是不能被節點直接獲取的。

<arg name=”arg-name” default=”arg-value”/>與 <arg name=”arg-name” value=”arg-value”/>兩者的唯一區別在於命令行參數(roslaunch xx yy.launch dd:=t)可以覆蓋默認值default,但是不能覆蓋參數值 value。用$(arg arg-name)在每個該替換出現的地方,roslaunch 都將它替換成參數值。

ROS之launch文件的編寫