exponenta event banner

прогресс

Предварительное моделирование сценария вождения на один шаг

Описание

пример

isRunning = advance(scenario) продвигает моделирование сценария вождения на один шаг времени. Чтобы указать время шага, используйте SampleTime свойство входа drivingScenario объект, scenario. Функция возвращает статус, isRunning, моделирования.

Примеры

свернуть все

Создайте сценарий управления. Используйте время выборки по умолчанию 0,01 секунды.

scenario = drivingScenario;

Добавьте к сценарию прямую 30-метровую дорогу. Дорога имеет две полосы.

roadCenters = [0 0; 30 0];
road(scenario,roadCenters,'Lanes',lanespec(2));

Добавить транспортное средство, которое движется по левой полосе с постоянной скоростью 30 метров в секунду. Постройте график сценария перед запуском моделирования.

v = vehicle(scenario,'ClassID',1);
waypoints = [5 2; 25 2];
speed = 30; % m/s
smoothTrajectory(v,waypoints,speed)

plot(scenario)

Позвоните в advance функция в цикле для продвижения моделирования на один шаг за раз. Приостанавливать каждые 0,01 секунды для наблюдения за движением транспортного средства на графике.

while advance(scenario)
    pause(0.01)
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.

Смоделировать сценарий вождения с одним автомобилем, путешествующим по 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

Входные аргументы

свернуть все

Сценарий управления, указанный как drivingScenario объект.

Выходные аргументы

свернуть все

Состояние выполнения моделирования, возвращенное как логическое 1 (true) или 0 (false).

  • Если isRunning является 1, моделирование выполняется.

  • Если isRunning является 0, моделирование остановлено.

Моделирование выполняется до тех пор, пока не будет выполнено хотя бы одно из следующих условий:

  • Время моделирования превышает время остановки моделирования. Чтобы указать время остановки, используйте StopTime имущество scenario.

  • Любой субъект или транспортное средство достигает конца своей заданной траектории. Назначенная траектория определяется самым последним вызовом функции траектории.

advance функция обновляет действующие лица и транспортные средства только в том случае, если им назначена траектория. Для обновления актёров и транспортных средств, не имеющих назначенных траекторий, можно задать Position, Velocity, Roll, Pitch, Yaw, или AngularVelocity свойства в любое время во время моделирования.

Представлен в R2017a