<test> 標籤在語法上和 <node> 標籤很相似,他們都是用來指定要運行的 ROS 節點,雖然 <test> 標籤指定的是要運行的測試節點。更多關於測試節點的資訊,請參考 rostest 文件。
<test> 標籤在語法上和 <node> 標籤很相似,他們都是用來指定要運行的 ROS 節點,雖然 <test> 標籤指定的是要運行的測試節點。更多關於測試節點的資訊,請參考 rostest 文件。
這兩個屬性算是比較特別的,所有的標籤都支援這兩個屬性。使用這兩個屬性的標籤,會根據 if/unless 屬性值的運算結果 ("true" 或 "false"),來決定該標籤被引入 (include) 或排除 (exclude)。
使用 <arg> 標籤可以宣告一些 arg 參數,這些參數有點像是 launch 文件裡面的區域變數。除了可以直接在 launch 文件指定參數值之外,還可以從命令列或是 <include> 標籤帶入參數值,讓 launch 文件能夠更加靈活的配置與運用。
此 <machine> 標籤可以用來宣告一台設備,以便可以在這台設備上啟動節點。若你只要在本地端啟動所有的節點,就不需要使用到此標籤。這個 <machine> 標籤主要用來宣告遠端設備的 SSH 登入和環境變數等設定。
使用 <remap> 標籤可以對一個名稱進行重新映射 (remapping),有點像是把一個名稱改為另外一個名稱,在某些情況下是很方便的小技巧。舉例來說,有一個節點訂閱或發佈一個主題,但是簡單的透過 <remap> 標籤的設定,就可以讓這個節點實際訂閱或發佈到另外一個主題。
可以使用 <node> 標籤來指定你想要啟動的節點,這是最常使用的 roslaunch 標籤。在使用 <node> 標籤時,有一點必須要特別注意,就是 roslaunch 不保證節點的啟動順序,也就是節點不一定會依照在 Launch 文件中編排的順序來啟動。這是可以理解的,因為節點的初始化需要一些時間,而每個節點初始化的時間不一樣,roslaunch 從程式外部無法得知節點初始化的狀況。所以,必須自行確保撰寫的 Launch 文件夠嚴謹,不管節點以任何的順序執行都要能夠正常啟動。
使用 roslaunch 啟動節點時,預設所有節點都使用相同的 Terminal 視窗。若要開啟新的 Terminal 視窗來啟動節點,可以使用 <node> 標籤的 launch-prefix 屬性。如下所示,依據使用的 Terminal 來做設定。
當你想要把設定套用在一組節點上的時候,使用 <group> 標籤將會方便許多。它具有 ns 屬性,可以讓你將這組節點放到個別的命名空間中。另外,還可以使用 <remap> 標籤,對整組節點套用重新映射的設定。
使用 <include> 標籤可以在目前的 Launch 文件中,匯入另一個 Launch 文件。可以依照各種功能來撰寫不同的 Launch 文件,再靈活地透過 <include> 標籤組合這些 Launch 文件。不同的功能匯入不同的 Launch 文件,就能以想要的功能組合來啟動節點。以下就來說明 <include> 標籤要如何使用。
在 roslaunch 的標籤中,有兩個標籤可以用來配置 Parameter Server 的參數:<param> 和 <rosparam>。兩者雖然都可以用來配置參數,但是功能上還是有些不同。下面將要介紹 <rosparam> 標籤如何使用,至於 <param> 標籤的使用,可以參考《roslaunch: <param> 標籤的用法》。
我們常常會在 Parameter Server 設置一些參數,當節點在執行的時候,讓節點依據不同的參數設定而做出不同的行為。這個時候我們會用到的就是這個 <param> 標籤,這個標籤可以讓我們在 Launch 文件中配置 Parameter Server 中的參數。以下就來講講要如何使用 <param> 標籤。
有時候我們會需要在作業系統的環境變數裡面設置一些參數,當程式在執行的時候,可以讀取這些環境變數,依據環境變數不同的設定值,讓程式執行不同的動作。同時,我們又希望這些自訂的環境變數,只有在我們設置的範圍內可見,也就是僅對我們的程式有作用,對範圍外的程式則沒有效果,這是為了避免影響其他程式的執行。這個時候就可以使用 roslaunch 的 <env> 標籤來實現。
在 roslaunch 的 XML 標籤中,沒有可以用來呼叫 service 的標籤。但是,有些呼叫 service 的動作,想要添加到 Launch 文件中自動執行,該怎麼做呢?網路上有高手提供了一個可行的做法,經過簡單的實測,確實可以使用。下面大致說明一下做法,文章最末的參考資料裡面有相關的連結可以參考。
當我們需要啟動多個節點的時候,若使用 rosrun 來啟動每個節點,就必須開啟多個 Terminal 窗口來執行各個節點。如果只有一兩個節點需要啟動,這種方式或許還可以接受,但是如果要啟動的節點非常多,這種方式就很不方便了。
因此,ROS 提供另一種啟動節點的方式。把要啟動的節點列在 Launch 文件中,然後再使用 roslaunch 指令來執行這個 Launch 文件。roslaunch 就會把所有列在 Launch 文件裡面的節點一一啟動,就不需要手動開啟多個 Terminal 窗口來啟動每個節點了。
簡單的說,rosrun 一次只能啟動一個節點,roslaunch 一次可以啟動多個節點。若要使用 roslaunch 一次啟動多個節點,會有兩件事情要做,一是撰寫一個 Launch 文件,二是執行 roslaunch 指令,也就是這篇文章接下來要介紹的主題。