自動運転用の Unreal Engine シミュレーションの仕組み
R2026bAutomated Driving Toolbox™ は、Simulink® で運転アルゴリズムをモデル化し、バーチャル シミュレーション環境でパフォーマンスを可視化するために使用できるコシミュレーション フレームワークを提供します。この環境では、Epic Games® の Unreal Engine® を使用します。このコシミュレーション フレームワークにより、Automated Driving Toolbox は Unreal Engine および Simulink の間でデータを送信できるようになります。
このシミュレーション環境の仕組みを理解すると、問題のトラブルシューティングやモデルのカスタマイズに役立ちます。
メモ
3 次元可視化環境でモデルをシミュレーションするには、Simulink 3D Animation™ が必要です。
3 次元シミュレーション環境との通信
Automated Driving Toolbox を使用してアルゴリズムを実行すると、Simulink は、ロックステップ メカニズムを利用して可視化エンジンでアルゴリズムをコシミュレーションします。ロックステップ メカニズムは、シミュレーションが固定タイム ステップで進行し、2 つのシミュレーション エンジン、Simulink と 3 次元シミュレーション エンジンが順次実行される同期手法です。一方のシミュレーション エンジンが待機している間にもう一方のシミュレーション エンジンが処理を進めるため、各シミュレーションは一貫した結果を得られます。
各シミュレーション ステップにおいて次が行われます。
Simulink はアクターの変換やプロパティ、カスタム シーンの視点など、3 次元環境の初期設定を行います。また、Simulink は、3 次元シミュレーション エンジンのフィードバックを使用して、3 次元環境とアクターのコンフィギュレーション パラメーターも決定します。
コシミュレーション フレームワークは、Simulink から 3 次元シミュレーション エンジンにデータを送信します。
コシミュレーション フレームワークは、データ転送の終了を示すコマンド信号を 3 次元シミュレーション エンジンに送信します。
3 次元シミュレーション エンジンがシミュレーションを実行します。3 次元シミュレーション エンジンは、Simulink からのデータに基づいて 3 次元環境とアクターの位置を設定します。その後、3D シミュレーション エンジンは、3 次元環境とアクターに関する最新の情報を提供します。
コシミュレーション フレームワークは、3 次元シミュレーション エンジンから Simulink にデータを送信します。
コシミュレーション フレームワークは、3 次元シミュレーション エンジンからのデータ転送の終了を示す肯定応答の信号を MATLAB® または Simulink に送信します。
次の図では、Simulink と可視化エンジン間の通信の概要を示します。
ブロック実行順序
シミュレーション中に、Unreal Engine シミュレーション ブロックは次の特定の実行順序に従います。
Simulation 3D Vehicle with Ground Following ブロックが車両を初期化し、その信号データ [X]、[Y]、[ヨー] を Simulation 3D Scene Configuration ブロックに送信する。モデルに Simulation 3D Pedestrian や Simulation 3D Bicyclist などの他のアクターが含まれる場合、それらのブロックもそれぞれのアクターを初期化し、その姿勢信号を Simulation 3D Scene Configuration ブロックに送信する。
Simulation 3D Scene Configuration ブロックが車両データを受信してセンサー ブロックに送信する。
センサー ブロックが車両データを受信し、そのデータを使用して車両の位置を正確に特定して可視化する。
ブロックの [優先順位] プロパティにより、この実行順序を制御します。任意のブロックのこのプロパティにアクセスするには、ブロックを右クリックして [プロパティ] を選択し、[一般] タブをクリックします。既定では、Simulation 3D Vehicle with Ground Following ブロックの優先順位は -1、Simulation 3D Scene Configuration ブロックの優先順位は 0、センサー ブロックの優先順位は 1 です。
次の図では、この実行順序を示します。

センサーがシーン内のビークルを検出していない場合、Unreal Engine シミュレーション ブロックの実行順序が正しくない可能性があります。実行順序を更新して再びシミュレーションしてみてください。実行順序の詳細については、実行順序の制御と表示 (Simulink)を参照してください。
また、すべての 3 次元シミュレーション ブロックが同じサブシステム内に配置されていることを確認してください。ブロックの [優先順位] 設定が正しくても、異なるサブシステム内に配置されている場合は、実行順序が正しくなくなることがあります。
シミュレーション速度
シミュレーション速度は、シミュレーションの終了時間とサンプル時間に依存します。終了時間は、シミュレーションの継続時間です。サンプル時間は、シミュレーション中に出力が更新される時間間隔です。Simulink でサンプル時間を設定するには、Simulation 3D Scene Configuration ブロックでSample timeパラメーターを設定します。サンプル時間を短くすると、ソフトウェアは 1 秒間に多くのサンプルを採取するため、シミュレーション速度は低下します。
シミュレーション速度も、モデルの複雑度、計算速度、システムがシーンをレンダリングできる速度に依存しますが、これはシステム構成に依存します。MATLAB の関数profileまたは Simulink のSimulink プロファイラー (Simulink)を使用すれば、シミュレーション コンポーネント間のシミュレーション実行時間の分布を解析し、シミュレーションの各コンポーネントの計算時間を確認できます。プロファイリングの詳細については、パフォーマンス向上のためのコードのプロファイリングを参照してください。