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

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

って思っていませんか。

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

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

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


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

──できます！

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

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

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


---

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

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

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

# 💻 Windows環境

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


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

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

# 🛠 環境セットアップ

まずは、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` ディレクトリ作成して、そこで行うのがお勧めです。

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

ここみて！

https://github.com/toppers/hakoniwa-drone-core/blob/main/docs/tips/wsl/ardupilot-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)


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

さー、やりましょう。

## まずは、Mission Planner 起動だ！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/5da41c10-4b01-4a99-ab1a-9c50f9c9a714.png)

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

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

```bash
bash tools/ardupilot/run.bash <ardupilot-path> <HOST_IP>
```

`<ardupilot-path>` には、Ardupilotのパスを指定してください。  
`<HOST_IP>` には、ホストPCのIPアドレスを指定してください。(power shell 起動して ipconfig で確認できます)



例：
```bash
tmori@WinHako:~/project/hakoniwa-drone-core$ bash tools/ardupilot/run.bash ../ardupilot  192.168.2.156
```

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

```bash
SIM_VEHICLE: Start
SIM_VEHICLE: Killing tasks
SIM_VEHICLE: Starting up at SITL location
SIM_VEHICLE: WAF build
SIM_VEHICLE: Configure waf
SIM_VEHICLE: "/home/tmori/project/ardupilot/modules/waf/waf-light" "configure" "--board" "sitl"
:
```

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

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

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

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

成功すると、Ardupilot と Mission Planner が反応します。

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

```
Detected vehicle 1:1 on link 0
link 1 OK
online system 1
STABILIZE> Mode STABILIZE
AP: Initialising ArduPilot
AP: ArduCopter V4.7.0-dev (5b317b46)
AP: 35ca8cc61f9c43a581467a70fdde2c6d
AP: Frame: QUAD/X
AP: ArduCopter V4.7.0-dev (5b317b46)
AP: 35ca8cc61f9c43a581467a70fdde2c6d
AP: Frame: QUAD/X
AP: RCInput: decoding UDP (Pulses)
AP: Calibrating barometer
AP: ArduCopter V4.7.0-dev (5b317b46)
AP: 35ca8cc61f9c43a581467a70fdde2c6d
AP: Frame: QUAD/X
Got COMMAND_ACK: REQUEST_MESSAGE: ACCEPTED
Got COMMAND_ACK: REQUEST_MESSAGE: ACCEPTED
Got COMMAND_ACK: REQUEST_AUTOPILOT_CAPABILITIES: FAILED
Got COMMAND_ACK: REQUEST_AUTOPILOT_CAPABILITIES: FAILED
AP: ArduCopter V4.7.0-dev (5b317b46)
AP: 35ca8cc61f9c43a581467a70fdde2c6d
AP: Frame: QUAD/X
Got COMMAND_ACK: DO_SEND_BANNER: ACCEPTED
AP: ArduCopter V4.7.0-dev (5b317b46)
AP: 35ca8cc61f9c43a581467a70fdde2c6d
AP: Frame: QUAD/X
Got COMMAND_ACK: DO_SEND_BANNER: ACCEPTED
AP: ArduCopter V4.7.0-dev (5b317b46)
AP: 35ca8cc61f9c43a581467a70fdde2c6d
AP: Frame: QUAD/X
Got COMMAND_ACK: DO_SEND_BANNER: ACCEPTED
AP: ArduCopter V4.7.0-dev (5b317b46)
AP: 35ca8cc61f9c43a581467a70fdde2c6d
AP: Frame: QUAD/X
Got COMMAND_ACK: DO_SEND_BANNER: ACCEPTED
paramftp: bad count 1349 should be 1339
FTP reply for mavlink component 190
AP: ArduCopter V4.7.0-dev (5b317b46)
AP: 35ca8cc61f9c43a581467a70fdde2c6d
AP: Frame: QUAD/X
AP: Barometer 1 calibration complete
AP: Barometer 2 calibration complete
Init Gyro**AP: ArduCopter V4.7.0-dev (5b317b46)
AP: 35ca8cc61f9c43a581467a70fdde2c6d
AP: Frame: QUAD/X
AP: ArduCopter V4.7.0-dev (5b317b46)
AP: 35ca8cc61f9c43a581467a70fdde2c6d
AP: Frame: QUAD/X

AP: ArduPilot Ready
AP: AHRS: DCM active
AP: ArduCopter V4.7.0-dev (5b317b46)
AP: 35ca8cc61f9c43a581467a70fdde2c6d
AP: Frame: QUAD/X
AP: RC7: SaveWaypoint LOW
Received 1349 parameters
Saved 1349 parameters to mav.parm
fence present
Flight battery 100 percent
Received 1349 parameters (ftp)
Saved 1349 parameters to mav.parm
AP: EKF3 IMU0 initialised
AP: EKF3 IMU1 initialised
AP: AHRS: EKF3 active
AP: EKF3 IMU0 tilt alignment complete
AP: EKF3 IMU1 tilt alignment complete
AP: EKF3 IMU0 MAG0 initial yaw alignment complete
AP: EKF3 IMU1 MAG0 initial yaw alignment complete
AP: GPS 1: probing for u-blox at 230400 baud
AP: GPS 1: detected u-blox
AP: EKF3 IMU0 origin set
AP: EKF3 IMU1 origin set
AP: Field Elevation Set: 121m
AP: PreArm: Gyros inconsistent
AP: PreArm: Main loop slow (222Hz < 300Hz)
AP: EKF3 IMU0 is using GPS
AP: EKF3 IMU1 is using GPS
```

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

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

操作動画：

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



# 🚀 まとめと次の一歩

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

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

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

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

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

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