前回のブログにて、箱庭のPX4連携で苦労していることをお伝えしたままでしたが、ようやく第一段階の技術ハードルを突破できました!
箱庭のPX4連携デモ
論より証拠、これがその成果です。
デモ内容の説明
デモをご覧いただいたと思いますが、動画だけでは全ての詳細を把握するのは難しいかもしれませんので、デモの各要素についてもう少し詳しくご説明します。
箱庭実行用の端末(画面左下):
この端末は、ドローンの物理シミュレーションを実行するために使用されています。ドローンの動作や物理的な挙動がこの端末で駆動されています。
PX4(画面中央下の端末):
こちらはPX4のSITL(Software In The Loop)モードです。これはシミュレーション用の特別なモードで、リアルタイムでのドローン制御のシミュレーションが可能です。
Unity(画面右端):
Unityはこのデモでは物理演算には使用せず、ドローンの飛行をビジュアライズするためだけに特化されています。これにより、ドローンの動きをリアルタイムで視覚的に追跡できます。
テストシナリオと実行プログラム(画面左上と中央右下):
ドローンのホバリングや周回飛行は、テストシナリオに基づいています。このシナリオは、特定のプログラム(画面中央右下に表示されている端末で実行されています)によって制御されています。また、QGC(QGroundControl)は使用せず、箱庭のテストシナリオ駆動スクリプトを通じてドローンを制御しています。
シミュレーションの流れ:
シミュレーションを開始すると、PX4はUnityからのシミュレーション開始の指示を待ちます。テストシナリオ実行端末からテストを開始すると、以下の動作が順番に実行されます:
- ドローンをテイクオフします
- ドローンを右方向に15m移動させます
- ドローンを前方向に15m移動させます
- ドローンを左方向に15m移動させます
- ドローンを後方向に15移動させます(元に戻ります)
技術課題と克服内容
ここまで辿り着くには、沢山の課題がありました。詳細解説すると時間が足りませんので、主なissueを挙げます。
- 箱庭とPX4との通信データをグラフ化する
- ホバリングするようになったが、途中で前後に動き始める現象が出てきた。
- トルクから各加速度計算にジャイロ効果が入っていない
- body acceleration の計算に、コリオリ力が入っていない
- ロックステップの対応ができていなかったので、シミュレーション時間同期方法の見直しが必要
- テイクオフはできるがドローンが安定しない
- QGCで機体を前進させて目標値で停止するテストを実施
- 右方向へ移動して目標値で停止するテストを実施する
- 機体の初期姿勢が前方を向いていないと、そもそもホバリングしない
これらの課題はどれも難しいものばかりで戸惑いの毎日でしたが、特に、物理式の誤りはデバッグが非常に困難であり、物理と数学の洞察力が求められることがよくわかりました。この点は、平鍋さんの絶大なるご支援のおかげで解決へ至ることができました(ありがとうございます!)。
なお、この問題対応にあたり、シミュレーション・データ採取とグラフ化機能拡張が自然に進みましたので、不幸中の幸いです(笑)。
まだ、解決できていない課題はいくつかありますが…、ここで培ってきた知見や技術/ツール類を駆使して解決していきたいと考えています。
トピック
今回の課題を平鍋さんが乗り越えられる中で、こんな素敵なページができました!
https://github.com/toppers/hakoniwa-px4sim/tree/main/drone_physics
ドローンの力学を扱う純粋な数学ライブラリで、箱庭依存もしていません。他のシミュレーションでも繋げることが可能です。このライブラリのおかげで、箱庭側のシミュレーション問題と物理側の問題の切り分けをうまくできるようになりました(大感謝)。
コメントを残す