爲什麼需要launch文件
1, 不知道各位小夥伴學習到現在, 有沒有發現一個問題, 就是每次執行ROS程序時, 需要啓動多個終端, 每個終端去手動輸入命令運行節點. 是不是很麻煩? 而且目前來說, 節點個數還不是很多, 在大工程項目裏, 如果一個一個節點手動啓用的話, 是不是很不靠譜. 那麼, 有麼有什麼方法可以一次性啓動呢?
2, 答案是: Yes!. 這個就是今天的主角, launch文件. 可以通過配置launch文件, 一次打開多個節點, 這就很方便.
什麼是launch文件
launch文件類似xml文檔, 採用標籤描述每個元素的內容.
給一個例子:
在在ros_test目錄下, 新建一個launch文件夾. 在launch文件夾中, 新建msg.launch
文件, 粘貼下面的代碼.
<launch>
<node pkg="ros_test" name="listener1" type="listener"/>
<node pkg="ros_test" name="talker1" type="talker"/>
</launch>
在終端使用roslaunch命令, 運行該腳本, 則會同時啓動listener節點和talker節點.
roslaunch ros_test msg.launch
解析
<launch>
...
</launch>
此爲launch文件的根元素. 固定用法, 每個文件都有.
<node pkg="ros_test" name="listener1" type="listener"/>
<node>
爲標籤, 這裏有三個屬性pkg name type
pkg
: 爲節點所在的包名稱.
name
: 爲節點運行名稱, 此處會覆蓋ros::init()那個名稱
type
: 此處爲可執行文件名稱.
更多launch文件元素介紹
<node>
. 節點. 標*爲不可省略屬性.
標籤 | 解釋 | 示例 |
---|---|---|
*pkg | 在哪個包 | pkg = “turtlesim” |
*type | 可執行文件 | type = “turtlesim_node” |
*name | 節點名稱,覆蓋ros::init() | name = “sim” |
args | 將參數傳遞給節點 | args =“arg1 arg2 arg3” |
machine | 在指定的機器上啓動節點 | machine =“machine-name” |
respawn | 如果退出節點,則自動重新啓動節點 | espawn =“true”(默認值:False) |
respawn_delay | 如果respawn爲true,請在嘗試重新啓動之前檢測到節點故障後等待respawn_delay秒。 | respawn_delay =“30” |
required | 如果節點死亡,則殺死整個roslaunch | required =“true” |
ns | 在’foo’命名空間中啓動節點 | ns =“foo” |
clear_params | 在啓動之前刪除節點的私有命名空間中的所有參數 | clear_params =“true |
output | 如果’screen’,節點的stdout / stderr將被髮送到屏幕。如果是’log’,stdout / stderr輸出將被髮送到$ ROS_HOME / log中的日誌文件,stderr將繼續發送到屏幕。默認爲“log”。 | output =“log / screen” |
cwd | 如果是“node”,則節點的工作目錄將設置爲與節點的可執行文件相同的目錄。在C Turtle中,默認爲’ROS_HOME’ | cwd =“ROS_HOME” |
launch-prefix | 用於添加到節點的啓動參數的命令/參數。這是一個強大的功能,使您可以啓用gdb,valgrind,xterm,nice或其他方便的工具 | launch-prefix = “參數” |
<param>
標籤:修改運行中的參數(ROS有一個參數服務器).標*爲不可省略.
標籤 | 解釋 | 示例 |
---|---|---|
*name | 參數名稱/命名空間 | name = “output_frame” |
*value | 定義參數的值 | value = “odom” |
<arg>
標籤: 標記允許通過指定經由命令行傳遞的值,存在單個啓動文件,非常類似於方法中的本地參數,必須將arg值顯式傳遞給包含的文件,就像在方法調用中一樣。標*爲不可省略.
標籤 | 解釋 | 示例 |
---|---|---|
*name | 參數名稱 | name = “name” |
value | 定義參數的值,不能與默認屬性組合使用 | value = “odom” |
default | 參數的默認值。不能與value屬性結合使用。 | default= “odom” |
<include>
標籤: 嵌套重用,包含其他的launch文件,與C語言的include幾乎一樣。
<remap>
標籤: 重映射機制。例如turtlebot的鍵盤控制速度節點可能是/turtlebot/cmd_vel,而我們自己的機器人速度訂閱的話題是/cmd_vel,使用remap可以很好的解決該問題:
<remap from “/turtulebot/cmd_vel” to “cmd_vel” />
後記
更多機器人ROS相關,公-衆-號搜索 ”機器人小站"。
參考:http://wiki.ros.org/