このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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 プロジェクト フォルダーには通常、Assets
、Exports
、Project
、Scenarios
、Scenes
の各サブフォルダーがあります。
プロジェクトの作成場所を指定して関数 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 ID
が 1
に設定されていて、白いセダンは Actor ID
が 2
に設定されています。これらのアクターのログ記録された速度をシミュレーション ログから取得します。さらに、対応するシミュレーション時間をシミュレーション ログから取得します。
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 シミュレーションでの動作のシミュレーション、シミュレーションの制御およびシミュレーション パラメーターへのアクセス。
参考
roadrunner
| openScenario
| createSimulation
| ScenarioLog
(Automated Driving Toolbox) | set
(Automated Driving Toolbox) | close
(Automated Driving Toolbox) | settings
(MATLAB)
トピック
- シナリオの設計とシミュレーション
- Overview of Simulating RoadRunner Scenarios with MATLAB and Simulink (Automated Driving Toolbox)