Main Content

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

trajectory

ドライビング シナリオでアクターまたは車両の軌跡を作成

説明

trajectory(ac,waypoints) は、一連のウェイポイントから、アクターまたは車両 ac の軌跡を作成します。

メモ

関数 trajectory は、ウェイポイント間で加速度に不連続性がある軌跡を生成するため、加加速度が大きくなります。滑らかで加加速度の制限された軌跡を生成するには、代わりに関数 smoothTrajectory を使用します。

trajectory(ac,waypoints,speed) は、アクターまたは車両が軌跡に沿って前進または後退のいずれかの運動で移動する速度も指定します。

trajectory(ac,waypoints,speed,waittime) は、前述の構文の入力引数に加え、アクターまたは車両の待機時間を指定します。この構文を使用すると、特定のウェイポイントでアクターまたは車両アクターを一時停止させることにより、停止と移動を繰り返すドライビング シナリオが生成されます。

trajectory(___,'Yaw',yaw) は、前述の構文の任意の入力引数の組み合わせに加え、各ウェイポイントにおけるアクターまたは車両のヨー方向の角度を指定します。

すべて折りたたむ

ドライビング シナリオを作成して、曲線の 2 車線道路を追加します。

scenario = drivingScenario('SampleTime',0.05);
roadcenters = [5 0; 30 10; 35 25];
lspec = lanespec(2);
road(scenario,roadcenters,'Lanes',lspec);

車両をシナリオに追加します。車両が速度を変えながら曲線を走行する軌跡を設定します。

v = vehicle(scenario,'ClassID',1);
waypoints = [6 2; 18 4; 25 7; 28 10; 31 15; 33 22];
speeds = [30 10 5 5 10 30];
trajectory(v,waypoints,speeds)

シナリオをプロットしてシミュレーションを実行します。車両が曲線に沿って走行する際に、どのように減速するか観察します。

plot(scenario,'Waypoints','on','RoadCenters','on')
while advance(scenario)
    pause(0.1)
end

直角に交差する 2 つの 2 車線道路で構成されるドライビング シナリオを作成します。

scenario = drivingScenario('StopTime',2.75);
roadCenters = [50 1 0; 2 0.9 0];
laneSpecification = lanespec(2,'Width',4);
road(scenario,roadCenters,'Lanes',laneSpecification);
roadCenters = [27 24 0; 27 -21 0];
road(scenario,roadCenters,'Lanes',laneSpecification);

自車をシナリオに追加します。ウェイポイントと、各ウェイポイントにおける車両の速度値を指定します。2 番目のウェイポイントにおける車両の待機時間を設定します。自車が指定されたウェイポイントを指定された速度で通過する軌跡を生成します。

egoVehicle = vehicle(scenario,'ClassID',1,'Position',[5 -1 0]);
waypoints = [5 -1 0; 16 -1 0; 40 -1 0];
speed = [30; 0; 30];
waittime = [0; 0.3; 0];
trajectory(egoVehicle,waypoints,speed,waittime);

自動車をシナリオに追加します。ウェイポイントと、各ウェイポイントにおける自動車の速度値を指定します。2 番目のウェイポイントにおける自動車の待機時間を設定します。自動車が指定されたウェイポイントを指定された速度で通過する軌跡を生成します。

car = vehicle(scenario,'ClassID',1,'Position',[48 4 0],'PlotColor',[0.494 0.184 0.556], 'Name','Car');
waypoints = [47 3 0; 38 3 0; 10 3 0];
speed = [30; 0; 30];
waittime = [0; 0.3; 0];
trajectory(car,waypoints,speed,waittime);

救急車をシナリオに追加します。救急車が指定されたウェイポイントを一定の速度で通過する軌跡を生成します。

ambulance = vehicle(scenario,'ClassID',6,'Position',[25 22 0],'PlotColor',[0.466 0.674 0.188],'Name','Ambulance');
waypoints = [25 22 0; 25 13 0; 25 6 0; 26 2 0; 33 -1 0; 45 -1 0];
speed = 25;
trajectory(ambulance,waypoints,speed);

シナリオをプロットするカスタム Figure ウィンドウを作成します。

fig = figure;
set(fig,'Position',[0,0,800,600]);
movegui(fig,'center');
hViewPnl = uipanel(fig,'Position',[0 0 1 1],'Title','Stop-and-Go Scenario');
hPlt = axes(hViewPnl);

シナリオをプロットしてシミュレーションを実行します。自車と自動車は、指定された待機時間について一時停止して、救急車との衝突を回避します。

plot(scenario,'Waypoints','on','RoadCenters','on','Parent',hPlt)
while advance(scenario)
    pause(0.1)
end

Figure contains an axes object and an object of type uipanel. The axes object with xlabel X (m), ylabel Y (m) contains 13 objects of type patch, line. One or more of the lines displays its values using only markers

自動車が後退走行し、バックで駐車スペースに入るドライビング シナリオをシミュレートします。

駐車場を含むドライビング シナリオを作成します。

scenario = drivingScenario;
vertices = [0 9; 18 9; 18 -9; 0 -9];
parkingLot(scenario,vertices,ParkingSpace=parkingSpace);

自動車を作成してその軌跡を定義します。自動車は前進走行し、停止してから、後退走行し、バックで駐車スペースに入ります。駐車スペースに入るとき、自動車は開始地点から 90 度反時計回りのヨー方向の角度をもちます。

car = vehicle(scenario,ClassID=1);
waypoints = [9 -5; 9 5; 6 -1.3; 2 -1.3];
speed = [3; 0; -2; 0];
yaw = [90 90 180 180];
smoothTrajectory(car,waypoints,speed,Yaw=yaw)

ドライビング シナリオをプロットし、軌跡のウェイポイントを表示します。

plot(scenario,Waypoints="on")
while advance(scenario)
    pause(0.001)
end

交差点で直角に右折する歩行者の軌跡を定義します。

ドライビング シナリオを作成します。交差点を定義する道路セグメントを追加します。

scenario = drivingScenario;
roadCenters = [0 10; 0 -10];
road(scenario,roadCenters);
road(scenario,flip(roadCenters,2));

歩行者アクターをシナリオに追加します。

pedestrian = actor(scenario, ...
    'ClassID',4, ...
    'Length',0.24, ...
    'Width',0.45, ...
    'Height',1.7, ...
    'Position',[-9 0 0], ...
    'RCSPattern',[-8 -8; -8 -8], ...
    'Mesh', driving.scenario.pedestrianMesh, ...
    'Name','Pedestrian');

歩行者の軌跡を定義します。歩行者は交差点に近付き、短時間一時停止してから、交差点で直角に右折します。直角右折を定義するには、交差点で互いに近接する 2 つのウェイポイントを指定します。これらのウェイポイントについて、2 番目のウェイポイントのヨー方向の角度を、最初のウェイポイントから 90 度の角度に指定します。

waypoints = [-9 0; -0.25 0; 0 -0.25; 0 -9];
speed = [1.5; 0; 0.5; 1.5];
yaw =  [0; 0; -90; -90];
waittime = [0; 0.2; 0; 0];
trajectory(pedestrian,waypoints,speed,waittime,'Yaw', yaw);

ドライビング シナリオをプロットし、歩行者のウェイポイントを表示します。

plot(scenario,'Waypoints','on')
while advance(scenario)
    pause(0.001)
end

入力引数

すべて折りたたむ

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

軌跡のウェイポイント。実数値の N 行 2 列または N 行 3 列の行列として指定します。ここで N はウェイポイントの数です。

  • waypoints が N 行 2 列の行列である場合、行列の各行はウェイポイントの (x, y) 座標を表します。各ウェイポイントの z 座標はゼロです。

  • waypoints が N 行 3 列の行列である場合、行列の各行はウェイポイントの (x, y, z) 座標を表します。

ウェイポイントはワールド座標系で示します。単位はメートルです。

例: [1 0 0; 2 7 7; 3 8 8]

データ型: single | double

waypoints の各ウェイポイントにおけるアクターの速度。実数値スカラーまたは N 要素の実数値ベクトルとして指定します。N はウェイポイントの数です。

  • speed がスカラーの場合、速度はアクターの運動全体を通して一定です。

  • speed がベクトルの場合、ベクトル値は各ウェイポイントにおける速度を指定します。前進運動の場合は、正の速度値を指定します。後退運動の場合は、負の速度値を指定します。運動の方向を変更するには、速度が 0 のウェイポイントによって正の速度と負の速度を分離します。

速度はウェイポイント間で内挿されます。speed は、任意のウェイポイントにおいてゼロにすることができますが、2 つの連続するウェイポイントにおいてゼロにすることはできません。単位はメートル/秒です。

例: [10 8 9] は、10 m/s、8 m/s、および 9 m/s の速度を指定します。

例: [10 0 -10] は、10 m/s の速度で前進運動した後に一時停止し、その後 10 m/s の速度で後退することを指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

アクターの一時停止時間。非負の値の N 要素ベクトルとして指定します。N はウェイポイントの数です。特定のウェイポイントにおけるアクターの一時停止時間を指定する場合は、対応する速度値を 0 に設定する必要があります。任意のウェイポイントにおいて waitime0 に設定することができますが、2 つの連続するウェイポイントにおいて waittime をゼロ以外の値に設定することはできません。単位は秒です。

データ型: single | double

各ウェイポイントにおけるアクターのヨー方向の角度。N 要素の実数値ベクトルとして指定します。ここで N はウェイポイントの数です。単位は度で、角度は反時計回りの方向が正です。

yaw を指定しない場合、各ウェイポイントにおけるヨーは NaN となり、これはヨーに制約がないことを意味します。

例: [0 90] は、最初のウェイポイントにおいて 0 度、2 番目のウェイポイントにおいて 90 度となるアクターを指定します。

例: [0 NaN] は、最初のウェイポイントにおいて 0 度となるアクターを指定します。このアクターには、2 番目のウェイポイントにおけるヨーの制約はありません。

データ型: single | double

アルゴリズム

関数 trajectory は、シナリオ内でアクターが従う軌跡を作成します。軌跡は、オブジェクトが従うパスと、パスに沿ったオブジェクトの速度で構成されます。パスは、N 個の 2 次元または 3 次元のウェイポイントを使用して指定します。ウェイポイント間の N – 1 個のセグメントはそれぞれ曲線を定義し、その曲率はセグメントに沿って、距離に対して直線的に変化します。関数は、ウェイポイントの両側の曲率を一致させることにより、区分的な "クロソイド" 曲線をウェイポイントの (x, y) 座標に近似します。閉じていない曲線の場合、最初と最後のウェイポイントの曲率はゼロです。最初と最後のウェイポイントが一致する場合は、端点の前後の曲率が一致します。軌跡の z 座標は、形状維持区分的 3 次曲線を使用して内挿されます。

生成される軌跡は、ウェイポイント間の各セグメントの区分的な等加速度プロファイルとなります。これらのセグメントの間には、加速度の不連続性があります。加速度の不連続性を回避するには、代わりに関数 smoothTrajectory を使用して軌跡を生成します。

バージョン履歴

R2018a で導入