這個系列文寫到這裡,理論上利用前面介紹的 ROS 基本用法,搭配前人們為各廠牌無人機製作的驅動程式,其實就可以直接開始寫程式控制無人機了。
但是畢竟不是每個人家裡都有一台無人機,所以在開始料理無人機之前,先來介紹接下來這幾篇的主角: Gazebo 機器人模擬器。
Gazebo 是一個開源的 3D 機器人模擬器,由非營利公司 Open Robotics 開發,這間公司同時也是 ROS 系統的開發商。由於是同一間公司的產品,Gazebo 可以與 ROS 無縫整合,使得 ROS 開發者可以在 Gazebo 上進行機器人軟體的測試與驗證,不需要擔心碰到機器人沒電、電腦和機器人無法連線或是機器人撞壞摔爛的情況,整個開發過程體驗更加愉快。
如果當初是安裝 Desktop-Full(建議選項)的話,那麼相應版本 Gazebo (N 版的 ROS 搭配的是 Gazebo 11)也會一起安裝好。
直接在終端機輸入 gazebo
就會直接啟動 Gazebo 主程式:
$ gazebo
如果沒有的話,可以參考官方的安裝步驟。
簡單的介面操作:
Gazebo 本身就是一個可以獨立運行的模擬器軟體,可以透過圖形介面的左側工具列來插入、建立或修改模擬環境中的 3D 模型。
不過在這個系列文中,我要介紹的是透過 ROS 的指令來使用 Gazebo 的方法。這種做法的好處是可以根據開發者的需求來定義模型與場景、設定機器人的行為、處理感測器的資料等,真正意義上地模擬真實世界中機器人的任務情境。
在一個 ROS-Gazebo 專案中,目錄內通常會包含以下幾個部份:
launch
(啟動目錄):
在 Day 6 提到 roslaunch
是用來啟動一個套件中多個節點的工具,在大型的 ROS 專案中,通常都會需要同時啟動多個節點,並且為這些節點設定許多參數。例如要讓機器人執行自主導航任務時,除了產生機器人的節點之外,還要啟動動作控制、定位、讀取感測器、建立地圖等套件內的節點們。
而啟動檔(.launch
檔)就是給 roslaunch
用來啟動多個節點、設定參數、載入環境變數的配置文件。對於我們現在要做的 Gazebo 模擬,啟動檔會負責啟動 Gazebo 模擬器、載入指定的模型檔、世界檔,並啟動與無人機控制相關的 ROS 節點。
models
(模型目錄)或 urdf
(機器人目錄):
models
目錄用來放置定義模型性質的模型描述檔(.sdf
檔),以及模型的 3D 檔案。SDF(Simulation Description Format)是 Gazebo 用來將模型呈現在模擬環境中的一種檔案格式。而 Gazebo 支援的 3D 模型檔案類型有 .dae
和 .stl
,這些模型檔案是用來呈現場景中的物件外觀。
URDF(Unified Robot Description Format),這類型的檔案在 ROS 中專門用來描述機器人的結構、運動關節和感測器的設定。
SDF 和 URDF 這兩種格式都可以用來描述機器人,前者是 Gazebo 模擬用的格式,而 URDF 則是 ROS 控制的格式。而且兩者文件編寫方式很接近,之後會著重在 SDF 的部分。
world
(世界目錄):
世界檔(.world
檔)定義了 Gazebo 模擬中的世界環境。這個檔案描述了模擬場景中的所有物體,包括地形、靜態物件(如牆壁、障礙物)、燈光、攝影機,以及機器人模型的初始位置。
如果各位還記得 Day 5 用來示範安裝套件的 Two wheeled robot 的話,可以在 m2wr_description
這個套件中看到 launch
、world
和 urdf
的內容。我在後面的文章會繼續介紹裡面的檔案大概會長什麼樣子,而各位可以搭配現成的套件看看機器人開發者都怎麼寫這些文件。