フライトコントローラの２大巨頭をWindowsで手軽にUnityと連携する国産シミュレータ「箱庭」の仕組みとは

オープンソースのフライトコントローラの２大巨頭といえば、言わずと知れた「ArduPilot」と「PX4」。  
これは、もはやドローン開発に関わる人にとっては常識とも言える存在です。

一方で、これらと連携してドローンの物理挙動を再現できるシミュレータといえばどうでしょうか？

どちらにも対応している有名どころとしては、「Gazebo」や「AirSim」が思い浮かびます。

---

さて、みなさん、**Windowsでこれらを動かしてみたい**と思ったことはありますか？

- WSLのインストールから始まり…
- PX4のビルドに失敗し…
- AirSim は既にサポート終了…
- Gazebo は Windowsでは動かず…
- ROS2のバージョン沼…

**「一つ動かすのに一週間かかった」**  
そんな声を何度も耳にしました。

---

そこで今回は、こうした**複雑な技術要素をまとめて統合し**、  
しかも**Windows環境でもあっさり動く**ことで注目されている、  
国産のオープンソースシミュレータ  
「**箱庭ドローンシミュレータ**」の **“仕組み” に焦点を当てて紹介します。**

- なぜ、PX4とArduPilot、どちらもサポートできるのか  
- なぜ、UnityやPythonとも連携できるのか
- なぜ、Windowsで手軽にサクサク動くのか

その答えは、箱庭の**アーキテクチャの中にすべて詰まっています。**

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

- [ArduPilot SITLをWindowsで爆速セットアップ：国産シミュレータ「箱庭」でラクに可視化・制御する方法](https://qiita.com/kanetugu2018/items/59e3b657c402691bff54)
- [PX4 SITLをWindowsで爆速セットアップ：国産シミュレータ「箱庭」でラクに可視化・制御する方法](https://qiita.com/kanetugu2018/items/d4a21b590950774c6cf8)

# 箱庭ドローンシミュレータのアーキテクチャ

これがその答えです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/445c4f57-ab02-4c4f-81fb-5c8188f3f9b0.png)

１つずつ解説しましょう。

## Physics

中央に箱庭ドローンと記載ありますよね。そこに、Physicsがあり、ドローンの物理挙動再現が行われる物理エンジンを組み込んでいます。デフォルトでは、[数式ベースのドローン動力学](https://qiita.com/kenjihiranabe/items/498418ceb8a80f8242d0)の実装が入っています。

一方で、この物理モデルは、ドローン・ダイナミクスとして、MATLAB/Simulink で作成することもできます。また、高精度な剛体シミュレータである MuJoCo を組み合わせたドローンシミュレーションも可能な構成になっています。


## ドローン制御

左のドローン制御内にあるフライトコントローラの２大巨頭 ArduPilot と PX4 があります。さらに、オリジナルのドローン制御を組み込むこともできる構成です。

また、デフォルトで組み込まれているドローン制御を Python API と連携してフライトシミュレーションさせることもできます。


## 外部環境

ドローン飛行時には、外部環境の影響はとても重要です。風や気温、ビルや建物などの障害物との接触もあります。これら外部環境との連携は、箱庭というシミュレーションプラットフォーム上で動作させることで、箱庭ドローンシミュレータとの連携が可能になるのです。

## 箱庭ブリッジ

箱庭ドローンシミュレータは、それ単体でシミュレーションすることは可能です。ですが、リアルドローンの運行管理との連携や、今流行りのデジタルツイン、リアルロボットやWeb/XR連携、さらにAIエージェントとの連携（MCP）などもあると夢が広がりますよね。

でも、箱庭はその夢を実現するプラットフォームであり、その仕組みが既にあるのです。

それが、箱庭ブリッジというコンポーネントです。これらがあることで、さまざまな応用が可能となり、単なるドローンシミュレータの枠を超えた壮大なシミュレーション環境になるポテンシャルを持っているのです。

# いよいよ、なぜ？に答えていきましょう

## なぜ、PX4とArduPilot、どちらもサポートできるのか  

これ、箱庭ドローンシミュレータの内部モジュール構成です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/08e6105b-b519-4575-b454-9477404b91df.png)

左上に PX4 と Ardupilot があります。実は、これらのフライトコントローラは、通信として TCP/UDPの違いがあります。PX4 は信頼性重視で TCP 通信です。Ardupilotは性能重視で UDP通信です。

そのため、箱庭ドローンシミュレータでは、通信モジュール comm を用意し、その差異を吸収しています。

そして、mavlink モジュールで PX4 と Ardupilot で通信プロトコルレベルでの差異を吸収し、service層では、PX4 でも Ardupilot でも同じ仕組みでシミュレーションできるようになっているのです。

右上にある Physics は、先に説明した物理モデル部分です。その物理モデルへのアクセスをセンサとアクチュエータとしてインタフェースを切った aircraft コンポーネントがあります。

service 層にある aircraft は、物理モデルへのアクセスを抽象化された aircraftコンポーネントを通してアクセスするのです。

そして、一番下にある hakoniwa コンポーネントが外部のモジュールである箱庭ブリッジへと橋渡ししていくというわけです。

箱庭ドローンシミュレータは、技術的にはシンプルなようで、実は緻密に設計されているのです。

## なぜ、UnityやPythonとも連携できるのか

箱庭ドローンシミュレータでは、センサ情報やアクチュエータ制御など、すべての入出力が「[PDU（Protocol Data Unit）](https://hakoniwa-lab.net/2023/09/24/core-tech-03/)」という形式で統一されています。

このPDUは、ROS IDL によって定義された構造体ベースのフォーマットであり、C/C++に加え、Python や C#（Unity）でも読み書きが可能です。言語に依存せず通信できるよう、コード生成や通信層の抽象化がなされています。

### Unityとの連携：リアルタイム3D描画が簡単に

Unityと連携する場合は、以下のような構成で動作します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/a58ceeaa-4a5f-452d-9d4d-45b6bbdcaeff.png)

中心となるのは、[hakoniwa-webserver](https://github.com/toppers/hakoniwa-webserver)というコンポーネントです。これは、箱庭内部で流れるPDUデータ（たとえばドローンのTwistなど）を WebSocket 経由で外部にリアルタイム配信する仕組みを提供します。

Unity側では、[hakoniwa-pdu-csharp](https://github.com/toppers/hakoniwa-pdu-csharp) パッケージを導入し、WebSocketのURIを設定することで、ドローンの姿勢・位置などを3D空間にリアルタイム描画できます。

このC#ライブラリはUnity向けに最適化されており、依存が少なく、導入後すぐにPDUデータを受信・可視化できます。



### Pythonとの連携：制御ロジックを手軽に実装

箱庭の中核である hakoniwa-core は C 言語で書かれていますが、Pythonバインディングも提供されています。これにより、ユーザーは以下のような操作が可能です：

- Pythonからドローンの目標姿勢を送信（フライト指令）
- PDUとしてセンサ情報を受信し、AI/機械学習モデルで処理
- Unityや実機と組み合わせた複合的な制御試験にも活用可能

箱庭Webサーバ自体もPythonで書かれているため、拡張や改造も容易で、研究用途にも適しています。
そして、箱庭Webサーバは、箱庭PDUデータを Websocket 通信で共有するのです。

### なぜ「連携」がここまで柔軟なのか？

それは、箱庭が次の3層構造を意識して設計されているからです：

① PDUによるデータ表現の共通化
② 通信手段（WebSocketなど）の抽象化
③ 各種言語・環境へのバインディングの整備

このアーキテクチャにより、箱庭ドローンシミュレータは、UnityやPythonだけでなく、Webアプリ、リアルロボット、AIエージェントとの連携までを視野に入れた拡張が可能となっているのです。


## なぜ、Windowsで手軽にサクサク動くのか

箱庭ドローンシミュレータ、そしてその基盤である「箱庭」は、POSIX API 準拠で設計されています。
これにより、Linux / macOS / Windows（WSL）といった異なるOS間でもコードの移植性が非常に高く、実際、常にクロスプラットフォームでのビルド検証も行われています。

✅ POSIX準拠 → OS依存を排除 → クロスビルドが容易

そのため、Windowsネイティブのバイナリとして箱庭ドローンシミュレータを構築することも技術的には可能です。

しかし、実際にはPX4やArduPilotがWindowsネイティブ対応していないという根本的な課題が存在します。

無理に構成しようとすると、以下のようなアーキテクチャになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/cb049692-bb20-4a70-8be1-bc98d8682491.png)

このように、WSL2 と Windows ネイティブアプリケーションの間で数ミリ秒単位の通信が頻発する構成では、体感で 4～5 倍の遅延を感じることすらあります。

そこで箱庭ドローンシミュレータでは、リアルタイム性と開発体験の快適さを両立する構成として、

- PX4/ArduPilotを含むコア部分をWSL2上のDockerコンテナで実行
- Unityとの通信をWebSocket（20ms周期）で非同期に接続

という構成を採用しています。

> 💡 UnityはWindowsネイティブ、箱庭はWSLコンテナ、通信はWebSocket →
OSを跨いでも安定したリアルタイム通信が可能

この工夫によって、Windows環境でも快適かつ正確なドローンシミュレーションが可能となっているのです。

> 「POSIXでクロス対応＋WebSocketでOSを越える」
シンプルだけど、実はこれ、めちゃくちゃ効いてます。すごくない？


# 最後に

ドローン開発の現場では、
- PX4やArduPilotといった高機能なフライトコントローラ
- GazeboやAirSimのような大型シミュレーション基盤
- UnityやPython、Webによる可視化・制御拡張
- SLAMやAIとの組み合わせによる高度な自律制御

といった多様な技術要素が絡み合い、環境構築や拡張がとにかく大変という声を多く聞きます。

箱庭ドローンシミュレータは、こうした課題に対して

- ArduPilot / PX4 の 両方に対応
- PythonやUnity、Webとの柔軟な連携
- Windows上でもサクッと動く快適な実行体験
- リアルロボット・デジタルツイン・MCP連携といった応用展開のしやすさ

を実現した、“現場で使える” 国産オープンソースシミュレータです。

しかも、すべての設計思想は「PDUによる抽象化とブリッジによる拡張」という明快なアーキテクチャに基づいています。

ご興味を持たれた方は、ぜひこちらのGitHubリポジトリから触ってみてください。

👉 https://github.com/toppers/hakoniwa-drone-core

箱庭コア技術の最新に触れたい方がもしいらっしゃいましたら、こちらの記事も参考になります。

https://hakoniwa-lab.net/2025/05/11/news-21/