3D Sim環境構築(2) UAVモデル&制御則の置換

本記事の要約

  • MathWorksさんの公式UAV 3Dシミュレーションサンプルに、別のUAVモデルと制御則を持ってきました。
  • ……が、ライセンス制限により置換するとシミュレーションが実施できなくなりました。
  • 今後はとりあえず、サンプルのモデルと制御則をそのまま使うことにします。

技術猫たちのおしゃべり

それじゃあ先輩!前回同様、チャチャっと環境構築進めちゃいましょう!

うーん、どうですかねぇ。公式さんのドキュメントから外れると、途端に茨の道になる可能性が少なからず……

大丈夫っすよ! だって、UAVのモデルとコントローラを入れ替えるだけでしょ? 簡単簡単!

前向きなのは素晴らしいですが、果たしてどうなるやら……


はじめに

という訳で、おはようございます、こんにちは、こんばんわ。
サバトラ先輩です。

本記事では、MATLABのUAV Toolboxを活用した『UAVモデル&制御則の置換』を実践してみた結果を記述します。

しかし、先に結論を書きますと、今回はHomeライセンスにおけるブロック数の縛りの関係で、『UAVモデル&制御則の置換』は最後まで実施できませんでした。

それでも宜しければ、ご覧いただけると幸いです。

なお、前回の『3D Sim環境構築(1) 導入』からの続きとなっていますので、
宜しければそちらの記事を先にご覧ください。


UAVモデル&制御則を置換する目的

前回で3D Sim環境はひとまず構築できた訳ですが、ここで使われているUAVモデルとUAV制御則はサンプルの物です。
つまり、このままでは実機で使いたいUAVの機体運動を模擬した3Dシミュレーションが実施できないということです。
それは翻って、実環境を考慮した制御則開発ができず、実機試験が行えないことを意味します。今後を考えると、それは都合が良くないです。

そこで今回は、サンプルのUAVモデルとUAV制御則を実機で使う予定のある「Parrot minidrone mambo」の物に置き換え、今後は実環境を想定した制御則開発が実施できるようにと思います。
しかし、置換を行うにあたり、「UAVモデルと制御則を置換すると言うけど、一体どこからどこまでのブロックを置き換えればいいの?」という疑問があります。
その問いに答えるため、まずは本記事において『UAV制御則』とは何かを明確にしたいと思います。


UAV制御則の定義

『UAV制御則』とは、簡潔に言えば『UAVのコンピュータに書き込まれた制御システム』のことです。
つまり、UAVモデルや環境設定など、現実を模擬したブロック以外の全てが『UAV制御則』であると言えます。

本記事においては『UAV制御則』を以下の機能を持つシステムと定義します。
なお、これらは一先ずざっくりと定義したものですので、適宜修正が入るかもしれません

  1. 「機体センサ」及び「GCSコマンド」を入力とする。
  2. UAVのアクチュエータへの「制御コマンド」を出力とする。
  3. センサ情報に基づいて機体姿勢または機体位置を目標値に近づける「フィードバック制御」を実施する。
  4. フィードバック制御の計算結果をUAVの各アクチュエータに振り分ける「ミキサー」機構を機体に応じて設定する。
  5. 制御で用いやすいようにセンサ情報の補正及び推定を行う。
  6. ウェイポイント(WP)に基づき飛行ルート(フライトパス)を生成し、機体の目標位置を計算する。
  7. 取得した画像を処理し、状況に応じて飛行ルートの変更を行う。

さて、これでUAV制御則については定義できました。しかし、上記の定義は機能の名称が無く、また機能が細分化されているので、今回のように制御則全体に関して論じる場合は煩雑でいけません。
よって、これらの機能を以下のように大まかに分類して、機能名を定義します。

  1. インターフェース機能:UAV制御則と他装置のデータをやりとりする。(1,2)
  2. コントロール機能:機体運動を制御し、安定飛行、目標追従を実現する。(3,4)
  3. ナビゲーション機能:機体状況及び周辺環境の計測並びに検知する。(5)
  4. ガイダンス機能:与えられた目標を達成するために、飛行ルート、機体速度、高度などを決定する。(6,7)

なお、上記分類の名称を定義するにあたって、以下の資料を参考にさせて頂きました。
鳥のように飛行する小型無人航空機・飛行ロボットの近未来自律制御技術
 引用元:野波健蔵. “鳥のように飛行する小型無人航空機・飛行ロボットの近未来自律制御技術.” 人工知能 34.2 (2019): 215-221.


置換の対象ブロック

それでは本題です。3D Sim環境構築(1) 導入』で展開したSimulinkモデルの全体像は以下の通りになります。

今回変更したいのは機体運動に関わるUAVモデルと制御則です。なので、GCS、カメラ、Lider機能などの機体と独立した部分はそのまま残したいと思います。

そして、上記のSimulinkモデルを細部まで確認したところ、以下の「Multirotor」ブロックがUAV制御則に該当することが分かりました。

「Guidance Logic」ブロックはガイダンス機能、「Inner Loop and Plant Model」ブロックはUAVモデル、コントロール機能及びナビゲーション機能、左右にある「OBCMsgs、GCSCommands、OBCCommands、UAVState」はインターフェース機能に該当します。
このうち、機体の目標位置/方位を決めるガイダンス機能と、入出力を制御するインターフェース機能は、機体運動とは独立して定義できます。よって、ガイダンス機能及びインターフェース機能も置換の対象外とします。

以上のことから、今回の記事で置換する対象ブロックは「Inner Loop and Plant Model」ブロックであることが確認できました。
以降では、この「Inner Loop and Plant Model」をどのように置換するかについて言及します。


Inner Loop and Plant Modelの確認

「Inner Loop and Plant Model」の中は以下のようになっています。
以下の画像では高精度モデルの方をお見せしていますが、これは高精度の方が情報が多く区分が分かりやすかったからです。

ブロックを大別すると、「UAVモデル」「環境模擬」「コントロール機能」の3つです。「UAVモデル」は「コントロール機能」と「環境模擬」からの入力に応じて機体運動を計算し、計算結果を「UAV State」として「コントロール機能」にフィードバックしています。センサ模擬はなく機体情報が直接フィードバックされるので、ナビゲーション機能も用意されていません。
シミュレーションであればこれで問題ないですが、ナビゲーション機能が無いので現実では正常に動作しないことが想定されます。

以上が「Inner Loop and Plant Model」の説明になります。この確認で、「UAVモデル」「環境模擬」「コントロール機能」が明確に分かれており、また「ナビゲーション機能」が存在しないことが分かりました。後は、それぞれの機能に対応するブロックを他所から持ってきて、そのままそっくり置換すれば当初の目的が達成できそうです。


parrot minidrone mambo対応のUAVモデルと制御則へ変更

今回、置換するUAVモデル&制御則は、parrot minidrone mamboの物になります。
具体的には、アドミン「Simulink Support Package for Parrot® Minidrones」に付随されている「parrotMinidroneCompetition」モデルです。
参考となる公式ページを以下に記載します。
Fly a Parrot Minidrone and Detect Objects(MathWorksさん公式)

ちなみに、今回このモデルを使用する理由は、以前筆者がMathworksさん主催の「Minidrone Competition」に参加して本モデルに慣れ親しんでいるからです。

さて、この「parrotMinidroneCompetition」において、「UAVモデル」「環境模擬」「UAV制御則」は以下の通りとなります。

また、「UAV制御則」の各機能は以下の通りに実装されております。

ParrotMinidroneモデルでは「センサ模擬」と「ナビゲーション機能」も実装されていますが、各機能の繋がり(入出力インターフェース)はほとんど同じです。
よって、各ブロックをコピペすれば簡単に置換ができそうです。

実際は以下の設定が追加で必要でしたが、このことさえ把握しておけば、置換作業は比較的簡単に済みました。

  • アドミン「Simulink Support Package for Parrot® Minidrones」を使用するMATLAB上でインストールする。
  • 置換した各モデルに、元のモデル「uavPackageDelivery」で使用しているデータディクショナリを設定する。
    やり方:Simulink上で設定したいモデルに移動し、上部タブの「モデル化」→「モデル設定」→「モデルプロパティ」を選択。「外部データ」タブからデータディクショナリの「参照」ボタンをクリックし、該当のディクショナリファイルを設定する。
  • 「モデル ワークスペース データの変更」の公式ヘルプを参考にして、必要に応じてモデルのワークスペースデータを設定する。
  • 置換した各モデル内の入出力データについて、必要に応じてデータ型を変更する。特にバスデータは変数名の参照に関わってくるので変更を要する場合がほとんど。
  • 置換した後のUAVモデルに、元のモデルを参考にしながらGPS模擬を追加する。

特に、データディクショナリの設定は今後も大事になるテクニックだと思います。これを使えば、既存モデルを参照してモデル階層を構築した際に、最上位モデルで使用しているデータを既存モデルでも使用できるので便利です。

モデル参照については本題じゃないので、この記事では参考になる公式ページだけ以下に記載しておきます。
モデル参照の基礎(MathWorksさん公式)


Homeライセンスでの制限

上述の置換作業が終わり、いざシミュレーションを実施しようとした所、以下のエラーが発生しました。

エラー:ブロック線図 'MultirotorModel' 内のブロックとそれを参照するすべてのモデルの数は、1000 個の非バーチャル ブロックのライセンスの制限を超えています。

今までこの制限に掛かったことが無かったので全く気にしていませんでしたが、確かに下記ページにも「モデルは (参照モデルのブロックを含む) 1000 個の非バーチャル ブロックに制限されます」と記載されています。
MATLAB Home(MathWorksさん公式)

つまり、Homeライセンスでは上述のUAVモデル&制御則置換は実施できない(正確にはシミュレーションができない)ということですね。なんてこったい。

参考までに、各モデルに含まれているブロックの数を確認したので、以下にリスト化します。

1.Parrot minidrone mamboモデル

  • UAVモデル(線形):21
  • UAVモデル(非線形):267
  • UAV制御則:635
  • (内訳 コントロール:164、ナビゲーション:455、ガイダンス:3、画像処理:13)
  • センサ&環境模擬:372

2.UAVPackageDeliveryモデル

  • Inner Loop and Plant Modelブロック*1(簡易):303
  • Inner Loop and Plant Modelブロック*1(高精度):762
  • Guidance Logicブロック*2:59
  • オンボードコンピュータ(GCS インターフェース&衝突回避演算機能)*3:40
  • 外部センサー(カメラ&Lidar):28

*1:「UAVモデル+UAV制御則(ガイダンス除く)+環境模擬」がまとまったモデル
*2:「UAV制御則(ガイダンス)」に該当するモデル
*3:OBCは本来、UAV制御則(ガイダンス)に属する気がしますが、本モデルではMultirotorモデルの外にいるので別枠としました

ブロックの数え方は、下記のヘルプを参考にしました。
非バーチャルブロックの数(MathWorksさん公式)

上記リストから、「parrotMinidroneCompetition」モデルは「UAV制御則」と「センサ模擬&環境模擬」だけで1000ブロックを超えているのが分かります。ブロックが多いという事はそれだけ実環境に則していると言えますが、Homeライセンスにおいてブロックが多いのは致命的です。

ブロックの制限内に収まるようモデル内のブロック構成をリファクタリングしても良いのですが、それだと労力が嵩む上、当初の目的だった「実環境を想定した制御則開発が実施できるようにする」という状況からどんどん遠ざかることになります。これでは本末転倒です。

また、ぎりぎりブロックの制限内に収まった所で、今後の制御則開発で新機能を追加する度、このブロック数制限の問題が付いてまわります。
制限の無いライセンスへと切り替えることも検討しましたが、やはりコストが一気に上がるため、勉強段階で手を出すのは得策ではないというのが結論です。

以上のことから、残念ですが、今回の『UAVモデル&制御則の置換』はここまでにしたいと思います。


UAVモデル&制御則に関する今後の方針

ひとまずの間は、元々「UAVPackageDeliveryモデル」で使用されているUAVモデル&制御則のままで、UAV制御則の開発を続けたいと思います。
なお、使用するのは簡易版のモデルです。高精度のモデルは現状でもブロック数が900弱あり、今後の開発で制限を超える恐れが出てくるからです。

もちろん、現状のモデルを使用する場合、機体運動に関する検討は十分にできません。
なので、コントロール機能とナビゲーション機能については深入りせず、概要設計に留めたいと思います。

ただ、実機実装のためにMatlab Coderを使用するため、いつかはライセンスをブロック数制限の無い物に切り替えます。
その時には、今回の『UAVモデル&制御則の置換』を再トライしたいですね。


次回記事の予定

チーン……(返事が無い。ただの屍のようだ)

いやー、まさかライセンス制限に引っかかるとは。でもまあ、お手頃価格のライセンスなのでしょうがないですね。

いや、その前に、置換作業で学ぶことが多いっす。死ぬかと思ったっす

あぁ、そっちですか……。まあ、『UAVモデル&制御則の変更』は一先ずこれで終わりなので、ToDoリストを眺めてながら休んでください

  • ☑UAVモデル&制御則の変更
  • Unreal Engineシーン(可視化状況)の調整
  • 障害物や風況などのフライト周辺環境を設定
  • フライトログの取得
  • 複数機同時飛行

うへぇ。今回のことを考えると、他も大変そうっすねぇ

多分、今回のが一番大変ですから。次回の「Unreal Engineシーン(可視化状況)の調整」は比較的楽だと思いますよ、きっと。

次回は11/17(水)に更新予定っす。よろしくお願いしまっす!