1. 程式人生 > 其它 >ROS節點管理 launch 檔案

ROS節點管理 launch 檔案

第四章 ROS執行管理

4.1 ROS節點管理 launch 檔案

之前的文章中我們已經介紹過了 launch 檔案的基本使用方法,本節的內容為 launch 的進階使用方法

4.1.1 launch 檔案的標籤表

標籤名 標籤作用
launch <launch>標籤是所有 launch 檔案的根標籤,充當其他標籤的容器
屬性 屬性說明
deprecated "棄用宣告",繼續使用會輸出警告日誌所有其它標籤
子集標籤
其他標籤都是都是launch的子級
---
標籤名 標籤作用
node <node>標籤用於指定 ROS 節點,是最常見的標籤,需要注意的是: roslaunch 命令不能保證按照 node 的宣告順序來啟動節點(節點的啟動是多程序的)
屬性 屬性說明
pkg="包名" 節點所屬的包
type="nodeType" 節點型別(與之相同名稱的可執行檔案)
name="nodeName" 節點名稱(在 ROS 網路拓撲中節點的名稱)
args="xxx xxx xxx" (可選) 將引數傳遞給節點
machine="機器名" 在指定機器上啟動節點
respawn="true | false" (可選) 如果節點退出,是否自動重啟
respawn_delay=" N" (可選) 如果 respawn 為 true, 那麼延遲 N 秒後啟動節點
required="true | false" (可選)
該節點是否必須,如果為 true,那麼如果該節點退出,將殺死整個 roslaunch
ns="xxx" (可選) 在指定名稱空間 xxx 中啟動節點
clear_params="true | false" (慎用) 在啟動前,刪除節點的私有空間的所有引數
output="log | screen" (可選) 日誌傳送目標,可以設定為 log 日誌檔案,或 screen 螢幕,預設是 log,但常用 screen
子集標籤
env 環境變數設定
remap 重對映節點名稱
rosparam 引數設定
param 引數設定
---
標籤名
標籤作用
include include標籤用於將另一個 xml 格式的 launch 檔案匯入到當前檔案
屬性 屬性說明
file="$(find 包名)/xxx/xxx.launch" 要包含的檔案路徑
ns="xxx" (可選) 在指定名稱空間匯入檔案
子集標籤
env 環境變數設定
arg 將引數傳遞給被包含的檔案
---
標籤名 標籤作用
remap 用於話題重新命名
屬性 屬性說明
from="xxx" 原始話題名稱
to="yyy" 目標名稱
子級標籤
---
標籤名 標籤作用
param <param>標籤主要用於在引數伺服器上設定引數,引數源可以在標籤中通過 value 指定,也可以通過外部檔案載入,在<node>標籤中時,相當於私有名稱空間。
屬性 屬性說明
name="名稱空間/引數名" 引數名稱,可以包含名稱空間
value="xxx" (可選) 定義引數值,如果此處省略,必須指定外部檔案作為引數源
type="str | int | double | bool | yaml" (可選) 指定引數型別,如果未指定,roslaunch 會嘗試確定引數型別,規則如下:1. 如果包含 '.' 的數字解析未浮點型,否則為整型。2."true" 和 "false" 是 bool 值(不區分大小寫)。3.其他是字串
子級標籤
---
標籤名 標籤作用
rosparam <rosparam>標籤可以從 YAML 檔案匯入引數,或將引數匯出到 YAML 檔案,也可以用來刪除引數,<rosparam>標籤在<node>標籤中時被視為私有。
屬性 屬性說明
command="load | dump | delete" (可選,預設 load) 載入、匯出或刪除引數
file="$(find xxxxx)/xxx/yyy...." 載入或匯出到的 yaml 檔案
param="引數名稱" 如字面意思
ns="名稱空間" (可選) 與之前相同
子級標籤
---
標籤名 標籤作用
group <group>標籤可以對節點分組,具有 ns 屬性,可以讓節點歸屬某個名稱空間
屬性 屬性說明
ns="名稱空間" (可選) -
clear_params="true | false" (可選) 啟動前,是否刪除組名稱空間的所有引數(慎用....此功能危險)
子級標籤
---
標籤名 標籤作用
arg <arg>標籤是用於動態傳參,類似於函式的引數,可以增強launch檔案的靈活性
屬性 屬性說明
name="引數名稱" -
default="預設值" (可選) -
value="數值" (可選) 不可以與 default 並存
doc="描述" 引數說明
子級標籤

4.1.2 一些例子

例1:

 <!--launch deprecated= "out of date"-->
 <launch>

    <!-- 啟動的節點-->
    <!-- respawn= "true" 節點關閉後自動重啟-->
    <!-- <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen" respawn="true"/> -->
    <!-- required="true" 節點推出後關閉整個系統 -->
    <!-- <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen" required="true"/> -->
    <!-- ns="NS" 設定節點的名稱空間 -->
    <!-- <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen" ns="NS"/> -->

    <!-- param 使用:向引數伺服器設定參賽-->
    <!-- 格式1: launch 下, node 外-->
    <param name="param_A" type="int" value="100"/>

    <!-- rosparam 使用: 操作引數伺服器資料-->
    <!-- 格式1: launch 下, node 外-->
    <!-- 載入引數-->
    <rosparam command="load" file="$(find launch01_basic)/launch/params.yaml"/>
    <!-- 匯出引數-->
    <!-- <rosparam command="dump" file="$(find launch01_basic)/launch/params_out.yaml"/> -->

 
    <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen">

    <!-- 格式2: launch 下, node 內-->
    <param name="param_B" type="double" value="3.14"/>

    <remap from="/turtle1/cmd_vel"   to="/cmd_vel"/>
    <!-- 格式2: launch 下, node 外-->
    <rosparam command="load" file="$(find launch01_basic)/launch/params.yaml"/>

    </node>
    <!-- 鍵盤控制節點 -->
    <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen" />



</launch>

例2:

<!-- 需要複用 start_turtle.launch -->
<launch>

    <include file="$(find launch01_basic)/launch/start_turtle.launch" />
    <!-- 啟動其他自己需要的節點-->
</launch>

例2:

<launch>
    <rosparam command="dump" file="$(find launch01_basic)/launch/params_out.yaml"/>

    <!-- 刪除引數-->
    <rosparam command="delete" param="bg_B"/>
    

</launch>

例3:

<launch>
    <!-- 啟動兩對烏龜gui 與 鍵盤控制節點-->
    <group ns="A" >
        <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen"/>
        <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen" />

    </group>


    <group ns="B" >
        <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen"/>
        <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen" />

    </group>
</launch>

例4:

<launch>
    <!-- 需求: 演示 arg 的使用,需要設定多個引數,這縣引數使用的是同一個指(小車的長度),怎麼設定?-->
    <!-- <param name="A" value="0.5"/>
    <param name="B" value="0.5"/>
    <param name="C" value="0.5"/> -->

    <arg name="car_width" dafault="0.32"/>
    <param name="A" value="$(arg car_width)"/>
    <param name="B" value="$(arg car_width)"/>
    <param name="V" value="$(arg car_width)"/>

    
</launch>