本記事の要約
- Matlab/Simulinkを介してUnreal Engineシーンをカスタマイズしました。
- 基本は問題なく実施できましたが、2023bの件は予想外……。
目次
技術猫たちのおしゃべり
(グルルルル……)
どうしました、チャ坊主くん? 尻尾が逆立ってますが。
……はっ! 前回の大変さを思い出したら、今回もそうなんじゃないかと、つい気が立ってたっす。
警戒しすぎです。案ずるより産むが易しですよ。では早速、UnrealEngineを触っていきましょう
はじめに
という訳で、おはようございます、こんにちは、こんばんわ。
サバトラ先輩です。
本記事では、『MatlabでUnreal Engineシーン(可視化状況)をカスタマイズする方法』を記載しております。
本記事の摘要は以下の通りです。
- Unreal Engineシーンをカスタマイズする目的を簡単にまとめます。
- Mathworksさんのドキュメントを参考に、実際にUnreal Editorを触ってみました。
- シーン カスタマイズ前後でのUAV飛行ルートの違いを確認します。
宜しければご覧ください。
なお、本記事は『3D Sim環境構築(2) UAVモデル&制御則の置換』からの続きとなっていますので、
宜しければそちらの記事を先にご覧ください。
Unreal Engineシーン(可視化状況)をカスタマイズする目的
『3D Sim環境構築(1) 導入』にて3D Sim環境はひとまず構築できた訳ですが、ここで使われているUnreal Engineシーンはサンプルの物です。
制御則を開発する上で障害物の存在は非常に重要ですが、サンプルケースが1つでは満足な検証ができません。
そこで今回は、Unreal Engineシーンをカスタムし、飛行環境の障害物配置を変えてみたいと思います。
また、今後の開発でオリジナリティを演出するために、UAVの3Dモデルも変更したいと思っています。が、UAVモデルの変更方法は現時点で分からなかったので、今回は行いません。UAVモデルの変更方法は、また別の機会で調査したいと思います。
シーンのカスタマイズ手順
まずは、公式ページをご覧ください
・UAV 用の Unreal Engine シーンのカスタマイズ(MathWorksさん公式)
はい。流石、Mathworksさん。もうまとめてくれています。
という訳で、今回も公式ページを参考にしながら作業を進めるだけです。
ちなみに、記事作成時点で使用しているバージョンは2023aです。なので、「Unreal Engine 4.27」及び「Visual Studio 2019」をインストールしています。
・Unreal Engine シミュレーション環境の要件および制限(MathWorksさん公式)
実際に作業を進めていくと、以下の点だけ記述と異なりました。
記述:Cesium for Unrealプラグインをインストール後、プラグインウィンドウでMathWorks Geospatial プラグインが表示されていることを確認する(Step3内 Install Cesium for Unreal Pluginの項)
実際:表示されるのは「Cesium for Unreal」のみ。「MathWorks Geospatial」プラグインは表示されていない。
とりあえず、以降の作業は「MathWorks Geospatial」が表示されていないくても実行できたので、この件は一旦良しとします。
UAVの目前に壁を追加
さて、前項まででUnrealEditorを使ったシーンのカスタマイズ手順が分かったので、次は障害物がきちんとUAVに認識されるかテストしたいと思います。
この手の3Dを使っていると「編集者の見た目上は追加されていても、シミュレーションに反映されていない」なんてざらにありますので、油断は禁物です。
今回は、『3D Sim環境構築(1) 導入』のサンプル時点でUAVに接触回避機能が備わっていますので、これを利用して以下を試してみます。
・UAVは目の前に出現した壁を避けて飛行してくれるか?
つまり、UAV飛行のスタート地点目前に新しく壁を設置してやり、UAVが飛行ルートを変えてくれればテストは成功です。
……という訳で、実際に壁を追加した物がこちらになります。
アセットにあった3Dモデルを適当に選んだ物であり、無理やり拡大&宙に浮かせるという荒業をしていますが、ひとまずの確認ということでご容赦ください。
壁の有無による飛行ルートの違い
壁も準備できたので、早速テストをしてみます。
以下に、壁が無い場合と、壁が有る場合の3Dシミュレーション結果を動画で示しました。
テスト:壁の有無による飛行ルートの違い(動画は5倍速)
2つの動画を比較すると、明らかに飛行ルートが変わっています。
壁が無い場合は指定通りルートを直進し、壁がある場合は障害物を迂回しようとクルクル回っています。後者はスタックしているみたいですが、テストなのでそれもまた良しです。
以上の結果から、Unreal Engineを用いた飛行環境のカスタマイズは無事に成功していることが分かりました。
今後、飛行環境のカスタマイズを行う際は本記事の方法を用いたいと思います。
おまけ:Matlab 2023bだと上手くいかなかった……
おまけです。タイトル通りです。困りましたね。
……いや、すみません。筆者も原因が分かっていませんが、備忘録なので一先ず記録を残します。
本記事の手順をMatlab 2023bでも試してみたのですが、MatlabからUnreal Editorを起動して「さぁ、シミュレーションを流すぞ」という段階でインターフェースエラーが出てしまいました。
その後原因を探っている時に気づいたのですが、Matlab 2023bだと『3D Sim環境構築(1) 導入』でのUAV描写がそもそも上手くいっていません。
以下の画像は、3Dシミュレーションを実行した際のカメラ画像を2023aと2023bで比較した物になります。
なお、ここでいうカメラ画像は、UAVに搭載したカメラではなく、シミュレーション自体の描画カメラになります。なので、今回で言えば、UAVが常に写されているのが正常です。
図中にも記載しましたが、2023bの場合はスタート位置が違いますし、その後もカメラ位置が固定されています。
シミュレーション自体は問題無く進行していますので、UAVが消失している訳では無いようです。恐らく、UAVオブジェクトにカメラが紐づけられていない状態になっていると推測します。
Matlab 2023bはデフォルトのシミュレーションですらこの状態なので、UnrealEditorとのインターフェースにエラーがでるのも宜なるかな、といった所です。
そして、この現象が起きている肝心の原因は、残念ながら突き止められておりません。
2023aと2023bでアドミンは揃えているし、アップデートも行っており、サンプルからモデルを一切変更せず試してみたので、バージョンの違いに鍵があるのではないかと思うのですが……*1。
とりあえず2023aでは正常に動作するので、「以降の検証は2023aで進める」ということで本件は一旦幕を閉じることにします。
*1:これは完全に憶測の話になりますが、個人的には、以下のページにも記載のある「ブロックの優先順位」が気になっています。
・UAV 用の Unreal Engine シミュレーションの仕組み(MathWorksさん公式)
Matlab 2023bでは優先順位に関する仕様で変わっている所があるので、この辺りが鍵なんじゃないかなぁ……、と睨んでいますが、これ以上は深入りできそうにないです。今後のアップデートで正常になることを期待します。
次回記事の予定
これっすよこれ!これぐらい簡単なのが良いっす!
壁ありでUAVくんが困惑する動画も撮れましたし、理想的な流れでしたね。
あ~、キョロキョロしてて、ちょっと可哀そうな感じしたっすね、あれは。
開発作業は、機体を苛め抜く作業だと心得てください。逆境を糧に、機体がどんどん強くなる様を眺めるのが私たちのカタルシスです。
ははは、先輩ってド変態っすね。思考がちょっと規制ギリギリっすよ。
!?
- ☑UAVモデル&制御則の変更
- ☑Unreal Engineシーン(可視化状況)の調整
障害物や風況などのフライト周辺環境を設定(Unreal Editorで設定できそうなので、上の『シーン調整』に統合)- フライトログの取得
- 複数機同時飛行
じゃあ、ちょっとダメージを負ったんで、今日はここまでということで……。
次回は11/29(金)に更新予定っす。よろしくお願いしまっす!