# 系列文章目錄
` 一共三篇文章`
<a href="https://hackmd.io/@UnmannedVehicle/H1x6IIA31l">Catalogue</a>
<a href="https://hackmd.io/@UnmannedVehicle/S1ZqRhLiye">QGroundControl 與 AirSim 整合指南 - 建立STIL(Software-In-The-Loop)</a>
<a href="https://hackmd.io/@UnmannedVehicle/rJJMLIAnyl">QGroundControl 與 AirSim 整合指南 - 建立地面站控制虛擬飛行器</a>
<a href="https://hackmd.io/@UnmannedVehicle/By2OU8Ah1l">QGroundControl 與 AirSim 整合指南 - STIL on the Raspberry Pi 5</a>
---
> 提示:AirSim、SITL、QGroundControl、PX4、Ardupilot
---
# 前言
`[AirSim] ←→ (TCP) ←→ [PX4 SITL(Software-In-The-Loop)] ←→ (UDP) ←→ [QGroundControl(QGC)]`
這篇文章將探討如何實現 AirSim、PX4 SITL 以及 QGroundControl 之間的數據傳輸與控制。本架構適用於無人機模擬環境,並且可以讓開發者在虛擬場景中測試飛行控制演算法、導航策略與自動化飛行計畫,無需實體硬體即可進行開發與驗證。
| 名詞 | 定義 |
|:--|:--|
| AirSim | 作為無人機的模擬環境,負責渲染虛擬世界並提供物理模擬。 |
| PX4 SITL | 作為飛控系統的核心,透過 TCP 與 AirSim 交換感測器數據與控制指令。 |
| QGC | 作為地面站,透過 UDP 與 PX4 SITL 進行通訊,提供 UI 介面以監控無人機狀態與發送控制指令。 |
**AirSim ↔ PX4 SITL**
AirSim 模擬無人機的物理環境,透過 TCP連接 PX4 SITL,而 PX4 SITL用來模擬 PX4 飛行控制器。
**PX4 SITL ↔ QGroundControl**l
透過UDP通訊,PX4 SITL傳送 MAVLink 訊息給 QGroundControl進行監控,同時PX4 SITL允許QGroundControl發送飛行指令(如起飛、降落、導航)。
這種架構使開發者能夠在軟體環境中模擬完整的無人機任務,並且可以進一步整合 AI、自主導航與影像處理技術,以提升無人機的智能化能力。本文將詳細介紹如何搭建此系統。
---
`提示:以下是本篇文章正文内容,下面案例可供参考`
# 一、安裝Unreal Engine
- 安裝網址:**⭐ [Epic Games 官方網站](https://www.unrealengine.com/)**
**需要登入並建立帳號,才可以安裝Unreal Engine。**
在UE5中,UE5 捨棄了 PhysX 物理引擎(改用 Chaos 物理引擎)。但AirSim 仍然依賴 PhysXVehicles 插件,所以AirSim 官方並不支援 UE5。AirSim 目前最佳支援的版本為 UE4.27。
如果要用UE5進行開發,你需要:
1.在 AirSim/Source/AirSim.cpp 移除 PhysXVehicles 相關的代碼。
2.修改 AirSimGameMode 讓其支援 Chaos。

設置環境變數
```CMD
setx Path "%Path%;C:\Program Files\Epic Games\UE_4.27\Engine\Binaries\Win64"
```
# 二、安裝Visual Studio 2022
- 安裝網址:**⭐ [Visual Studio 2022 官方下載](https://visualstudio.microsoft.com/zh-hant/downloads/)**
**可以嘗試在「開始」選單搜尋:**
```
x64 Native Tools Command Prompt for VS 2022
```
**Unreal Engine 官方僅支援 Microsoft Visual C++ (MSVC) 作為 Windows 平台的編譯器,因此 AirSim 也必須使用 MSVC 編譯。x64 Native Tools Command Prompt for VS 2022 確保 AirSim 使用 MSVC 進行編譯,避免與 UE 的工具鏈不匹配。**
# 三、下載編譯AirSim
- **直接下載執行檔案可以先測試:⭐[AirSim release binaries](https://github.com/Microsoft/AirSim/releases)**
**若需要進行二次開發則需要下載原始碼:**
```CMD
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
```
**相關PX4資料:**
- **⭐[px4官網](https://px4.io/)**
如果有產生錯誤,需要先Clean在Build。需要使用x64 Native Tools Command Prompt。
```CMD
cd C:\專案放置的地方\AirSim\
C:\專案放置的地方\AirSim> clean.cmd
C:\專案放置的地方\AirSim> build.cmd
```
**Build完成後會產生Unreal Engine的專案檔**


# 四、AirSim參數設置
修改 `settings.json` 讓 QGC 可以與 AirSim 連接。
- **相關AirSim資料:**
- ⭐[https://microsoft.github.io/AirSim/px4_sitl_wsl2/](https://microsoft.github.io/AirSim/px4_sitl_wsl2/) (設定參數參考)
- ⭐[AirSim Simulation](https://px-4.com/main/en/sim_airsim/) (影片參考)
- ⭐[AirSim px4_setup](https://microsoft.github.io/AirSim/px4_setup/)
修改設定檔案C:\Users\xxx\Documents\AirSim\settings.json
```JSON
{
"SettingsVersion": 1.2,
"SimMode": "Multirotor",
"ClockType": "SteppableClock",
"Vehicles": {
"PX4": {
"VehicleType": "PX4Multirotor",
"UseSerial": false,
"LockStep": true,
"UseTcp": true,
"TcpPort": 4560,
"ControlIp": "remote",
"ControlPortLocal": 14540,
"ControlPortRemote": 14580,
"LocalHostIp": "172.17.144.1",
"Sensors":{
"Barometer":{
"SensorType": 1,
"Enabled": true,
"PressureFactorSigma": 0.0001825
}
},
"Parameters": {
"NAV_RCL_ACT": 0,
"NAV_DLL_ACT": 0,
"COM_OBL_ACT": 1,
"LPE_LAT": 47.641468,
"LPE_LON": -122.140165
}
}
}
}
```
**WSL(SITL)的IP,在WSL中輸入查詢ip addr show eth0。**

**Windows中輸入ipconfig查詢IP設定**

# 五、連接 Mission Planner
Mission Planner所需要設定的連線IP,是WSL的IP。
Mission Planner 與 SITL的連線這邊設定成UDP,用來監控AirSim飛機模擬的狀態。
在啟動SITL的時候會先需要設定AirSim的IP
```bash
export PX4_SIM_HOST_ADDR=172.17.144.1
```
**所要設定的Port會顯示在WSL(SITL)執行的資訊中**

**QGC設定UDP的畫面**

**連線成功後就可以看到Airsim中無人機的設定**

---
# 總結
本指南介紹了 **如何將 QGroundControl (QGC) 與 AirSim 整合,實現地面站對虛擬無人機的控制**。透過此整合,開發者可以在模擬環境中**監控無人機狀態、規劃航線、手動或自動控制飛行**,無需實體硬體即可測試 PX4 飛控系統的運作。