このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Unreal Engine シミュレーションのウェイポイントの選択
この例では、3D シミュレーション環境でシーンから一連のウェイポイントを選択し、これらのウェイポイントを追従する車両のパスを可視化する方法を説明します。この環境では、Epic Games® の Unreal Engine® を使用します。
はじめに
Automated Driving Toolbox™ は Simulink® に Unreal Engine シミュレーション環境を統合します。シミュレーション環境に関連した Simulink ブロックは、drivingsim3d
ライブラリにあります。これらのブロックにより、以下を行うことができます。
シミュレーション環境のさまざまなシーンを選択する。
シーンに車両を配置して移動させる。
車両にセンサーを取り付けて設定する。
車両の周囲の環境に基づいてセンサー データをシミュレートする。
この強力なシミュレーション ツールは、自動運転アルゴリズムの開発、テスト、パフォーマンスの確認を行う際に実データを補完するために使用できます。車両モデルとともにこの環境を使用して、知覚から制御に至る自動運転スタック全体が含まれた現実的な閉ループ シミュレーションを実行できます。
この環境を使用する際の最初のステップは、シーンを理解し、目的の車両パスに沿ったウェイポイントを選択することです。このステップは、位置推定アルゴリズムがテスト対象ではないシナリオで特に役立ちます。この例では、この最初のステップに焦点を合わせています。
この例では、次のことを行います。
MATLAB® でシーンを可視化する。
シーンのパスに沿ってウェイポイントを対話的に選択する。
シミュレーション環境を設定する。
パスに沿って車両を移動する。
シーンの可視化
まず、MATLAB® でシーンを可視化します。シーンの 2D 上面ビューをイメージに投影して、各シーンを可視化できます。各シーン イメージは、シーンのイメージとワールド座標のピクセル間の関係を記述するクラスimref2d
の、対応する 2 次元空間参照オブジェクトをもちます。関数 helperGetSceneImage
を使用して、シーン イメージおよび関連付けられた空間参照を取得します。この例では、あらかじめ用意された大型駐車場のシーンを使用しています。カスタム シーンのシーン イメージおよび空間参照を生成するには、代わりに、Create Top-Down Static Map of Unreal Engine Sceneで説明しているプロセスに従ってください。
sceneName = 'LargeParkingLot';
[sceneImage, sceneRef] = helperGetSceneImage(sceneName);
シーンの物理的寸法をよりよく理解するには、変数 sceneRef
を調べます。XWorldLimits
プロパティおよび YWorldLimits
プロパティは、X 方向および Y 方向におけるワールドの範囲を指定します。
sceneRef.XWorldLimits % (in meters)
ans = 1×2
-78.6000 72.6000
sceneRef.YWorldLimits % (in meters)
ans = 1×2
-77.7000 73.5000
関数 helperShowSceneImage
を使用してシーン イメージを可視化します。次の補助関数は、Figure ウィンドウにシーン イメージを表示します。パン ツールとズーム ツールを使用してシーンを探索します。
hScene = figure; helperShowSceneImage(sceneImage, sceneRef) title(sceneName)
ウェイポイントの対話的な選択
シーンを探索した後で、一連のウェイポイントを選択して、車両が追従するパスを定義します。このパスを使用してシーン内で車両を移動できます。補助関数 helperSelectSceneWaypoints
を使用して、シーン内のウェイポイントを対話的に選択します。
hFig = helperSelectSceneWaypoints(sceneImage, sceneRef);
この補助関数は、選択したシーンが含まれた Figure ウィンドウを開きます。
シーンを探索するには、シーン イメージ全体にわたってズームとパンを行います。ズームするには、マウスのスクロール ホイールまたは座標軸ツール バーを使用します。座標軸の端にカーソルを合わせて、その方向にパンします。
パスの描画を開始するには、シーンをクリックします。パスは、複数の点で構成されるポリラインとして作成されます。パスの描画を終了するには、ダブルクリックまたは右クリックします。
パスの描画が完了したら、[Export to Workspace] をクリックし、MATLAB ワークスペースに変数をエクスポートします。開いたダイアログ ボックスで、[OK] をクリックして、ワークスペースに一連の変数をエクスポートします。
以下のデータが MATLAB 変数としてワークスペースにエクスポートされます。
ウェイポイント: 各要素にワールド座標のウェイポイント の "M" 行 2 列の行列を含む cell 配列。cell 配列の各要素は、異なるパスからのウェイポイントに対応します。
パスの姿勢: 各要素に各ウェイポイントの姿勢を含む姿勢 の "M" 行 3 列の行列を含む cell 配列。 および はメートル単位で指定します。 は度単位で指定します。
% Load variables to workspace if they do not exist if exist('refPoses', 'var')==0 || exist('wayPoints', 'var')==0 % Load MAT-file containing preselected waypoints data = load('waypointsLargeParkingLot'); data = data.waypointsLargeParkingLot; % Assign to caller workspace assignin('caller', 'wayPoints', {data.waypoints}); assignin('caller', 'refPoses', {data.refPoses}); end
エクスポートされた変数には、一連のウェイポイント (wayPoints
) および一連の姿勢 (refPoses
) が含まれるようになります。関数smoothPathSpline
を使用して、一連の姿勢を 連続のパスに変換します。
numPoses = size(refPoses{1}, 1); refDirections = ones(numPoses,1); % Forward-only motion numSmoothPoses = 20 * numPoses; % Increase this to increase the number of returned poses [smoothRefPoses,~,cumLengths] = smoothPathSpline(refPoses{1}, refDirections, numSmoothPoses);
モデルおよびシミュレーション環境の設定
VisualizeVehiclePathIn3DSimulation
Simulink モデルを開きます。このモデルは、Simulation 3D Scene Configurationブロックを使用して目的のシーンを選択します。この例では、Large Parking Lotシーンを使用します。Simulation 3D Scene Configuration ブロックは、環境を設定して、Simulink とシミュレーション環境間の通信を確立します。
if ~ispc error(['3D Simulation is only supported on Microsoft', char(174), ' Windows', char(174), '.']); end modelName = 'VisualizeVehiclePathIn3DSimulation'; open_system(modelName); snapnow;
パスに沿った車両の移動
Simulation 3D Vehicle with Ground Followingブロックを使用し、シーン内で車両を配置して移動させます。モデルは、From Workspace (Simulink)ブロックを使用してワークスペースからの変数 refPosesX
、refPosesY
、および refPosesT
を受け入れるように設定されます。newRefPoses
の 、、および を別個の時系列に分けます。モデルは、これらのワークスペース変数を読み取って車両の位置を更新します。
% Configure the model to stop simulation at 5 seconds. simStopTime = 5; set_param(gcs, 'StopTime', num2str(simStopTime)); % Create a constant velocity profile by generating a time vector % proportional to the cumulative path length. timeVector = normalize(cumLengths, 'range', [0, simStopTime]); % Create variables required by the Simulink model. refPosesX = [timeVector, smoothRefPoses(:,1)]; refPosesY = [timeVector, smoothRefPoses(:,2)]; refPosesT = [timeVector, smoothRefPoses(:,3)];
モデルをシミュレートするときに、シミュレーション環境を初期化するために数秒間必要です。この初期化が完了すると、シミュレーション環境の可視化のための別のウィンドウが開きます。以下のイメージは、シミュレーション環境のウィンドウのスナップショットです。
シミュレーションを実行します。Figure ウィンドウのプロットに、車両がシミュレーション環境内を移動するパスが表示されます。
sim(modelName);
% Close the model and figure windows.
close(hFig)
close_system(modelName)
close(hScene)
参考
ブロック
関数
関連するトピック
- Create Top-Down Static Map of Unreal Engine Scene
- Design Lane Marker Detector Using Unreal Engine Simulation Environment
- Unreal Engine シミュレーションを使用した自動バレー パーキングの可視化
- Unreal Engine 環境でのビジョン センサーとレーダー センサーのシミュレーション
- 自動運転用の Unreal Engine シミュレーション
- Coordinate Systems for Unreal Engine Simulation in Automated Driving Toolbox