vscode開發ROS(12)-launch文件解析


爲什麼需要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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章