メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MATLAB 関数を使用した RoadRunner Scenario のシミュレーション

この例では、MATLAB® 関数を使用して RoadRunner Scenario のシナリオを実行して可視化する方法を示します。MATLAB 関数を使用して、RoadRunner Scenario をプログラムにより制御できます。実行できる一般的なプログラム タスクには次のようなものが含まれます。

  • RoadRunner Scenario アプリケーションの開閉。

  • シーン、シナリオ、プロジェクトの開閉と保存。

  • シナリオのインポートとエクスポート。

RoadRunner Scenario では、シナリオのエージェントをインタラクティブに設計およびシミュレーションできます。これらのエージェントの動作を確認するには、シナリオ シミュレーションの実行および結果解析のプロセスを自動化すると便利です。次の例では、Automated Driving Toolbox™ を使用して RoadRunner Scenario を起動し、シミュレーションの構成と実行を行い、その後シミュレーション結果をプロットする方法を学習します。

この例を実行するには、次のことが必要です。

  • Automated Driving Toolbox™ のライセンスがある。

  • RoadRunner のライセンスがあり、製品がインストールされている。

  • RoadRunner Scenario のライセンスがあり、製品がインストールされている。

  • RoadRunner プロジェクト フォルダーが作成されている。

次の例では、環境を設定して MATLAB と RoadRunner の間に接続を作成する方法の概要を説明します。詳細なチュートリアルについては、Connect MATLAB and RoadRunner to Control and Analyze Simulations (Automated Driving Toolbox)を参照してください。

RoadRunner Scenario を起動するための環境の設定

MATLAB 関数を使用して RoadRunner Scenario をプログラムにより制御するには、roadrunner オブジェクトを使用します。既定では、roadrunner は使用しているプラットフォーム (Windows® または Linux®) での既定のインストール フォルダーから RoadRunner を開きます。以下は、プラットフォーム別の既定のインストール場所です。

  • Windows – C:\Program Files\RoadRunner R20NNx\bin\win64

  • Linux、Ubuntu® – /usr/local/RoadRunner_R20NNx/bin/glnxa64

R20NNx は使用している MATLAB リリースです。

RoadRunner Scenario のインストール場所が既定の場所とは異なる場合は、MATLAB settings API を使用して RoadRunner Scenario のインストール フォルダーの既定値をカスタマイズします。

RoadRunner Scenario セッションを開く

関数 roadrunner を使用して roadrunner オブジェクトを作成し、RoadRunner Scenario セッションを開始できます。関数 roadrunner には、RoadRunner プロジェクトの場所を指定する引数が必要です。RoadRunner プロジェクト フォルダーには通常、AssetsExportsProjectScenariosScenes の各サブフォルダーがあります。

プロジェクトの作成場所を指定して関数 roadrunner を使用し、RoadRunner でプロジェクトを開きます。次の例では、RoadRunner は Windows の既定の場所にインストールされていると仮定しています。

既存のプロジェクトのパスを指定します。たとえば、次のコードは、C:\RR\MyProject にあるプロジェクトのパスを示しています。この関数は roadrunner オブジェクト rrApp を返します。このオブジェクトは、シーンやプロジェクトの開閉や保存などの基本的なワークフロー タスクを実行する関数を提供します。

rrProj = "C:\RR\MyProject";
rrApp = roadrunner(rrProj,InstallationFolder="C:\Program Files\RoadRunner R2025a\bin\win64");

rrApp オブジェクトと、開こうとしている特定のシナリオのファイル名を指定して openScenario 関数を使用することで、RoadRunner Scenario で既存のシナリオを開きます。たとえば、RoadRunner プロジェクトに既定で含まれる TrajectoryCutIn シナリオ ファイルを開きます。この関数により、MATLAB を介して、RoadRunner Scenario アプリケーションで目的のシナリオが開きます。

openScenario(rrApp,"TrajectoryCutIn.rrscenario");

シナリオのシミュレーション

シナリオが RoadRunner Scenario に読み込まれたら、createSimulation 関数を使用して ScenarioSimulation オブジェクトを作成し、シミュレーション タスクを自動化します。この ScenarioSimulation オブジェクトにより、シナリオのシミュレーションをプログラムにより操作できるようになります。

rrApp オブジェクトを関数 createSimulation の入力引数として指定します。この関数により、ScenarioSimulation オブジェクト rrSim が作成されます。

rrSim = createSimulation(rrApp);
Connection status: 1
Connected to RoadRunner Scenario server on localhost:51335, with client id {10e965dc-213f-4c2e-a947-858f71d22e57}

シミュレーションの最大時間を 10 秒に設定します。set 関数を使用し、rrSim オブジェクト、設定する変数の名前、その変数の値を入力引数として指定します。

maxSimulationTimeSec = 10;
set(rrSim,MaxSimulationTime=maxSimulationTimeSec);

シミュレーション結果のログ記録を有効にし、後で結果をプロットできるようにします。

set(rrSim,Logging="on");

シミュレーションを開始します。while ループを使用してシミュレーションのステータスをモニタリングし、シミュレーションが完了するまで待ちます。

set(rrSim,SimulationCommand="Start");
while strcmp(get(rrSim,"SimulationStatus"),"Running")
    pause(1);
end

エージェント速度のプロット

このセクションでは、シミュレーションでログ記録されたアクターの速度を取得し、その大きさをシミュレーション時間に対してプロットします。

ログ記録された結果をシナリオから取得します。関数 get を使用し、rrSim オブジェクトと "SimulationLog" を入力引数として指定します。この関数は simLog にシミュレーション ログを返します。このログにはシナリオのシミュレーションに関する情報が含まれています。

simLog = get(rrSim,"SimulationLog");

TrajectoryCutIn シナリオには 2 つのアクターがあります。赤いセダンは Actor ID1 に設定されていて、白いセダンは Actor ID2 に設定されています。これらのアクターのログ記録された速度をシミュレーション ログから取得します。さらに、対応するシミュレーション時間をシミュレーション ログから取得します。

velocityAgent1 = get(simLog,"Velocity","ActorID",1);
velocityAgent2 = get(simLog,"Velocity","ActorID",2);
time = [velocityAgent1.Time];

この関数は赤いセダンと白いセダンの速度をベクトルとして返し、それぞれ変数 velMagAgent1 および velMagAgent2 に格納します。関数 norm を使用して、各アクターの速度の大きさを計算します。

velMagAgent1 = arrayfun(@(x) norm(x.Velocity,2),velocityAgent1);
velMagAgent2 = arrayfun(@(x) norm(x.Velocity,2),velocityAgent2);

関数 plot を使用して、エージェントの速度をシミュレーション時間に対してプロットします。グラフと "x" および "y" 軸にラベルを設定します。

figure
hold on
plot(time,velMagAgent1,"r")
plot(time,velMagAgent2,"b")
grid on
title("Agent Velocities from RoadRunner Scenario")
ylabel("Velocity (m/sec)")
xlabel("Time (sec)")
legend("Actor ID = 1","Actor ID = 2")

アクターの速度が RoadRunner Scenario の "Logic Editor" での仕様に対応していることに注目してください。

車線のプロット

RoadRunner シーンから車線をプロットし、車両の位置をマップにオーバーレイします。

HD マップ仕様を RoadRunner から取得します。この関数は構造体を返し、フィールドの 1 つに車線に関する情報が含まれていることに注目してください。

hdMap = get(rrSim,"Map");
lanes = hdMap.map.lanes;

for ループを使用して各車線指定をループ処理し、車線の座標をプロットします。

figure
hold on
for i = 1:numel(lanes)
    control_points = lanes(i).geometry.values;
    x_coordinates = arrayfun(@(cp) cp.x,control_points);
    y_coordinates = arrayfun(@(cp) cp.y,control_points);
    plot(x_coordinates,y_coordinates,"black");
end
axis equal

車両の位置を抽出し、車線にプロットします。

poseActor1 = get(simLog,"Pose","ActorID",1);
positionActor1_x = arrayfun(@(x) x.Pose(1,4),poseActor1);
positionActor1_y = arrayfun(@(x) x.Pose(2,4),poseActor1);
plot(positionActor1_x,positionActor1_y,"r",LineWidth=2)

poseActor2 = get(simLog,"Pose","ActorID",2);
positionActor2_x = arrayfun(@(x) x.Pose(1,4),poseActor2);
positionActor2_y = arrayfun(@(x) x.Pose(2,4),poseActor2);
plot(positionActor2_x,positionActor2_y,"b",LineWidth=2)

title("Agent Positions from RoadRunner Scenario")
ylabel("Y (m)")
xlabel("X (m)")

figure(gcf)

シナリオ セッションを閉じる

RoadRunner Scenario の操作を停止するには、シミュレーションを終了します。その後、アプリケーションを閉じます。

close(rrApp)

開いている Figure を閉じます。

close all

その他の調査

この例では、MATLAB を使用してプログラムにより RoadRunner Scenario に接続するための基本機能について学習しました。このスクリプトをさらに拡張するには、次のことが可能です。

  • シナリオおよびシナリオの車両アクターの変更。

  • MATLAB と Simulink® の動作の開発、アクターの動作のパブリッシュ、RoadRunner Scenario シミュレーションでの動作のシミュレーション、シミュレーションの制御およびシミュレーション パラメーターへのアクセス。

参考

| | | (Automated Driving Toolbox) | (Automated Driving Toolbox) | (Automated Driving Toolbox) | (MATLAB)

トピック