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,'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