介紹MAVROS、Gazebo 和 Firmware SITL 在無人機模擬中的作用。這三者通常會被整合在一起,特別是在使用 ROS (機器人作業系統) 進行無人機上層控制算法開發時,形成一個強大且真實的模擬環境。
🚀 無人機模擬系統的核心組成
這三者在模擬中扮演的角色可以用一個流程來理解:Firmware SITL 模擬無人機的真實飛控硬體和底層邏輯,Gazebo 提供虛擬世界和物理模型,而 MAVROS 則充當 ROS 上層控制程式和飛控固件之間的通訊橋樑。
1. MAVROS (MAVLink ROS)
MAVROS 是一個 ROS 軟體包,它是 ROS 與 MAVLink 協議之間不可或缺的翻譯官和橋樑。
📘 MAVLink 協議: 一種輕量級的訊息傳輸協議,專門用於無人機 (UAV) 與地面控制站 (GCS) 或機載電腦之間的通訊,例如傳輸狀態資料、感測器讀數和控制指令。
🌉 核心功能:
它將 ROS 中發布的控制指令(如期望位置、速度或姿態)轉換為 MAVLink 訊息,並傳送給飛控固件 (如 PX4 或 ArduPilot)。
它將飛控固件傳回的 MAVLink 訊息(如無人機的即時位置、電池狀態、飛行模式、感測器數據等)轉換為 ROS 話題 (Topics) 和 服務 (Services),供 ROS 中的其他上層程式訂閱和使用。
💡 重要性: MAVROS 讓開發者可以在 ROS 環境中,使用熟悉的 ROS 介面和工具來開發複雜的自主飛行算法,而無需直接處理底層的 MAVLink 協議細節。
2. Gazebo (3D 物理模擬器)
Gazebo 是一個功能強大的 3D 物理模擬器,它提供了一個高逼真度的虛擬環境,用於測試和開發機器人應用,包括無人機。
🌍 虛擬環境: 提供一個可視化的 3D 世界,可以建立複雜的室內或室外場景,並加入障礙物、地形、建築物等。
⚛️ 物理引擎: 具備強大的物理引擎(如 ODE, Bullet, Simbody, DART),能夠準確地模擬無人機的動力學、空氣動力學、重力和與環境的碰撞等物理現象。
🛰️ 感測器模型: 模擬無人機上各種感測器(如 GPS、IMU、相機、雷射雷達等)的數據輸出,這些虛擬數據會被傳送給飛控固件進行處理,就像真實感測器一樣。
💡 重要性: Gazebo 模擬了無人機的「機身」和「現實世界」,允許開發者在安全、可重複的虛擬環境中測試控制程式,而不需要真實的硬體或擔心造成損壞。
3. Firmware SITL (Software-In-The-Loop)
SITL(Software-In-The-Loop,軟體在環)是一種模擬技術,它允許無人機的真實飛控固件(例如 PX4 或 ArduPilot 的程式碼)直接在主機電腦上執行。
💻 固件執行: 飛控固件的程式碼不是編譯到實體飛控板上,而是編譯為一個可以在 Linux 或 Mac OS 等作業系統上執行的原生應用程式。
🔁 模擬迴路:
輸入: SITL 固件會接收來自 Gazebo 模擬的感測器數據(如虛擬 IMU、GPS 數據)。
處理: SITL 固件執行其內部所有的導航、控制、姿態估計、飛行模式邏輯等,就如同在真實飛控板上一樣。
輸出: SITL 固件計算出馬達的 PWM 輸出值,並將這些值傳送回 Gazebo。
💡 重要性: SITL 模擬了無人機的「大腦」,這讓開發者可以測試和除錯整個飛控程式碼和底層控制邏輯,而無需實體硬體。
它是整個模擬環境中最接近真實飛控的部分。
📝 總結與整合流程
在無人機的 SITL 模擬中,它們的整合流程如下:
SITL 固件 在電腦上運行,模擬飛控的邏輯。
Gazebo 提供 3D 環境和無人機的物理模型,並將虛擬感測器數據傳送給 SITL 固件。
MAVROS 連接 ROS 應用程式和 SITL 固件,通過 MAVLink 協議交換數據。
ROS 上層控制程式 (例如使用 C++ 或 Python 編寫的自主導航算法) 通過 MAVROS 向 SITL 固件發送控制指令。
SITL 固件計算後將馬達指令發送回 Gazebo,Gazebo 根據物理模型更新無人機在虛擬世界中的位置和姿態。
Gazebo 將新的虛擬感測器數據發送回 SITL 固件,形成一個完整的閉環控制系統。
這種整合是進行無人機高級算法(如路徑規劃、避障、編隊飛行)開發和測試的標準且高效的方式。