當你想要把設定套用在一組節點上的時候,使用 <group> 標籤將會方便許多。它具有 ns 屬性,可以讓你將這組節點放到個別的命名空間中。另外,還可以使用 <remap> 標籤,對整組節點套用重新映射的設定。
標籤說明
- <group>
此標籤用來將一組節點設在同一個群組中,也可以設定命名空間,將這組節點放到同一個命名空間中使用。有下列屬性可以使用:
ns="namespace" (optional) : 將一組節點設定到指定的命名空間中。命名空間可以使用全局名稱來指定,或是使用相對名稱來指定,但是不鼓勵使用全局名稱來指定。
clear_params="true|false" (optional) : 先前設置在此 <group> 標籤所指定命名空間中的參數,在啟動之前將會被全部刪除。此功能非常危險,應謹慎使用。使用時必須指定 ns。
在 <group> 標籤中,還可以內嵌下列標籤:
由於 <group> 標籤等效於頂層的 <launch> 標籤,因此可以簡單的做為一個容器 (container),將其他標籤置於其中。換句話說,可以像在 <launch> 標籤中一樣來使用其他標籤。
<node> : 啟動一個節點。
<param> : 設定 Parameter Server 上的一個參數。
<remap> : 宣告一個名稱的重新映射 (remapping)。
<machine> : 宣告一台設備,可用於啟動該設備上的節點。
<rosparam> : 透過 rosparam 指令來設置 Parameter Server 上的參數。
<include> : 匯入其他 roslaunch 文件。
<env> : 設置一個環境變數。
<test> : 啟動一個測試節點 (參照 rostest)。
<arg> : 宣告一個 arg 參數。
注意事項:
- 在 <group> 標籤中,使用 <arg> 和 <env> 標籤設定的 arg 參數和環境變數,只有在 <group> 範圍內才有作用,在 <group> 範圍外就沒有作用了。
- 而 <param> 標籤則因為是設定在 Parameter Server 上,所以即使在 <group> 標籤範圍外,已經設定在 Parameter Server 上的參數仍有作用。
實例說明
下面舉一個例子來做說明。我們在 mypackage 套件裡面的 launch 目錄,新增一個簡單的 launch 文件來做測試。
範例:
此範例使用兩個 <group> 標籤,分別執行兩個 turtlesim_node 和 turtle_teleop_key 節點。兩個 <group> 標籤中的 <node> 標籤完全一樣,透過指定 <group> 標籤的 ns 屬性,讓兩個 <group> 標籤中的節點位於不同的命名空間下,從而避免了命名重複的問題。
-- group.launch
<launch> <group ns="turtlesim1"> <node pkg="turtlesim" type="turtlesim_node" name="turtlesim" /> <node pkg="turtlesim" type="turtle_teleop_key" name="teleop_key" launch-prefix="gnome-terminal -e" /> </group> <group ns="turtlesim2"> <node pkg="turtlesim" type="turtlesim_node" name="turtlesim" /> <node pkg="turtlesim" type="turtle_teleop_key" name="teleop_key" launch-prefix="gnome-terminal -e" /> </group> </launch> |
執行 roslaunch mypackage group.launch 之後,會出現兩個新的視窗各自有一隻小海龜。另外,還會開啟兩個新的 Terminal 視窗,可以分別用來控制兩隻小海龜。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgof6ULnp8N0I-yI3HEKqlkc_bs7ax1OtPnBblHXza0ei-IK9B0bIQimKuPq5w6e1BPncEkEuXSwsiQ2-38KGypGEeYSdteIREQIBjmh5D8jXJfKloaOaIeyZXN7DFYtd4R1jsFNiIU_H4/s0/group.png)
參考資料
- roslaunch: <group> tag
http://wiki.ros.org/roslaunch/XML/group
沒有留言:
張貼留言