exponenta event banner

chasePlot

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

Описание

пример

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

пример

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