Main Content

chasePlot

自己を中心とした射影パースペクティブのプロット

説明

chasePlot(ac) は、アクター ac のパースペクティブからドライビング シナリオをプロットします。このプロットは "追跡プロット" と呼ばれ、自己を中心とした射影パースペクティブをもちます。ここでは、ビューはアクターのすぐ後ろに配置されます。

chasePlot(ac,Name,Value) は、1 つ以上の名前と値のペアを使用してオプションを指定します。たとえば、道路の中心とアクターのウェイポイントをプロット上に表示できます。

すべて折りたたむ

1 台の自動車が S 字カーブ上を走行するドライビング シナリオをシミュレートします。車線境界線を作成してプロットします。

S 字カーブをもつ 1 本の道路を使用して、ドライビング シナリオを作成します。

scenario = drivingScenario('StopTime',3);
roadcenters = [-35 20 0; -20 -20 0; 0 0 0; 20 20 0; 35 -20 0];

車線を作成して道路に追加します。

lm = [laneMarking('Solid','Color','w'); ...
    laneMarking('Dashed','Color','y'); ...
    laneMarking('Dashed','Color','y'); ...
    laneMarking('Solid','Color','w')];
ls = lanespec(3,'Marking',lm);
road(scenario,roadcenters,'Lanes',ls);

自車を追加し、そのウェイポイントから軌跡を指定します。自動車は、既定で 30 メートル/秒で走行します。

car = vehicle(scenario, ...
    'ClassID',1, ...
    'Position',[-35 20 0]);
waypoints = [-35 20 0; -20 -20 0; 0 0 0; 20 20 0; 35 -20 0];
smoothTrajectory(car,waypoints);

シナリオ、および対応する追跡プロットをプロットします。

plot(scenario)

chasePlot(car)

シミュレーション ループを実行します。

  1. 鳥瞰図プロットを初期化し、アウトライン プロッター、左車線と右車線の境界線プロッター、および道路境界線プロッターを作成します。

  2. 道路の境界線と四角形のアウトラインを取得します。

  3. 車両の左右にある車線境界線を取得します。

  4. シミュレーションを進めてプロッターを更新します。

bep = birdsEyePlot('XLim',[-40 40],'YLim',[-30 30]);
olPlotter = outlinePlotter(bep);
lblPlotter = laneBoundaryPlotter(bep,'Color','r','LineStyle','-');
lbrPlotter = laneBoundaryPlotter(bep,'Color','g','LineStyle','-');
rbsEdgePlotter = laneBoundaryPlotter(bep);
legend('off');
while advance(scenario)
    rbs = roadBoundaries(car);
    [position,yaw,length,width,originOffset,color] = targetOutlines(car);
    lb = laneBoundaries(car,'XDistance',0:5:30,'LocationType','Center', ...
        'AllBoundaries',false);
    plotLaneBoundary(rbsEdgePlotter,rbs)
    plotLaneBoundary(lblPlotter,{lb(1).Coordinates})
    plotLaneBoundary(lbrPlotter,{lb(2).Coordinates})
    plotOutline(olPlotter,position,yaw,length,width, ...
        'OriginOffset',originOffset,'Color',color)
end

ドライビング シナリオを作成し、シミュレーションの進行に伴うターゲット アウトラインの変化を示します。

2 つの交差する直線道路で構成されたドライビング シナリオを作成します。1 つ目の道路セグメントの長さは 45 メートルです。2 つ目の直線道路は、長さが 32 メートルで、両端にジャージ障壁があり、1 つ目の道路と交差します。1 つ目の道路に沿って秒速 12.0 メートルで移動している車が、秒速 2.0 メートルで交差点を現在渡っている歩行者に近づいていきます。

scenario = drivingScenario('SampleTime',0.1,'StopTime',1);
road1 = road(scenario,[-10 0 0; 45 -20 0]);
road2 = road(scenario,[-10 -10 0; 35 10 0]);
barrier(scenario,road1)
barrier(scenario,road1,'RoadEdge','left')
ped = actor(scenario,'ClassID',4,'Length',0.4,'Width',0.6,'Height',1.7);
car = vehicle(scenario,'ClassID',1);
pedspeed = 2.0;
carspeed = 12.0;
smoothTrajectory(ped,[15 -3 0; 15 3 0],pedspeed);
smoothTrajectory(car,[-10 -10 0; 35 10 0],carspeed);

車両の自己を中心とした追跡プロットを作成します。

chasePlot(car,'Centerline','on')

空の鳥瞰図プロットを作成し、アウトライン プロッターおよび車線境界線プロッターを追加します。次に、シミュレーションを実行します。各シミュレーション ステップは以下のとおりです。

  • 追跡プロットを更新して、道路の境界およびターゲット アウトラインを表示する。

  • 鳥瞰図プロットを更新して、更新した道路の境界およびターゲット アウトラインを表示する。プロットのパースペクティブは常に、自車が基準となっています。

bepPlot = birdsEyePlot('XLim',[-50 50],'YLim',[-40 40]);
outlineplotter = outlinePlotter(bepPlot);
laneplotter = laneBoundaryPlotter(bepPlot);
legend('off')

while advance(scenario)
    rb = roadBoundaries(car);
    [position,yaw,length,width,originOffset,color] = targetOutlines(car);
    [bposition,byaw,blength,bwidth,boriginOffset,bcolor,barrierSegments] = targetOutlines(car,'Barriers');
    plotLaneBoundary(laneplotter,rb)
    plotOutline(outlineplotter,position,yaw,length,width, ...
        'OriginOffset',originOffset,'Color',color)
    plotBarrierOutline(outlineplotter,barrierSegments,bposition,byaw,blength,bwidth, ...
        'OriginOffset',boriginOffset,'Color',bcolor)
    pause(0.01)
end

入力引数

すべて折りたたむ

drivingScenario オブジェクトに属するアクター。Actor オブジェクトまたは Vehicle オブジェクトとして指定します。これらのオブジェクトを作成するには、関数 actor および vehicle をそれぞれ使用します。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後に表示されなければなりませんが、ペアの順序は重要ではありません。

R2021a より前は、名前と値をそれぞれコンマを使って区切り、Name引用符で囲みます。

例: chasePlot(ac,'Centerline','on','RoadCenters,'on') は、各道路セグメントのセンター ラインと道路の中心を表示します。

プロットの描画に使用する座標軸。'Parent'Axes オブジェクトで構成されるコンマ区切りのペアとして指定します。Parent を指定しない場合は、新しい Figure が作成されます。

道路のセンター ラインを表示します。'Centerline''off' または 'on' で構成されるコンマ区切りのペアとして指定します。センター ラインは各道路セグメントの中央に従います。交差点や道路の分岐などの領域では、センター ラインは不連続になります。

道路の中心を表示します。'RoadCenters''off' または 'on' で構成されるコンマ区切りのペアとして指定します。道路の中心は、プロットに表示される道路を定義します。

アクターのウェイポイントを表示します。'Waypoints''off' または 'on' で構成されるコンマ区切りのペアとして指定します。ウェイポイントはアクターの軌跡を定義します。

直方体の代わりにアクターのメッシュを表示します。'Meshes''off' または 'on' で構成されるコンマ区切りのペアとして指定します。

プロット視点の高さ。'ViewHeight' と正の実数スカラーで構成されるコンマ区切りのペアとして指定します。高さはアクターの下部を基準とします。単位はメートルです。

プロット視点の位置。'ViewLocation' と [x, y] 実数値ベクトルで構成されるコンマ区切りのペアとして指定します。位置はアクターの座標系における直方体の中心を基準とします。視点の既定の位置は、直方体の中心の背後、[2.5*actor.Length 0] です。単位はメートルです。

プロット視点のロール角の向き。'ViewRoll' と実数スカラーで構成されるコンマ区切りのペアとして指定します。単位は度です。

プロット視点のピッチ角の向き。'ViewPitch' と実数スカラーで構成されるコンマ区切りのペアとして指定します。単位は度です。

プロット視点のヨー角の向き。'ViewYaw' と実数スカラーで構成されるコンマ区切りのペアとして指定します。単位は度です。

バージョン履歴

R2017a で導入