усовершенствование

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

Синтаксис

isRunning = advance(sc)

Описание

пример

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

Примеры

свернуть все

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

sc = drivingScenario;

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

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

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

v = vehicle(sc);
waypoints = [5 2; 25 2];
speed = 30; % m/s
trajectory(v,waypoints,speed)

plot(sc)

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

while advance(sc)
    pause(0.01)
end

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

Создайте ведущий сценарий, состоящий из двух пересекающихся прямых дорог. Первый дорожный сегмент 45 метров длиной. Вторая дорога подряд 32 метра длиной и пересекает первую дорогу. Автомобиль, перемещающийся на уровне 12,0 метров в секунду вдоль первой дороги, приближается к рабочему пешеходному переходу пересечение на уровне 2,0 метров в секунду.

sc = drivingScenario('SampleTime',0.1,'StopTime',1);
road(sc,[-10 0 0; 45 -20 0]);
road(sc,[-10 -10 0; 35 10 0]);
ped = actor(sc,'Length',0.4,'Width',0.6,'Height',1.7);
car = vehicle(sc);
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(sc)
    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-кривую.

sc = 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(sc,roadcenters,'Lanes',ls);

Добавьте автомобиль, оборудованный датчиком и задайте его траекторию от его скорости и waypoints. Автомобиль перемещается на уровне 30 метров в секунду.

car = vehicle(sc, ...
    '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(sc)

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(sc)
    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 sc.

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

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

Введенный в R2017a