このリポジトリでは、hakoniwa-px4sim を発展させ、拡張性と汎用性を高めたドローンシミュレータのコア機能を提供します。PX4やArdupilot、ロボットシステム(ROS)、さらにはスマホ、XR、Webとの連携も視野に入れた柔軟な設計が特徴です。
「シミュレーションの世界を飛び出す!」をモットーに、以下の3つを柱としています:
- シンプルさ: 誰でも簡単に使えるドローンシミュレータ。
- 多様性: ゲーム、教育、研究、ビジネスなど、幅広いアプリケーションに対応。
- 接続性: PX4/Ardupilot、Unity、ROS、スマホ、XR、Webとのシームレスな連携。
仮想空間の中に閉じず、現実世界の課題解決や価値創造を目指したシステム設計を意味します:
- PX4/Ardupilot や ROS と連携し、実機さながらの制御を実現。
- 物流試験や展示用途での活用に対応。
- 仮想シミュレーションの結果を、すぐに実機テストや運用に反映可能。
- スマホ、XR、Web、Unity など、さまざまなデバイスや環境で動作。
- ゲームやエンターテインメントコンテンツとしても展開可能。
- 教育向けに、学生や学習者が簡単にモデリングや制御工学を体験できるツールを提供。
- 非専門家でも気軽に利用できる設計で、ゲームや展示会での体験提供にも最適。
- ゲーム: ドローン操縦を手軽に楽しむ。
- エンタメ: 展示用途(例: 万博でのデモ)。
- 訓練: プロ操縦者向けのリアルな動作再現。
- 教育: 制御工学やモデリング学習。
- 研究: 環境や機体のシミュレーション。
- 物流: 実証実験場として活用。
- C/C++ ベース: 箱庭ドローン・コア機能をCライブラリとして提供し、他の言語での拡張を容易化。
- TOPPERS ライセンス:オープンソースで、商用利用も可能。
- 複数プラットフォーム対応: Windows, Mac, Linux, WSL2 など主要OSをサポート。
- 箱庭モードと非箱庭モードのサポート
- 箱庭あり:ロボットシステム(ROS)や、スマホやXR、Webと連携したシミュレーションが可能。
- 箱庭なし:ドローンの物理モデルや制御モデルを独立して実行することが可能。PX4/Ardupilotとの連携も可能。
- glm : 数学ライブラリ。
- mavlink_c_library_v2 : MAVLink通信ライブラリ。
- nlohmann/json : JSON操作ライブラリ。
- hakoniwa-core-cpp-client : 箱庭シミュレーションとの統合。
- hakoniwa-ros2pdu : 箱庭PDUとの統合。
- comm (通信モジュール) : TCP/UDP の通信インタフェース
- ICommServer API: サーバーサイドの通信機能を提供
- TCP/UDPプロトコルに対応した通信サーバーの生成
- エンドポイントでの接続待ち受けと通信管理
- 使用前には必ずcomm_init()の呼び出しが必要
- ICommClient API: クライアントサイドの通信機能を提供
- TCP/UDPプロトコルに対応した通信クライアントの生成
- 送信元・送信先エンドポイントの指定による通信確立
- 使用前には必ずcomm_init()の呼び出しが必要
- ICommIO API: 通信データの送受信機能を提供
- データの送信・受信操作の抽象化インターフェース
- TCPでは到達保証とリトライ機能を提供
- UDPでは高速な通信を実現(到達保証なし)
- 詳細な API 仕様はサーバー、クライアント、IOを参照
- ICommServer API: サーバーサイドの通信機能を提供
- mavlink (MAVLINK通信) : MAVLINK通信のインタフェース
- physics (物理モデル) : 機体の物理モデル
- controller (制御モデル) : 機体の制御モデル
- aircraft (機体モデル) : 物理モデルおよびセンサ/アクチュエータを統合した機体モデル
- service (サービス)
- aircaft_service (機体サービス) : 箱庭なしで、PX4と連携するためのサービス
- drone_service (ドローンサービス) : 箱庭なしで、制御/物理モデルを実行するためのサービス
- hakoniwa (箱庭) : serviceを箱庭に統合したサービス
- logger (ログ) : 機体のログ
- config (コンフィグ) : ドローンのコンフィグ
-
サポートOS
- Arm系Mac
- Windows 11
- Windows WSL2
- Ubuntu 22.0.4
-
ビルド・テストツール
- cmake
- googletest
-
必要なツール類
- pyenv
- python: version 3.12.0
- 3.13以降では動きません。
- MacOSの場合、homebrewでインストールしたものでは動きません。
- python: version 3.12.0
- pyenv
箱庭なしで利用する場合、箱庭ドローンの物理モデルと制御モデルを独立して実行することが可能です。
補足:箱庭との連携がありませんので、Unityでのビジュアライズはできません。
提供バイナリとしては以下のものがあります。
- PX4 連携サンプルアプリ(<os名>-aircraft_service_px4)
- Ardupilot 連携サンプルアプリ(<os名>-aircraft_service_ardupilot)
- 箱庭ドローンのCUIサンプルアプリ(<os名>-drone_servce_rc)
- 箱庭ドローンPro Cライブラリ(hako_service_c)
全てクロスプラットフォーム対応しています。リリースページにあるバイナリをダウンロードしてください。
os名は、以下の通りです。
- mac
- win
- linux
PX4 連携サンプルアプリを使うと箱庭ドローンシミュレータの物理モデルとPX4を連携することが可能です。
実行方法:
<os名>-aircraft_service_px4 <IPアドレス> 4560 ./config/drone/px4
この際、PX4を起動することで、PX4と連携することが可能です。
参考:https://github.com/toppers/hakoniwa-px4sim?tab=readme-ov-file#terminal-a
あわせて、QGCと連携することで、遠隔操作が可能です。
Ardupilot 連携サンプルアプリを使うと箱庭ドローンシミュレータの物理モデルとArdupilotを連携することが可能です。
実行方法:
<os名>-aircraft_service_ardupilot <ホストPCのIPアドレス> 9002 9003 ./config/drone/ardupilot
この際、Ardupilotを起動することで、Ardupilotと連携することが可能です。
./Tools/autotest/sim_vehicle.py -v ArduCopter -f airsim-copter -A "--sim-port-in 9003 --sim-port-out 9002" --sim-address=<ホストPCのIPアドレス> --out=udp:<Mission PlannerのIPアドレス>:14550
参考:https://github.com/ArduPilot/ardupilot
この際、Mission Plannerと連携することで、遠隔操作が可能です。
箱庭ドローンシミュレータの物理モデルと制御モデルを連携させて、CUIで操作することが可能です。
service/drone_service_rc 1 config/drone/rc
----- USAGE -----
----- STICK -----
| LEFT | RIGHT |
| w | i |
| a d | j l |
| s | k |
---- BUTTON ----
x : radio control button
p : get position
r : get attitude
t : get simtime usec
f : flip
b : get battery status
実行例:起動直後のログ
BatteryModelCsvFilePath: ./tmp_battery_model.csv
BatteryModelCsvFilePath does not exist.
Angle rate control is disabled
Angle rate control is disabled
flip_target_time_sec: 0.4
flip_constant_time_sec: 0.1
target_angular_rate_rad_sec: 25.1327
target_angular_rate_delta: 0.167552
target_angular_inc_time_sec: 0.15
target_angular_dec_time_sec: 0.25
INFO: mixer is enabled
timestep_usec: 1000
DroneService::startService: 1000
> Start service
この状態で、アームするには、x
を入力しエンターキーを押下します。
その後、w
を入力しエンターキーを押下することで、上昇します。
実行例:アームして上昇
> Start service
x
w
position x=0.0 y=-0.0 z=0.1
position x=0.0 y=-0.0 z=0.2
position x=0.0 y=-0.0 z=0.3
position x=0.0 y=-0.0 z=0.4
position x=0.0 y=-0.0 z=0.5
position x=0.0 y=-0.0 z=0.6
position x=0.0 y=-0.0 z=0.7
position x=0.0 y=-0.0 z=0.8
position x=0.0 y=-0.0 z=0.9
position x=0.0 y=-0.0 z=1.0
position x=0.0 y=-0.0 z=1.1
実行例:前進
i
position x=0.1 y=0.0 z=1.2
position x=0.2 y=0.0 z=1.3
position x=0.3 y=0.0 z=1.3
position x=0.4 y=0.0 z=1.3
position x=0.5 y=0.0 z=1.3
position x=0.6 y=0.0 z=1.3
箱庭ドローンシミュレータは、Cライブラリ(hako_service_c)としてバイナリ公開しています。
以下のヘッダファイルをインクルードすることで、ビルド&リンク可能です。
- include/service/service.h
なお、C APIヘッダは以下です。
- include/service/drone/drone_service_rc_api.h
工事中・・