advance

Усовершенствуйте ведущую симуляцию сценария одним временным шагом

Описание

пример

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);
waypoints = [5 2; 25 2];
speed = 30; % m/s
trajectory(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);
road(scenario,[-10 0 0; 45 -20 0]);
road(scenario,[-10 -10 0; 35 10 0]);
ped = actor(scenario,'Length',0.4,'Width',0.6,'Height',1.7);
car = vehicle(scenario);
pedspeed = 2.0;
carspeed = 12.0;
trajectory(ped,[15 -3 0; 15 3 0],pedspeed);
trajectory(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);    
    plotLaneBoundary(laneplotter,rb)
    plotOutline(outlineplotter,position,yaw,length,width, ...
        'OriginOffset',originOffset,'Color',color)
    pause(0.01)
end

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

Добавьте автомобиль, оборудованный датчиком и задайте его траекторию от его скорости и waypoints. Автомобиль перемещается на уровне 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];
speed = 30;
trajectory(car,waypoints,speed);

Постройте сценарий и соответствующий график преследования.

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 ложь).

  • Если isRunning 1, симуляция запускается.

  • Если isRunning 0, симуляция прекратила запускаться.

Симуляция запускается до по крайней мере одного из этих условий соответствуются:

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

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

advance функционируйте агенты обновлений и транспортные средства, только если у них есть присвоенная траектория. Чтобы обновить агентов и транспортные средства, которые не имеют никаких присвоенных траекторий, можно установить Position, VelocityКренТангаж, Yaw, или AngularVelocity свойства в любое время в процессе моделирования.

Введенный в R2017a