1. 程式人生 > >ROS中launch file基本介紹

ROS中launch file基本介紹

一 launch file 介紹

在執行ros程式時我們往往需要在不同終端啟動多個不同的節點,這會讓人有些沮喪。幸運的是,ROS 提供了一個同時啟動節點管理器(master)和多個節點的途徑,即使用啟動檔案(launch file)。事實上,在 ROS 功能包中,啟動檔案的使用是非常普遍的。任何包含兩個或兩個以上節點的系統都可以利用啟動檔案來指定和配置需要使用的節點。其基本思想是在一個XML格式的檔案內將需要同時啟動的一組節點羅列出來。

二 啟動檔案的基本組成

1. 最簡單的啟動檔案

最簡單的啟動檔案由一個包含若干節點(<node />)的根元素(<launch /launch>)組成,如下

<?xml version="1.0"?>

<!-- 根元素起始 -->
<launch>

<!-- 節點起始 -->
<node
    pkg="turtlesim"
    type="turtlesim_node"
    name="turtle"
    ns="sim1"
/>
<!-- 節點結束 -->

<!-- 節點起始 -->
<node 
    pkg="turtlesim"
    type="turtle_teleop_key"
    name="teleop"
    ns
="sim1" launch-prefix="xterm -e">
</node> <!-- 節點結束 --> <!-- 節點起始 --> <node pkg="turtlesim" type="turtlesim_node" name="turtle" ns="sim2" /> <!-- 節點結束 --> <!-- 節點起始 --> <node pkg="turtlesim" type="turtle_teleop_key" name="teleop"
launch-prefix="xterm -e" ns="sim2">
</node> <!-- 節點結束 --> </launch> <!-- 根元素結束 -->

新建一個.launch檔案,內容複製過去之後直接使用命令roslaunch example.launch即可執行,結果如下:
這裡寫圖片描述

2. 節點元素的屬性

每個節點元素由三個必須的屬性:

  • pkg
    該節點屬於哪個包,相當於rosrun命令後面的第一個引數
  • type
    可執行檔案的名字,rosrun命令的第二個引數
  • name
    該節點的名字,相當於程式碼中ros::int的命名資訊,有了它程式碼中的名稱會被覆蓋。

其他屬性:

  • output
    將標準輸出顯示在螢幕上而不是記錄在日誌中
  • respawn
    請求復位,當該屬性的值為respawn="true"時,roslaunch會在該節點崩潰時重新啟動該節點
  • required
    必要節點,當該值為required="true"時,roslaunch會在該節點終止時終止其他活躍節點。
  • 啟動字首
    在啟動命令加上字首。例如當其設定為launch-prefix="xterm -e"時,效果類似於xterm -e rosrun X X。也就是為該節點保留獨立的終端。
  • ns
    在名稱空間中啟動節點。
  • 重對映
    使用方法remap from="original-name(turtle/pose)"to"new-name(tim)"
  • 包含其他檔案include file="path to launch file"
    在啟動檔案中包含其他啟動檔案的內容(包括所有的節點和引數),可使用如下命令使路徑更為簡單include file="($find package-name)/launch-file-name"
  • 啟動引數(launch arguments)
    為了使啟動檔案便於配置,roslaunch還支援啟動引數,有時也簡稱為引數甚至args,其功能有點像可執行程式中的區域性變數。
    宣告引數:arg name="arg-name" 然而這樣的宣告並不是必須的(除非你想要給它賦值或設定為預設值,見後續內容),但是這是一個好的做法,因為這樣能使讀者比較清楚啟動檔案需要哪些引數
    引數賦值:
    roslaunch package-name launch-file-name arg-name:=arg-value
    <arg name=”arg-name” default=”arg-value”/>
    <arg name=”arg-name” value=”arg-value”/>

    獲取引數:一旦引數值被宣告並且被賦值,你就可以利用下面的arg 替換(arg substitution)語法來使用該引數值了:$(arg arg-name)每個該替換出現的地方,roslaunch 都將它替換成引數值。在示例中,我們在 group 元素中的 if 屬性使用了一次 use_sim3 引數。
  • 建立組
    待續