【ROS教程】編寫launch檔案

UnderTurrets發表於2024-08-30

@

目錄
  • 1.launch檔案有哪些標籤
  • 2.node標籤
    • 2.1 必選屬性
    • 2.2 可選屬性
    • 2.3 可選子級標籤
  • 3.include標籤
    • 3.1 必選屬性
    • 3.2 可選屬性
    • 3.3 可選子級標籤
  • 4.remap標籤
    • 4.1 必選屬性
  • 5.param標籤
    • 5.1 必選屬性
    • 5.2 可選屬性
  • 6.rosparam標籤
    • 6.1 必選屬性
    • 6.2 可選屬性
  • 7.group標籤
    • 7.1 可選屬性
    • 7.2 可選子級標籤
  • 8.arg標籤
    • 8.1 必選屬性
    • 8.2 可選屬性
    • 8.3 示例
  • 9.env標籤
    • 9.1 必選屬性
  • 10.全域性示例


1.launch檔案有哪些標籤

標籤 含義
node 指定 ROS 節點,是最常見的標籤
include 用於將另一個 xml 格式的 launch 檔案匯入到當前檔案
remap 話題重新命名
param 在引數伺服器上設定引數
rosparam 從 YAML 檔案匯入引數,或將引數匯出到 YAML 檔案,也可以用來刪除引數
group 可以對節點分組,具有 ns 屬性,可以讓節點歸屬某個名稱空間
arg 用於動態設定引數,可以增強launch檔案的靈活性
env 用於設定環境變數

2.node標籤

2.1 必選屬性

屬性 含義
name="node-name" 節點名稱(在 ROS 網路拓撲中節點的名稱)
pkg="package-name" 節點所屬的包
type="node-type" 節點型別(與之相同名稱的可執行檔案)

2.2 可選屬性

屬性 含義
args="arg1 arg2 arg3" 將引數傳遞給節點
machine="machine-name" 在指定機器上啟動節點
respawn="true| false" 如果節點退出,是否自動重啟
respawn_delay="n" 如果 respawn 為 true, 那麼延遲 N 秒後啟動節點
required="true| false" 該節點是否必須,如果為 true,那麼如果該節點退出,將殺死整個 roslaunch
ns="namespace" 在指定名稱空間中啟動節點
clear_params="true| false" 在啟動前,刪除節點的私有空間的所有引數
output="log| screen" 日誌傳送目標,可以設定為 log 日誌檔案,或 screen 螢幕,預設是 log

2.3 可選子級標籤

  1. <env>
  2. <remap>
  3. <rosparam>
  4. <param>

3.include標籤

3.1 必選屬性

屬性 含義
file="$(find pkg-name)/path/filename.launch" 要包含的檔案路徑

3.2 可選屬性

屬性 含義
ns="namespace" 在指定名稱空間匯入檔案

3.3 可選子級標籤

  1. <env>
  2. <arg>

4.remap標籤

4.1 必選屬性

屬性 含義
from="original-name" 原始話題名稱
to="new-name" 目標名稱

5.param標籤

  • 作為\<node>子級標籤時,相當於私有名稱空間。

5.1 必選屬性

屬性 含義
name="namespace/name" 引數名稱,可以包含名稱空間

5.2 可選屬性

屬性 含義
value="value" 定義引數值,如果此處省略,必須指定外部檔案作為引數源
type="str|int|double|bool|yaml" 指定引數型別,如果未指定,roslaunch 會嘗試確定引數型別

roslaunch 確定引數型別的規則如下:

  • 如果包含 '.' 的數字解析未浮點型,否則為整型
  • "true" 和 "false" 是 bool 值(不區分大小寫)
  • 其他是字串

6.rosparam標籤

6.1 必選屬性

屬性 含義
file="$(find pkg-name)/path/foo.yaml" 載入或匯出到的 yaml 檔案
param="param-name" 引數名稱

6.2 可選屬性

屬性 含義
command="load| dump | delete" 載入、匯出或刪除引數,預設為載入
ns="namespace" 將引數指定到名稱空間

7.group標籤

7.1 可選屬性

屬性 含義
ns="namespace" 將該組節點分配到指定的名稱空間。名稱空間可以是全域性的,也可以是相對的,但不鼓勵使用全域性名稱空間。
clear_params="true|false" 在啟動前刪除組的名稱空間中的所有引數。這個功能非常危險,應該謹慎使用。

7.2 可選子級標籤

  • 其他所有標籤都是其子級標籤

8.arg標籤

8.1 必選屬性

屬性 含義
name="arg-name" 欲設定的引數名稱

8.2 可選屬性

屬性 含義
default="default value" 設定引數的預設值。不能與value屬性結合。
value="value" 設定引數的值。不能與default屬性結合。
doc="description for this arg" 載入、匯出或刪除引數,預設為載入

8.3 示例

<launch>
  <!-- declare arg to be passed in -->
  <arg name="hoge" /> 

  <!-- read value of arg -->
  <param name="param" value="$(arg hoge)"/>
</launch>

9.env標籤

9.1 必選屬性

屬性 含義
name="environment-variable-name" 所設定的環境變數的名字
value="environment-variable-value" 引數說明

10.全域性示例

<launch>
  <!-- local machine already has a definition by default.
       This tag overrides the default definition with
       specific ROS_ROOT and ROS_PACKAGE_PATH values -->
  <machine name="local_alt" address="localhost" default="true" ros-root="/u/user/ros/ros/" ros-package-path="/u/user/ros/ros-pkg" />
  <!-- a basic listener node -->
  <node name="listener-1" pkg="rospy_tutorials" type="listener" />
  <!-- pass args to the listener node -->
  <node name="listener-2" pkg="rospy_tutorials" type="listener" args="-foo arg2" />
  <!-- a respawn-able listener node -->
  <node name="listener-3" pkg="rospy_tutorials" type="listener" respawn="true" />
  <!-- start listener node in the 'wg1' namespace -->
  <node ns="wg1" name="listener-wg1" pkg="rospy_tutorials" type="listener" respawn="true" />
  <!-- start a group of nodes in the 'wg2' namespace -->
  <group ns="wg2">
    <!-- remap applies to all future statements in this scope. -->
    <remap from="chatter" to="hello"/>
    <node pkg="rospy_tutorials" type="listener" name="listener" args="--test" respawn="true" />
    <node pkg="rospy_tutorials" type="talker" name="talker">
      <!-- set a private parameter for the node -->
      <param name="talker_1_param" value="a value" />
      <!-- nodes can have their own remap args -->
      <remap from="chatter" to="hello-1"/>
      <!-- you can set environment variables for a node -->
      <env name="ENV_EXAMPLE" value="some value" />
    </node>
  </group>
</launch>

本文由部落格一文多發平臺 OpenWrite 釋出!

相關文章