Усовершенствуйте ведущую симуляцию сценария одним временным шагом
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)
Запустите цикл симуляции.
Инициализируйте видимый с большого расстояния график и создайте плоттер схемы, лево-маршрут и плоттеры контура правильного маршрута и дорожный граничный плоттер.
Получите дорожные контуры и прямоугольные контуры.
Получите контуры маршрута налево и право на автомобиль.
Усовершенствуйте симуляцию и обновите плоттеры.
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
sc
— Ведущий сценарийdrivingScenario
Ведущий сценарий, заданный как объект drivingScenario
.
isRunning
— Запустите состояние симуляцииЗапустите состояние симуляции, возвращенной как логический 1
(true
) или 0
(false
).
Если isRunning
является 1
, симуляция запускается.
Если isRunning
является 0
, симуляция прекратила запускаться.
Симуляция запускается до по крайней мере одного из этих условий соответствуются:
Время симуляции превышает время остановки симуляции. Чтобы задать время остановки, используйте свойство StopTime
sc
.
Любой агент или автомобиль достигают конца своей присвоенной траектории. Присвоенная траектория задана новым вызовом функции trajectory
.
Функция advance
обновляет агентов и автомобили, только если у них есть присвоенная траектория. Чтобы обновить агентов и автомобили, которые не имеют никаких присвоенных траекторий, можно установить Position
, Velocity
, Roll
, Pitch
, Yaw
или свойства AngularVelocity
в любое время во время симуляции.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.