PX4 SITLをWindowsで爆速セットアップ：国産シミュレータ「箱庭」でラクに可視化・制御する方法

「PX4のSITL環境、Windowsで動かすのって正直しんどい……」

って思っていませんか。

- WSLを入れるだけで一苦労
- ビルドや依存関係で何度も詰まる
- 動かした後も「で、どうやって可視化するの？」と立ち止まる

本記事では、そんな悩みを抱えたエンジニア・企画担当の方に向けて、
 **国産のドローンシミュレータ「箱庭ドローンシミュレータ」** を活用して、**“サクサク動いて拡張しやすい”PX4 SITLのセットアップ手順**を紹介します。

# 想定読者
- PX4をPoCやプロトタイピングで使いたい方
- 実機がなくても制御ロジックを検証したい開発者
- UnityやWeb連携も含めた「拡張しやすいSITL環境」を探している方

# 💡ちなみに：ArduPilotでも同じこと、できます
「うちはArduPilot派なんだけど、箱庭で同じようなことできないの？」

──できます！

箱庭ドローンシミュレータは、オープンソースフライトコントローラの2大巨頭「PX4」「ArduPilot」の両方に対応しているのです。

ArduPilot派の方は、以下の記事をご参照ください：

📖 [WindowsでArduPilot SITLを超簡単に動かす！箱庭シミュレータの使い方](https://qiita.com/kanetugu2018/items/59e3b657c402691bff54)


---

# この記事でできるようになること

- WSL2上でPX4 SITLを手軽に試せる
- Unityでビジュアライズもできる
- Python APIとの接続で“次のステップ”にも進める

では、早速始めましょう。

# 💻 Windows環境

必要なものはこれだけです。


| ツール                | 用途               | 備考              |
| ------------------ | ---------------- | --------------- |
| Windows 11 / WSL2  | ホスト環境            | WSL2は必須（WSL1不可） |
| Ubuntu 24.04.2 LTS | PX4のビルド／実行 | WSL2内で動かします     |
| UnityHub/Unity(6.1)          | 可視化（任意）          | 自機やセンサの3D表示が可能  |
| QGC    | MAVLinkの通信確認     | - |

> 💡 UnityやQGCは「あとからでも導入可」です。
> まずは PX4 を動かすところまでサクッと進めるのがポイントです。

# 🛠 環境セットアップ

まずは、WSL2を起動です！

## 📦 箱庭ドローンシミュレータ本体

```bash
git clone --recursive https://github.com/toppers/hakoniwa-drone-core.git
```

クローンする場所は、WSL2/Ubuntuのホーム直下に `project` ディレクトリ作成して、そこで行うのがお勧めです。


クローンおわったら、WSL に docker をインストールしよう！

https://github.com/toppers/hakoniwa-drone-core/blob/main/docs/tips/wsl/docker-setup.md

## 箱庭Webサーバー

```
git clone --recursive https://github.com/toppers/hakoniwa-webserver.git
```

クローンする場所は、WSL2/Ubuntuのホーム直下に `project` ディレクトリ作成して、そこで行うのがお勧めです。

## ✈️ PX4本体（ビルドが必要）

ここみて！

https://github.com/toppers/hakoniwa-drone-core/blob/main/docs/tips/wsl/px4-setup.md

クローンする場所は、WSL2/Ubuntuのホーム直下に `project` ディレクトリ作成して、そこで行うのがお勧めです。

## 🎮 Unityで可視化したい場合はこちら（任意）

```bash
git clone --recursive https://github.com/hakoniwalab/hakoniwa-unity-drone.git
```

クローンする場所は、Windowsのファイルシステム（例えば `/mnt/c`)直下に `project` ディレクトリ作成して、そこで行うのがお勧めです。


クローン終わったら、Unity Hubで下図のように `Add` をクリックして、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/d0cd559e-17a0-4b31-b50a-61101b54a6a9.png)

hakoniwa-unity-drone/simulation を追加してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/058c1fa6-f97d-424a-b6e2-722245ea53d9.png)

成功すると、下図のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/04792c0b-aa57-4f3d-b6c3-d577c4f895b8.png)

そして、`simulation` をクリックすると、Unityが起動します。（何回か再起動メッセージがでますが、めげずにがんばりましょう） 

起動後、下図のように、プロジェクトビューから、`Scenes/WebAvatar` をクリック！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/8f117fcd-518f-42b4-9e33-d45c716b7901.png)

ヒエラルキービューの `HakoniwaWeb` を選択して、Inspectorビューの `Server Uri` のIPアドレスを、WSL2のIPアドレスを指定します。

WSL2のIPアドレスは、Ubuntu 上で `ifconfig` で `eth0` のものを入力します。

例：
```
tmori@WinHako:~/qiita$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.31.9.252  netmask 255.255.240.0  broadcast 172.31.15.255
```


ちなみに、デフォルトで動くドローンはこちらっす。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/404f64c2-b52a-4524-ba41-13c911ae06d2.png)


# お疲れさまでした、さっそく動かしてみましょう

さー、やりましょう。

## まずは、QGC 起動だ！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/63da0833-e672-4807-b057-8ff0cbbfac83.png)


## お次は、PX4 SITL　起動だー。

`hakoniwa-drone-core` に、PX4 SITL 起動スクリプトおいてありますから、以下のように起動してください。

```bash
bash hakoniwa-drone-core/tools/px4/run.bash
```

成功すると、こんな感じで、PX4の起動ログが出力されます。

```bash
tmori@WinHako:~/qiita$ bash hakoniwa-drone-core/tools/px4/run.bash
[0/1] launching px4 none_iris (SYS_AUTOSTART=10016)

______  __   __    ___
| ___ \ \ \ / /   /   |
| |_/ /  \ V /   / /| |
|  __/   /   \  / /_| |
| |     / /^\ \ \___  |
\_|     \/   \/     |_/

px4 starting.

INFO  [px4] startup script: /bin/sh etc/init.d-posix/rcS 0
env SYS_AUTOSTART: 10016
INFO  [param] selected parameter default file parameters.bson
INFO  [param] importing from 'parameters.bson'
INFO  [parameters] BSON document size 350 bytes, decoded 350 bytes (INT32:15, FLOAT:3)
INFO  [param] selected parameter backup file parameters_backup.bson
INFO  [dataman] data manager file './dataman' size is 1208528 bytes
INFO  [init] PX4_SIM_HOSTNAME: 127.0.0.1
INFO  [simulator_mavlink] using TCP on remote host 127.0.0.1 port 4560
WARN  [simulator_mavlink] Please ensure port 4560 is not blocked by a firewall.
INFO  [simulator_mavlink] Resolved host '127.0.0.1' to address: 127.0.0.1
INFO  [simulator_mavlink] Waiting for simulator to accept connection on TCP port 4560
```

## ラスボス・箱庭ドローンシミュレータを起動だ！

以下を実行してください。

```bash
bash hakoniwa-drone-core/docker/run.bash
```

```bash
bash hakoniwa-drone-core/docker/tools/run-hako.bash px4
```

成功すると、PX4 と QGC が反応します。

PX4 のログはこんな感じです。

```
INFO  [simulator_mavlink] Simulator connected on TCP port 4560.
ERROR [simulator_mavlink] poll timeout 0, 111
ERROR [simulator_mavlink] poll timeout 0, 111
INFO  [lockstep_scheduler] setting initial absolute time to 1748046466970062 us
INFO  [commander] LED: open /dev/led0 failed (22)
WARN  [health_and_arming_checks] Preflight Fail: ekf2 missing data
WARN  [health_and_arming_checks] Preflight Fail: system power unavailable
INFO  [uxrce_dds_client] init UDP agent IP:127.0.0.1, port:8888
INFO  [mavlink] mode: Normal, data rate: 4000000 B/s on udp port 18570 remote port 14550
INFO  [mavlink] mode: Onboard, data rate: 4000000 B/s on udp port 14580 remote port 14540
INFO  [mavlink] mode: Onboard, data rate: 4000 B/s on udp port 14280 remote port 14030
INFO  [mavlink] mode: Gimbal, data rate: 400000 B/s on udp port 13030 remote port 13280
INFO  [logger] logger started (mode=all)
INFO  [mavlink] partner IP: 172.31.0.1
INFO  [logger] Start file log (type: full)
INFO  [logger] [logger] ./log/2025-05-24/00_27_47.ulg
INFO  [logger] Opened full log file: ./log/2025-05-24/00_27_47.ulg
INFO  [mavlink] MAVLink only on localhost (set param MAV_{i}_BROADCAST = 1 to enable network)
INFO  [mavlink] MAVLink only on localhost (set param MAV_{i}_BROADCAST = 1 to enable network)
INFO  [px4] Startup script returned successfully
pxh> INFO  [tone_alarm] home set
ERROR [mavlink] vehicle_command_ack lost, generation 3 -> 24
ERROR [mavlink] vehicle_command_ack lost, generation 3 -> 24
ERROR [mavlink] vehicle_command_ack lost, generation 3 -> 24
ERROR [mavlink] vehicle_command_ack lost, generation 3 -> 24
INFO  [commander] Ready for takeoff!
```

## Unity でドローンの雄姿を見たい人向け

Unityのプレイボタンをクリックして、ヒエラルキービューから、`DJIAvatar2` をダブルクリックすると、その雄姿が見えます！

操作動画：

https://www.youtube.com/watch?v=eHUHqGJEZOw


# 🚀 まとめと次の一歩

ここまでお疲れさまでした！

- PX4 SITLをWSL2上で動かし、
- QGC で状態を確認し、
- Unityで可視化する

という一連のステップを、国産のドローンシミュレータ「箱庭」を使って体験できたと思います。

これだけで終わりではありません。
Hakoniwa Drone Core は、Python API、Web連携、ROS2連携、AR拡張まで可能な**拡張性の高いプラットフォーム**です。

「制御ロジックを試したい」「実機前のPoCを作りたい」「自社プロダクトに組み込みたい」

そういった次のステップに踏み出すための、第一歩になれば嬉しいです。