[輕鬆打造自己的ROS Jetbot] 單元4 : 超簡單Launch檔撰寫,快速啟動Jetbot ROS的馬達、相機和LiDAR
<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 留言