Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Mastering Drone Simulation with Hakoniwa: Step-...

Takashi Mori
February 10, 2024

Mastering Drone Simulation with Hakoniwa: Step-by-Step Guide

Dive into the world of drone simulation with our Hakoniwa Drone Simulator tutorial. This comprehensive guide provides an in-depth exploration of drone technology, leveraging open-source tools for a complete understanding of drone operations. From the fundamentals of drone flight to advanced simulation techniques, learn how to integrate various software into a unified simulation environment. Whether you're an educator, researcher, or hobbyist, this tutorial offers valuable insights into cost-effective drone simulation, fostering innovation and creativity in drone development and application. Perfect for those seeking to master drone simulation with a focus on flexibility and customization.

Takashi Mori

February 10, 2024
Tweet

More Decks by Takashi Mori

Other Decks in Technology

Transcript

  1. アジェンダ 1. お話しする範囲 2. 箱庭ドローンシミュレータとは 3. ドローンの⾶⾏原理 4. ドローンの数学・物理・制御⼊⾨ 5.

    ドローンの数値シミュレーション実現⽅法 6. オープンソース技術の紹介(QGC、 PX4) 7. ゲームエンジンの使い所 8. 箱庭ドローンシミュレータの構築 9. なぜ箱庭じゃなきゃダメなのか︖ 2
  2. お話しする範囲 • オープンソースベースでのドローン技術のエコシステム 3 Open Source Closed Product HardWare Software

    User Application Firmware Drone Control Ground Station QGC PX4 ArduPilot Mission Planner Simulation HILS SILS Gazebo AirSim Hakoniwa DJI Pixhawk Personal Use Free Software Game Engine Unreal Unity Position/Speed Attitude
  3. 箱庭ドローンシミュレータのアーキテクチャ 5 PX4 on SITL QGroundControl 18570/UDP Hakoniwa hakoniwa-px4sim Drone

    Physics/Sensor (C/C++) Game Engine Drone Control (C/C++) Unity Unreal Engine Scenario Test Python 4560/TCP PS4 Controller MATLAB/Simulink Generate Plant/ Sensor Model scenario parameters Simulation 箱庭は様々なソフトウェアを繋げるハブです︕
  4. 箱庭ドローンシミュレータの歩き⽅ 6 ①-2 シミュレーションでの実現⽅法 ①-1 ドローンの⾶⾏原理 ②-1 PX4とは ②-2 SITLとは

    ③-1 QGCとは ③-2 ドローンの動かし⽅ ④-1 ゲームエンジンの使い所 ⑤-1 箱庭の仕組み ⑤-2 構築⽅法 箱庭ドローンシミュレータの仕組みを理解するために必要な内容を説明します
  5. ドローンの構造(クアッドコプタ) 8 • クアッドコプタとは • ロータ4個で機体の推⼒とトルクを発⽣させて⾶⾏する • ロータとは • プロペラを回転させるためのモーター

    • ドローンの推⼒・トルクを発⽣させる • ロータの特性として、回転⽅向と最⼤回転数などがある • 今回の解説で使う機体 • 左右・前後を対象としています • ロータ1と2が逆回転(CCW) • ロータ3と4が正回転(CW)
  6. ドローンの並進運動 • 垂直⽅向移動 • 4つのローターを同じ回転速度で回転させることで上昇⽅向の推⼒を発⽣させます • 推⼒>質量✖重⼒︓上昇 • 推⼒=質量✖重⼒︓ホバリング •

    推⼒<質量✖重⼒︓下降 • 推⼒はローターの回転速度の2乗に⽐例します • ⽔平⽅向移動 • 左右⽅向 • 機体を左側に傾けると左⽅向へ移動します • 機体を右側に傾けると右⽅向へ移動します • 前後⽅向 • 機体を前側に傾けると前⽅向へ移動します • 機体を後側に傾けると後⽅向へ移動します 9
  7. アジェンダ 1. お話しする範囲 2. 箱庭ドローンシミュレータとは 3. ドローンの⾶⾏原理 4. ドローンの数学・物理・制御⼊⾨ 5.

    ドローンの数値シミュレーション実現⽅法 6. オープンソース技術の紹介(QGC、 PX4) 7. ゲームエンジンの使い所 8. 箱庭ドローンシミュレータの構築 9. なぜ箱庭じゃなきゃダメなのか︖ 14
  8. ドローンの数値シミュレーション実現⽅法 • 微分⽅程式を数値シミュレーションする⽅法 • オイラー法 • ルンゲクッタ法 • 機体パラメータの決め⽅(試⾏錯誤中・・) •

    本体 • 質量、機体サイズ、空気抵抗係数 • ローター • 最⼤回転数、ホバリング時の回転数、応答時間 • ローターの配置と回転⽅向、慣性モーメント、ホバリング時の回転数 • 反トルクのパラメータBとJr 16
  9. 微分⽅程式を数値シミュレーションする⽅法 • 微分⽅程式(例) • !" !# = − $ %

    (cos 𝜑 sin 𝜃 cos 𝜓 + sin 𝜓 sin 𝜑) − ! % 𝑥 = 𝐹 𝑡, 𝑥(𝑡) • オイラー法 • 時間微分を以下のように展開 • ! "#△" %! " △" = 𝐹(𝑡, 𝑥(𝑡)) • 時間 𝑡 +△ 𝑡 の 𝑥 𝑡 +△ 𝑡 • 𝑥 𝑡 +△ 𝑡 =𝐹 𝑡, 𝑥 △ 𝑡 + 𝑥(𝑡) • シミュレーションでは、 • 初期値𝑥(0) およびパラメータ決めて、 • 𝐹 𝑥 △ 𝑡 • を連続して⾜し上げていきます。 • (他の変数の値φやθ等も同様にして計算します) 17 メリット 実装が簡単 デメリット Δtを⼗分に⼩さくしないと、 誤差が⼤きくなる可能性があります。 (今回は、0.003secとしています) △ 𝑡 𝑥(𝑡) 𝑡 𝑡 +△ 𝑡 𝑥(𝑡 +△ 𝑡)
  10. 微分⽅程式を数値シミュレーションする⽅法 • 4次ルンゲ=クッタ法 • 𝑘! = 𝐹(𝑡, 𝑥(𝑡)) • 𝑘"

    = 𝐹(𝑡 + ∆$ " , 𝑥 𝑡 + ∆$ " 𝑘! ) • 𝑘% = 𝐹(𝑡 + ∆$ " , 𝑥 𝑡 + ∆$ " 𝑘" ) • 𝑘& = 𝐹(𝑡 + ∆𝑡, 𝑥 𝑡 + ∆𝑡𝑘% ) • ' $(△$ *' $ △$ = ! + 𝑘! + 2𝑘" + 2𝑘% + 𝑘& • 考え⽅ • 4つの傾きの平均値から次の時間を予測する • 𝑘& ︓時刻 𝑡 の傾き。 • 𝑘' ︓時刻 𝑡 + ∆# ' の傾き。 𝑥は 𝑘& から予測したものを利⽤ • 𝑘) ︓時刻 𝑡 + ∆# ' の傾き。 𝑥は 𝑘' から予測したものを利⽤ • 𝑘* ︓時刻 𝑡 + ∆𝑡 の傾き。 𝑥は 𝑘) から予測したものを利⽤ 18 𝑥(𝑡) 𝑡 𝑡 +△ 𝑡 𝑥(𝑡 +△ 𝑡) 𝑡 +△ 𝑡/2 𝑥 𝑡 + ∆𝑡𝑘! /2 𝑥 𝑡 + ∆𝑡𝑘" /2 𝑥 𝑡 + ∆𝑡𝑘# 𝑥(𝑡 + ∆𝑡) 𝑘& 𝑘' 𝑘( 𝑘) 1 6 𝑘! + 2𝑘" + 2𝑘# + 𝑘$ メリット 実装はそれほど難しくない オイラー法より精度が良い デメリット 計算量が若⼲多くなる
  11. 機体のパラメータ • https://www.biccamera.com/bc/item/6621239/ • 本体重量︓約80 g(プロペラとバッテリー含む) 本体サイズ(幅×⾼さ×奥⾏mm)︓98×92.5×41 19 パラメータ 役割

    単位 パラメータ値 d 空気抵抗係数 𝑁 0.0001(えいやで決めた) Ixx, Iyy, Izz 慣性モーメント K𝑔 / 𝑚" 0.0000625, 0.00003125, 0.00009375 m 機体の質量 K𝑔 0.1 Tr ロータの応答時間 𝑠 (パラメータ探索) Kr ロータのゲイン K𝑔 (パラメータ探索) A ロータ推⼒の⽐例係数 𝑁 / 𝑠" ホバリングRPM(Ω% )から逆算 𝐴 = 𝑚𝑔 4Ω% " B 反トルクの⽐例係数 𝑁 / 𝑚 / 𝑠" (パラメータ探索) Jr ロータの慣性モーメント 𝑁 / 𝑚 / 𝑠" (パラメータ探索) Rotor position ロータの配置 𝑚 左右・前後対称 幅︓0.05m Hovering RPM ホバリング時のロータ回転速度 𝑟𝑝𝑚 最⼤RPMの半分に設定 Max RPM ロータの最⼤回転速度 𝑟𝑝𝑚 教科書の参考数値で最⼤RPMが6000〜 8000rpmとあったので、8000に設定
  12. 機体パラメータの決め⽅(試⾏錯誤中) • 慣性モーメントの計算︓https://www.sky-engin.jp/blog/inertia-matrix/ • 機体のパラメータから仮定した値 • 中⼼の⽅がローターより重い • ロータ質量=(全体質量ー中⼼質量)/4 •

    半径は機体の幅と同じ • 慣性モーメントの計算式 • 𝐼! = "!#" $ • 𝐼% = 4𝑚𝑎$ • 𝐼& = '# $ (ピッチ側はロール側は同じではなさそうなので半分に) • 計算結果 20 パラメータ 値 単位 全体質量 0.1 kg 中⼼質量(c_m) 0.075 kg ロータ質量(m) 0.00625 kg 半径(a) 0.05 m パラメータ 値 Iz 0.00009375 Ix 0.0000625 Iy 0.00003125 Izの計算 Ix, Iyの計算
  13. 機体のパラメータ⼀覧 パラメータ 役割 単位 パラメータ値の決め⽅ パラメータ値 d 空気抵抗係数 𝑁 えいやで決めました

    0.0001 Ixx, Iyy, Izz 慣性モーメント K𝑔 + 𝑚! 本物の機体を参考にして、導出しました 0.0000625, 0.00003125, 0.00009375 m 機体の質量 K𝑔 本物の機体を参考にしました 0.1 Tr ロータの応答時間 𝑠 パラメータ探索 0.05 Kr ロータのゲイン K𝑔 パラメータ探索 8000 A ロータ推⼒の⽐例係数 𝑁 + 𝑠! ホバリング時のRPM値から逆算しました 1.53281e-08 B 反トルクの⽐例係数 𝑁 + 𝑚 + 𝑠! パラメータ探索 1.3e-10 Jr ロータの慣性モーメント 𝑁 + 𝑚 + 𝑠! パラメータ探索 1.0e-10 Rotor position ロータの配置 𝑚 本物の機体を参考にしました Hovering RPM ホバリング時のロータ回転速度 𝑟𝑝𝑚 本物の機体を参考にしました 4000 Max RPM ロータの最⼤回転速度 𝑟𝑝𝑚 本物の機体を参考にしました 8000 21
  14. アジェンダ 1. お話しする範囲 2. 箱庭ドローンシミュレータとは 3. ドローンの⾶⾏原理 4. ドローンの数学・物理・制御⼊⾨ 5.

    ドローンの数値シミュレーション実現⽅法 6. オープンソース技術の紹介(QGC、 PX4) 7. ゲームエンジンの使い所 8. 箱庭ドローンシミュレータの構築 9. なぜ箱庭じゃなきゃダメなのか︖ 22
  15. オープンソース技術の紹介(QGC、PX4) • ドローン⽤オープンソース技術のエコシステム • QGC • QGCとは • QGCがすごいと思ったところ(感想) •

    QGCのシミュレーションでの利⽤⽅法 • PX4 • PX4とは • PX4がすごいと思ったところ(感想) • PX4のシミュレーション⽤のアーキテクチャ 23
  16. QGCとは • 何ものか • ドローンの地上局システム⽤のアプリケーション • 主な⽤途 • 地上から機体を遠隔操作し、 •

    様々なミッションを実⾏できる • サポートしているファームウェア • PX4 • ArduPilot • 動作環境 • Windows • Linux • MacOS 25
  17. PX4とは • 何ものか • ドローンのファームウェア • オートパイロット⽤のフライトスタック • 主な⽤途 •

    様々な機体を選択できる • マルチコプター、固定翼、VTOL • 地上⾛⾏ロボット、⽔中ドローン • 豊富なソフトウェアが揃っている • 機体制御プログラム • 周辺ドライバ • 動作環境 • POSIX準拠のOS • NuttX OS(組み込み向け) • Linux、MacOS(シミュレータ向け) 36
  18. アジェンダ 1. お話しする範囲 2. 箱庭ドローンシミュレータとは 3. ドローンの⾶⾏原理 4. ドローンの数学・物理・制御⼊⾨ 5.

    ドローンの数値シミュレーション実現⽅法 6. オープンソース技術の紹介(QGC、 PX4) 7. ゲームエンジンの使い所 8. 箱庭ドローンシミュレータの構築 9. なぜ箱庭じゃなきゃダメなのか︖ 44
  19. ゲームエンジンって何︖ • あえて2つ挙げると(シミュレーションの視点で重要な機能) • 物理エンジン • レンダリングエンジン • 物理エンジンとは※ •

    質量・速度・摩擦・⾵といった,古典⼒学的な法則をシミュレーションするコンピュータの ソフトウェアである • レンダリングエンジンとは※ • レンダリングを⾏うソフトウェア部品。情報(データ)を読み込んで、特定のルールにした がい適切な表現に変換する役割を担う • レンダリングとは • データ記述⾔語やデータ構造で記述された抽象的で⾼次の情報から、コンピュータのプログラムを⽤い て画像・映像(動画)・⾳声などを⽣成すること 46 ※参照元︓ウィキペディア
  20. ゲームエンジンの種類 観点 Unity Unreal Engine 備考 初⼼者の学びやすさ ◦ △ Unreal

    Engine は、⾼度な機能を利⽤できるが、初⼼者にはどれ をどう使えば良いのか迷う。Unityは書籍も多く、導⼊障壁は低い。 グラフィックの美しさ △ ◦ Unreal Engineのグラフィックは美しい スクリプトの作りやすさ ◎ △ UnityはC#なので、作りやすい。標準で⾃動ビルドもしてくれる。 Unrealは、C++なので、初⼼者にはハードル⾼め。 UIの作りやすさ ◦ △ Unityの⽅が直感的に作れる。 ライセンス △ ◦ どちらもプライベートで利⽤する範囲では問題ないが、 商⽤利⽤する場合は、Unityの⽅がコストが⾼い 47 • ゲームエンジンには様々な種類がありますが、 • 代表的なものはUnityとUnreal Engineと思います。 補⾜︓ どちらのゲームエンジンを選ぶかは、プロジェクトのニーズや開発者の好み、または特定のスキルセットに⼤きく依存します。
  21. 箱庭で使いたいゲームエンジンの機能 50 Game Engine 物理エンジン ⼒学/運動 ⼲渉/衝突 レンダリング エンジン 3D

    ビジュアライズ カメラ/ LiDAR ユーザI/F ユーザ操作 スクリプトシステム 外乱 テスト シナリオ • ドローンのシミュレーションにおいて、ゲームエンジンの機能として使いたいもの
  22. アジェンダ 1. お話しする範囲 2. 箱庭ドローンシミュレータとは 3. ドローンの⾶⾏原理 4. ドローンの数学・物理・制御⼊⾨ 5.

    ドローンの数値シミュレーション実現⽅法 6. オープンソース技術の紹介(QGC、 PX4) 7. ゲームエンジンの使い所 8. 箱庭ドローンシミュレータの構築 9. なぜ箱庭じゃなきゃダメなのか︖ 51
  23. 箱庭ドローンシミュレータの構築 • 全体アーキテクチャ • ゲームエンジン連携 • 箱庭と接続する上で対応が必要なこと • ドローン3Dモデルの構築 •

    箱庭通信PDUデータの作成 • PX4連携 • 箱庭と接続する上で対応が必要なこと • MAVLINK通信プロトコルの理解と実装 • 物理モデルとセンサモデルのアーキテクチャ • hakoniwa-px4sim • 物理モデルの実⾏ • 箱庭コア機能との連携 52
  24. 全体アーキテクチャ 55 PX4 on SITL QGroundControl 18570/UDP Hakoniwa hakoniwa-px4sim Drone

    Physics/Sensor (C/C++) Game Engine Drone Control (C/C++) Unity Unreal Engine Scenario Test Python 4560/TCP PS4 Controller MATLAB/Simulink Generate Plant/ Sensor Model scenario parameters Simulation 箱庭は様々なソフトウェアを繋げるハブです︕
  25. ゲームエンジン連携 • 3Dモデル︓箱庭ドローン(H1号) • 中村歩⾼さんからご提供いただきました • どういうものか︖ • DroneAvator スクリプト

    • 箱庭と通信を⾏います • 位置と姿勢情報をUnity上で再現します • PWMデューティ値をプロペラ回転アニメに変換 • 障害物との衝突情報を箱庭にFBします • 衝突検出 • 機体のプロペラに衝突検出オブジェクトを設置 56 56 箱庭 位置・姿勢 PWM Duty 衝突情報 箱庭PDUデータ 3Dモデル スクリプト
  26. PX4 PX4連携 58 Hakoniwa-px4sim HIL_SENSOR HIL_GPS HIL_ACTUATOR _CONTRLS Drone Physics

    (C/C++) Drone Sensors (C/C++) Drone Actuator (C/C++) 1. アクチュエータ情報に応じて物理ダイナミクスを駆動する 2. 物理ダイナミクスの内部情報をセンサデータに変換する 3. センサデータを定期的に送信する MAVLINK通信プロトコル
  27. 箱庭コア機能 箱庭マスタ PX4 hakoniwa-px4simの内部構造 61 Aircraft Factory 箱庭アセット HIL_ACTUATOR _CONTRLS

    HIL_SENSOR HIL_GPS 箱庭アセット (Unity) 位置・姿勢 PWM Duty 衝突情報 箱庭PDUデータ MAVLINK 箱庭時間同期 Aircraft Physics Sensors Actuator 機体パラメータ create
  28. アジェンダ 1. お話しする範囲 2. 箱庭ドローンシミュレータとは 3. ドローンの⾶⾏原理 4. ドローンの数学・物理・制御⼊⾨ 5.

    ドローンの数値シミュレーション実現⽅法 6. オープンソース技術の紹介(QGC、 PX4) 7. ゲームエンジンの使い所 8. 箱庭ドローンシミュレータの構築 9. なぜ箱庭じゃなきゃダメなのか︖ 63
  29. なぜ箱庭じゃなきゃダメなのか︖ 64 • 統合的なシミュレーションハブとしての機能性 • 様々なソフトウェアやシミュレータを柔軟に接続・統合を可能にします • 今回の場合は、C⾔語ベースの物理式のプログラム、UnityやUnreal Engine、PX4等です •

    拡張性 • オープンソースであるため、⾃分のニーズに合わせてカスタマイズできます • 物理式は⽬的に応じて変更可能。MATLABで作成することもできます • コスト効率 • 箱庭は無料であり、コストを抑えながら⾼度なシミュレーションを実現可能 • 教育や研究開発、趣味のプロジェクトで⼗⼆分に活⽤できます︕ 箱庭ドローンシミュレータは、 将来的に、様々なソフトウェアやシミュレータと 連携できる可能性を秘めています︕