LoginSignup
0
0

MATLAB / Simulink で作ったシミュレーションを Unreal Engine で可視化して遊ぶ 【後編】

Last updated at Posted at 2023-05-13

前回の記事に引き続き後編。

手順

Unreal Engine (UE) 側の設定と、アクターの配置や、ブループリント、アニメーションの編集がメイン。前記事のUnreal Editor を開くでUEを起動した直後からの手順。
前記事同様、自分がつまずいたところを中心に、その他は参考リンクに任せる。

Unreal Engine 側

シーンの作成

シーン = 運転コースなどの走行環境を自由に作る(もっともクリエイティブな部分?)。
参考リンク-1
例:本記事ではスプライン道路のみ
image.png

アクターをシーン内で動かす

Simulation 3D Actor Transform Set ブロックを使うと簡単にできる
参考リンク-2

  1. コンテンツブラウザ > ソースパネル > MathWorksSimulation C++クラス > MathWorksSimulation > Public > Sim3dActor をベースにブループリントクラスを作成する(この記事ではVehicleSedanと名付ける)

  2. ブループリントにSkeltal Mesh コンポーネントを追加し、DefaultSceneRootを上書きする

    Static Mesh を選ぶと後でアニメーションがつけれない。タイヤを曲げたりハンドルを回すアニメーションをつけたい場合は必ずSkeltal Meshに!

  3. 好きなSkeltal Meshを選択。デフォルトで MathWorks の用意したものもあるが、オプションでオリジナルのものを作ってもいい(参考リンク-3,4

  4. VehicleSedanブループリントをシーンに配置し、アクタ > Tags に Simulation 3D Actor Transform Set ブロックの3D シーンのアクターのタグ、ActorTag []で設定した名前を追加(この記事ではMySedanとする)

  5. レベルブループリント > ファイル > ブループリントの親を変更 で 親を必ずSim3DLevelScriptActorに変更しておく

    これを忘れると、UEがクラッシュする。

  6. Simulinkモデルを実行し、左下に初期化中の表示が出たら、Unreal Editorでプレイして、アクターが動くのを確認する

カメラの設置

参考リンク-5,6 のような方法もあるが、今回はSimulation 3D Actorブロックを使って実現した。

  1. Simulation 3D Actorプロパティの親の名前MySedanを設定
  2. アクター名プロパティにカメラアクターの名前を付ける(この記事ではCameraMountedとする)
  3. Simulation 3D Scene ConfigurationのプロパティシーンビューCameraMountedを設定

前回記事に説明用のスクリーンショットあり。

アクターにアニメーションをつける

筆者が一番苦労した部分。参考リンク-5に、C++を使用したアクターのアニメーション化の方法はあるが、ブループリントで実現する方法を探った。いろいろ模索した結果、Simulation 3D Message Setブロックでアニメーション情報をUEに送るという手段に落ち着いた。

一方C++での方法は、Simulation 3D Actor Transform Setのみでアニメーションも実現している。ブループリントでも同じようにできないか試行錯誤したが、わからず断念。知っている方がいたら、コメント等で情報お待ちしております。

アニメーションBPの作成

参考リンク-7

今回アニメーションにするのは、タイヤ4輪の回転方向の角度と、前2輪の曲げ方向の角度とする。

  1. コンテンツブラウザ > 追加/インポート > アニメーション > アニメーションBP を選択

  2. 親クラスをAnimInstanceに、ターゲットスケルトンはブループリント作成時に指定したものと同じ Skeltal Mesh を指定(この記事ではSedanAnimBPと名付ける)

  3. AnimGraphを編集する
    image.png

    ボーンをトランスフォーム(修正)するノードの設定で、Bone to Modify, Rotation Mode, Rotation Space を正しく設定する。

    image.png

  4. コンパイルして、変数を変化させながらプレビューで動作確認

アニメーション情報をSimulinkから取得

参考リンク-8

  1. アクタを配置 > クラスの検索 から Sim3dGetFloat を検索してシーンに配置
  2. レベルブループリントで、Sim3dGetFloatで取得した配列をVehicleSedan内の変数にセットする
    例:VehicleSedanにあらかじめセットした変数を作成しておく(ここでは配列としてセット)
    image.png
  3. コンパイルする

ブループリント(VehicleSedan)とアニメーションBP(SedanAnimBP)を紐づける

  1. VehicleSedanビューポートの詳細設定 > アニメーション > Anim Class でSedanAnimBP_Cを検索して指定する
    image.png
  2. イベントグラフで、レベルブループリントでセットした変数をSedanAnimBPにキャストする
    例:VehicleSedanの変数を必要に応じて加工してからSedanAnimBPにキャスト
    image.png
  3. コンパイルし、Simulinkモデルを実行
  4. UEでプレイし、アクターが動くのと同時にアニメーションも動いていることを確認(下のgifではタイヤも回転しているが、見えない...)
    VehicleSimulation_large.gif

さいごに

仕事でMATLABを使用しているときにUEと連携できることを知り、GWの課題としてこの記事の内容を仕上げた。UEの編集は初心者だったが、ブループリントはSimulink同様に視覚的にプログラムできるので、学習ハードルは低く、楽しんで作業できた。
Simulinkでモデルを作りUEで可視化するこの方法は、個人の趣味として楽しくシミュレーション開発プロセスを学びながら、なおかつタイムパフォーマンスにも優れた方法だと感じた。

参考リンク

  1. Landscape Road Spline 【動画】
  2. Connect a Physical Model in Simulink to Unreal Engine | AUV Deep Dive, Part6 【動画】
  3. Preparing A Custom Vehicle Mesh for the Unreal Editor【動画】
  4. Unreal Editor 用のカスタム車両メッシュの準備
  5. Animate Custom Actors in the Unreal Editor
  6. Place Cameras on Actors in the Unreal Editor
  7. Fully Drivable Kinematic Car from Scratch - Unreal Engine 5 Blueprints Tutorial 【動画】
  8. Get Started Communicating with the Unreal Engine Visualization Environment
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0