<source : unflash>

一、前言

當所有功能節點經測試都正常後,接下來你一定會希望透過Launch檔,一次開啟必要的節點。網路上的Launch教學,不是寫起來沒感覺(因為手邊沒硬體),就是太複雜,難以上手。

如果你也是以Jetson nano實作機器人,接下來,我將以最簡單的launch檔寫作和你分享如何一次開啟Jetbot上的馬達、相機、Lidar。


二、Launch檔撰寫要點

初學ROS時,要寫Launch檔的確有點小小複雜,然而,實際上只要掌握基本架構,未來就可以隨心所欲依照需求來發揮了。


要點1.請在指定的資料夾中建立Launch資料夾,在新建一個launch檔文件

筆者規劃這個launch檔可以在 jetbot_ros 套件中,因此建立了Launch資料夾,擺放 jetbot_bringup.launch的文件檔。如下圖所示。





要點2. 第一行要先宣告<?xml version="1.0">

Launch檔是以xml的格式撰寫,因此第一行一定要撰寫 <?xml version="1.0"> ,可以想像成寫C++時,要載入相關標頭檔 ; 寫Python時,要import相關模組。

筆者曾經漏了這行,所以不管怎麼打 roslaunch的指令,都沒有反應。


要點3. 所有內容包在<launch>...</launch>

如同要點1所提,launch檔是以xml格式撰寫,所以就像撰寫網頁般所有的內容都要寫在<launch>...</launch>的標籤中。


要點4. 一一撰寫所需節點。

節點寫入的必備元素為 name、pkg、type,代表意義如下 :

  • pkg為套件包名稱。
  • type為可執行檔案名稱。
  • name為節點名稱,會覆蓋原本node程式中init()賦予的名稱,當名稱不同時。

假如你要寫的是啟動相機節點,撰寫的方式如下 :

<node name ="jetbot_camera" pkg ="jetbot_ros" type="jetbot_camera"/>

這裡要留意2件事 :

1."jetbot_camera",引號中不要有跟檔名無關的空白或字元,這樣會被系統視為有錯,無法啟動launch檔。

2.如果你的節點是用python撰寫,記得 type的位置輸入方式為 "jetbot_camera.py"。此外,別忘了開啟這個python檔的執行權限。

ex. type="jetbot_camera.py"


要點5.引入其他launch檔的寫法

以lidar為例,套件包已經有完整的launch檔,就無須再多事一個一個撰寫節點,直接把launch檔寫進去就行了。

寫法格式如下 :

<include file="(find 套件名稱)/路徑/launch檔名">


舉例如下 :

<include file="(find ydlidar)/launch/lidar.launch">


要點6. 再檢查一次

檢查有沒有誤植的地方,若無的話,本例的撰寫方式如下。存檔後,即可用roslaunch指令執行此launch檔。最後,貼心小提醒,記得要給你的各個node相關註解,未來要修改時,比較容易查找。寫法像是 <!-- your node -->


關於launch檔,若你想知道更多,可參考 [ROS Husky主題實作] 單元4 : 啟動多個節點的 LAUNCH 檔實作 或 直接前往 ROS wiki : Launch 查閱。


三、測試Launch檔

接著,我們讓機器人的馬達、相機和LiDAR啟動,並可用鍵盤控制機器人移動,在本機端的RVIZ顯示Hector-SLAM的建圖結果。順序如下 :


在SBC(Jetbot)端執行 Launch 檔

$ roslaunch jetbot_ros jetbot_bringup.launch


在SBC端再開一個Terminal來進行Jetbot控制。

$ rosrun jetbot_ros teleop_key.py


在本機端開啟Hector-SLAM的Launch檔

$ roslaunch hector_slam_launch slam.launch

---

參考資料 :

0 留言