chasePlot

Эго-ориентированный проективный перспективный график

Описание

пример

chasePlot(ac) строит сценарии вождения с точки зрения актёра ac. Этот график называется chase plot и имеет эгоцентрическую проективную перспективу, где вид расположен сразу позади актёра.

пример

chasePlot(ac,Name,Value) задает опции с использованием одной или нескольких пар "имя-значение". Например, на графике можно отобразить дорожные центры и точки пути актёра.

Примеры

свернуть все

Симулируйте сценарий вождения с одним автомобилем, путешествующим по S-кривой. Создайте и постройте график контуров маршрута.

Создайте сценарий вождения с одной дорогой, имеющей S-кривую.

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

Создайте сценарий вождения и покажите, как изменяются контуры цели по мере продвижения симуляции.

Создайте сценарий вождения, состоящий из двух пересекающихся прямых дорог. Первый сегмент дороги - 45 метров в длину. Вторая прямая дорога длиной 32 метра с майкерскими барьерами по обеим её ребрам, и пересекает первую дорогу. Машина, следовавшая со скоростью 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

Figure contains an axes. The axes is empty.

Входные параметры

свернуть все

Актёр, принадлежащий к drivingScenario объект, заданный как Actor или Vehicle объект. Чтобы создать эти объекты, используйте actor и vehicle функций, соответственно.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: chasePlot(ac,'Centerline','on','RoadCenters,'on') отображает осевую линию и центры дорог каждого сегмента дороги.

Оси, в которых можно нарисовать график, заданные как разделенная разделенными запятой парами, состоящая из 'Parent' и Axes объект. Если вы не задаете ParentСоздаётся новый рисунок.

Отображение осевой линии дорог, заданное как разделенная разделенными запятой парами, состоящая из '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