Windows×Unityで爆速ドローン訓練！PS4コントローラ握って箱庭シミュレータを飛ばす！

この記事を読むと、Windows環境で手軽にリアルなドローン操縦体験ができるようになります。

PS4コントローラを握って、箱庭シミュレータ×Unityで、まるで実機のようなフライト体験を始めましょう。


> ⚠️ 注意：PX4 / Ardupilot は使っていません！
> 本記事のドローン制御は、箱庭ドローンシミュレータにあらかじめ含まれている制御プログラムで実行されます。
> よって、PX4やQGroundControlなどのインストール・設定は不要です。

# 🎯 想定読者

- 実機操作に近い感覚でドローン操縦訓練を体験したい開発者・教育関係者
- PS4コントローラで直感的に操作できるドローン環境を探している人
- Unityゲーム開発者で、物理エンジンつきのドローン挙動を試したい人
- UnityとWebSocket連携で、双方向インタラクションのある環境を構築したい人


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

# 💻 Windows環境

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


| ツール                | 用途               | 備考              |
| ------------------ | ---------------- | --------------- |
| Windows 11 / WSL2  | ホスト環境            | WSL2は必須（WSL1不可） |
| Ubuntu 24.04.2 LTS | 箱庭ドローンシミュレータ | WSL2内で動かします     |
| UnityHub/Unity(6.1)          | 可視化（任意）          | 自機やセンサの3D表示が可能  |
| PS4コントローラ    | ドローン操縦用     | - |

> 💡 PS4コントローラは、事前にWindows側でUSB接続しておきましょう。

# TIPS コントローラ入力の流れ

🎮 「PS4コントローラで操作」→「Unityで受け取る」→「WSL上の箱庭ドローンシミュレータに送信」

- コントローラの入力はUnity側のスクリプトで受け取ります
- Unity から WebSocket 経由で、WSL上のシミュレータにコントローラの命令値を送信
- 箱庭ドローンシミュレータは、独自の内蔵制御ロジックでドローンを挙動制御します


このあとの章では、Unityプロジェクトの設定方法や、WSL上の箱庭ドローン環境との接続方法を紹介していきます。

# 🛠 環境セットアップ

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

## 🎮 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)


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

さー、やりましょう。


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

WSLの端末で、以下を実行してください。

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

成功すると、docker コンテナに入りますので、この状態で、箱庭ドローンシミュレータを起動しましょう。

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

## Unity でドローンを操縦だっ！

Unityのプレイボタンをクリックするだけです。

以下はデモ操作した内容の動画です。

[![操作デモ動画](https://img.youtube.com/vi/7txKDl-KylM/0.jpg)](https://www.youtube.com/watch?v=7txKDl-KylM)
1. **Xボタンを押す** → プロペラが回転
2. **左スティック前倒し** → ドローンが浮上
3. **右スティック前倒し** → ドローン前進
4. 前方には風（2m/sec）が吹いており、右スティック左倒しであらがう
5. 障害物に注意しながら中央の荷物へ向かう
6. **〇ボタンで荷物を取得**
7. 元の位置に戻って **〇ボタンで配送完了**
8. **左スティック後ろ倒し** → 降下
9. **Xボタン** → 着陸


> 🥳 お疲れさまでした！ここまでできれば、あなたはもう“ドローンパイロット見習い”です。  
> この仕組みを応用して、オリジナルの操縦シナリオや教育教材にも展開できます。