ROS節點管理 launch 檔案
阿新 • • 發佈:2021-08-20
第四章 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>