- 通過
launch
文件以及roslaunch
命令可以一次性啟動多個節點,并且可以設置豐富的參數- 通常存放路徑:工作空間目錄 / launch /
xxx.launch
- launch 文件本質是一個
xml
類型的文件,基本格式如下<launch> <node .../> ## 最重要的標簽 <param .../> <rosparam .../> <include .../> <remap .../> <arg .../> <group> </group> </launch>
- 通常存放路徑:工作空間目錄 / launch /
- _________________
<node>
標簽:指定一個準備運行的ROS節點<node pkg="package_name" type="executable_node" name="node_name" args="$()" respawn="true" output="sceen">
pkg
:節點所在功能包名稱type
:可執行文件的名稱name
:節點運行時的名稱args
:傳遞命令行設置的參數respawn
:異常關閉后是否自動重啟output
:是否將節點信息輸出到屏幕
- _________________
<param>
標簽:實現傳遞參數的功能,運行
時的參數,參數會存儲在參數服務器中<param name="param_name" type="param_type" value="param_value" /> <!-- param 標簽可以嵌入到 node 標簽中,以此來作為該 node 的私有參數 --> <node><param name="param_name" type="param_type" value="param_value" /> </node>
name
:參數名稱type
:參數類型 double,str,int,bool,yamlvalue
:需要設置的參數值
- _________________
<rosparam>
標簽:從參數服務器上加載(load)、導出(dump)和刪除(delete)YAML文件<!-- 加載package_name功能包下的example.yaml文件 --> <rosparam command="load" file="$(find package_name)/example.yaml"> <!-- 導出example_out.yaml文件到package_name功能包下 --> <rosparam command="dump" file="$(find package_name)/example_out.yaml" /> <!-- 刪除參數 --> <rosparam command="delete" param="xxx/param">
command
:功能類型(load、dump、delete)file
:參數文件路徑param
:參數名稱
- _________________
<include>
標簽:和編程語言中的include預處理類似,導入其他launch文件<include file="$(find package_name)/launch_file_name">
file
:文件路徑
- _________________
<remap>
標簽:實現節點名稱的重映射<remap from="turtle1/cmd_vel" to="/cmd_vel" /> <!-- remap 標簽同樣可以嵌入到 node 標簽中,以此來作為該 node 的私有重映射 --> <node><remap from="turtle1/cmd_vel" to="/cmd_vel" /> </node>
- _________________
<arg>
標簽:局部參數,啟動
時的參數,只在launch文件中有意義<arg name="arg_name" default="arg_default" /> <arg name="arg_name" value="arg_value" /> <!-- 命令行傳遞的 arg 參數可以覆蓋 default,但不能覆蓋 value。 -->
- _________________
<group>
標簽:可以將不同的節點放入不同的 namespace<!-- 用法1 --> <group ns="namespace_1"><node pkg="pkg_name1" .../><node pkg="pkg_name2" .../>... </group><group ns="namespace_2"><node pkg="pkg_name3" .../><node pkg="pkg_name4" .../>... </group> <!-- 用法2 --> <!-- if = value:value 為 true 則包含內部信息 --> <group if="$(arg foo1)"><node pkg="pkg_name1" .../> </group><!-- unless = value:value 為 false 則包含內部信息 --> <group unless="$(arg foo2)"><node pkg="pkg_name2" .../> </group> <!--當 foo1 == true 時包含其標簽內部當 foo2 == false 時包含其標簽內部 -->
博客參考鏈接