drivingScenario

Создайте ведущий сценарий

Описание

drivingScenario объект представляет 3-D арену, содержащую дороги, транспортные средства, пешеходов и другие аспекты ведущего сценария. Используйте этот объект смоделировать реалистические сценарии трафика и сгенерировать синтетические обнаружения для тестирования контроллеров или алгоритмов сплава датчика.

  • Чтобы добавить дороги, используйте road функция. Чтобы задать маршруты на дорогах, создайте lanespec объект.

  • Добавить агентов (автомобили, пешеходы, велосипеды, и так далее), используют actor функция. Чтобы добавить агентов со свойствами, специально разработанными для транспортных средств, используйте vehicle функция. Все агенты, включая транспортные средства, моделируются как кубоиды (формы поля).

  • Чтобы симулировать сценарий, вызовите advance функция в цикле, который совершенствует симуляцию один временной шаг за один раз.

Можно также создать ведущие сценарии в интерактивном режиме при помощи приложения Driving Scenario Designer. Кроме того, можно экспортировать drivingScenario объекты из приложения, чтобы произвести изменения сценария для использования или в приложении или в Simulink®. Для получения дополнительной информации смотрите, Создают Ведущие Изменения Сценария Программно.

Создание

Описание

пример

scenario = drivingScenario создает пустой ведущий сценарий.

пример

scenario = drivingScenario(Name,Value) устанавливает SampleTime и StopTime свойства с помощью пар "имя-значение". Например, drivingScenario('SampleTime',0.1','StopTime',10) производит сценарий каждую 0.1 секунды в течение 10 секунд. Заключите каждое имя свойства в кавычки.

Свойства

развернуть все

Временной интервал между шагами симуляции сценария, заданными как положительный действительный скаляр. Модули находятся в секундах.

Пример: 1.5

Время окончания симуляции, заданной как положительный действительный скаляр. Модули находятся в секундах. StopTime по умолчанию из Inf заставляет симуляцию заканчиваться, когда первый агент достигает конца своей траектории.

Пример: 60.0

Это свойство доступно только для чтения.

Текущее время симуляции, заданной как положительный действительный скаляр. Чтобы сбросить время, чтобы обнулить, вызовите restart функция. Модули находятся в секундах.

Это свойство доступно только для чтения.

Состояние симуляции, заданное как true или false. Если симуляция запускается, IsRunning true.

Это свойство доступно только для чтения.

Агенты и транспортные средства содержатся в сценарии, заданном как разнородный массив Actor и Vehicle объекты. Чтобы добавить агентов и транспортные средства к ведущему сценарию, используйте actor и vehicle функции.

Функции объекта

развернуть все

advanceУсовершенствуйте ведущую симуляцию сценария одним временным шагом
plotСоздайте ведущий график сценария
recordЗапустите ведущий сценарий и запишите состояния агента
restartПерезапустите ведущую симуляцию сценария с начала
updatePlotsОбновите ведущие графики сценария
actorДобавьте агента в ведущий сценарий
actorPosesПоложения, скорости и ориентации агентов в ведущем сценарии
actorProfilesФизический и радарные характеристики агентов в ведущем сценарии
vehicleДобавьте транспортное средство в ведущий сценарий
chasePlotЭгоцентрический проективный перспективный график
trajectoryСоздайте агента или траекторию транспортного средства в ведущем сценарии
targetPosesЦелевые положения и ориентации относительно автомобиля, оборудованного датчиком
targetOutlinesОсновы целей просматриваются агентом
driving.scenario.targetsToEgoПреобразуйте положения агента в координаты автомобиля, оборудованного датчиком
roadАдд-Роуд к ведущему сценарию
roadNetworkДобавьте дорожную сеть в ведущий сценарий
roadBoundariesПолучите дорожные контуры
driving.scenario.roadBoundariesToEgoПреобразуйте дорожные контуры в координаты автомобиля, оборудованного датчиком
currentLaneПолучите текущий маршрут агента
lanespecСоздайте дорожные спецификации маршрута
laneMarkingСоздайте дорожный объект маркировки маршрута
laneMarkingVerticesВершины маркировки маршрута и поверхности в ведущем сценарии
laneBoundariesПолучите контуры маршрута маршрута агента
clothoidLaneBoundaryМодель контура маршрута, имеющая форму клотоиды
computeBoundaryModelВычислите граничные точки маршрута из модели контура маршрута клотоиды
laneTypeСоздайте дорожный текстовый объект маршрута

Примеры

свернуть все

Создайте ведущий сценарий, содержащий кривую дорогу, две дороги подряд и двух агентов: автомобиль и велосипед. Оба агента проходят дорога в течение 60 секунд.

Создайте ведущий объект сценария.

scenario = drivingScenario('SampleTime',0.1','StopTime',60);

Создайте кривую дорогу с помощью дорожных центральных точек после дуги круга с 800-метровым радиусом. Дуга запускается на уровне 0 °, заканчивается на уровне 90 ° и производится в шаге на 5 °.

angs = [0:5:90]';
R = 800;
roadcenters = R*[cosd(angs) sind(angs) zeros(size(angs))];
roadwidth = 10;
road(scenario,roadcenters,roadwidth);

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

roadcenters = [700 0 0; 100 0 0];
road(scenario,roadcenters)
roadcenters = [400 400 0; 0 0 0];
road(scenario,roadcenters)

Получите дорожные контуры.

rbdry = roadBoundaries(scenario);

Добавьте автомобиль и велосипед к сценарию. Расположите автомобиль в начале первой дороги подряд.

car = vehicle(scenario,'Position',[700 0 0],'Length',3,'Width',2,'Height',1.6);

Расположите велосипед дальше в будущем.

bicycle = actor(scenario,'Position',[706 376 0]','Length',2,'Width',0.45,'Height',1.5);

Постройте сценарий.

plot(scenario,'Centerline','on','RoadCenters','on');
title('Scenario');

Отобразите положения агента и профили.

poses = actorPoses(scenario)
poses=2×7 struct
    ActorID
    Position
    Velocity
    Roll
    Pitch
    Yaw
    AngularVelocity

profiles = actorProfiles(scenario)
profiles=2×9 struct
    ActorID
    ClassID
    Length
    Width
    Height
    OriginOffset
    RCSPattern
    RCSAzimuthAngles
    RCSElevationAngles

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

Создайте ведущий сценарий, состоящий из двух пересекающихся прямых дорог. Первый дорожный сегмент 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

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

scenario = drivingScenario;

Создайте трехполосную дорогу при помощи спецификаций маршрута.

roadCenters = [0 0 0; 60 0 0; 120 30 0];
lspc = lanespec(3);
road(scenario,roadCenters,'Lanes',lspc);

Укажите, что автомобиль, оборудованный датчиком следует за центральным маршрутом на уровне 30 м/с.

egovehicle = vehicle(scenario);
egopath = [1.5 0 0; 60 0 0; 111 25 0];
egospeed = 30;
trajectory(egovehicle,egopath,egospeed);

Укажите, что целевые перемещения транспортного средства перед автомобилем, оборудованным датчиком на уровне 40 м/с и перестраиваются на другую полосу близко к автомобилю, оборудованному датчиком.

targetcar = vehicle(scenario,'ClassID',2);
targetpath = [8 2; 60 -3.2; 120 33];
targetspeed = 40;
trajectory(targetcar,targetpath,targetspeed);

Отобразите график преследования для 3-D представления сценария из-за автомобиля, оборудованного датчиком.

chasePlot(egovehicle)

Создайте генератор обнаружения видения, который обнаруживает маршруты и объекты. Подача датчика указывает одну степень вниз.

visionSensor = visionDetectionGenerator('Pitch',1.0);
visionSensor.DetectorOutput = 'Lanes and objects';
visionSensor.ActorProfiles = actorProfiles(scenario);

Запустите симуляцию.

  1. Создайте видимый с большого расстояния график и связанные плоттеры.

  2. Отобразите зону охвата датчика.

  3. Отобразите маркировки маршрута.

  4. Получите положения основной истины целей на дороге.

  5. Получите идеальные граничные точки маршрута до 60 м вперед.

  6. Сгенерируйте обнаружения от идеальных целевых положений и контуров маршрута.

  7. Отобразите схему цели.

  8. Обнаружения экранного объекта, когда обнаружение объектов допустимо.

  9. Отобразите контур маршрута, когда обнаружение маршрута будет допустимо.

bep = birdsEyePlot('XLim',[0 60],'YLim',[-35 35]);
caPlotter = coverageAreaPlotter(bep,'DisplayName','Coverage area', ...
    'FaceColor','blue');
detPlotter = detectionPlotter(bep,'DisplayName','Object detections');
lmPlotter = laneMarkingPlotter(bep,'DisplayName','Lane markings');
lbPlotter = laneBoundaryPlotter(bep,'DisplayName', ...
    'Lane boundary detections','Color','red');
olPlotter = outlinePlotter(bep);
plotCoverageArea(caPlotter,visionSensor.SensorLocation,...
    visionSensor.MaxRange,visionSensor.Yaw, ...
    visionSensor.FieldOfView(1));
while advance(scenario)
    [lmv,lmf] = laneMarkingVertices(egovehicle);
    plotLaneMarking(lmPlotter,lmv,lmf)
    tgtpose = targetPoses(egovehicle);
    lookaheadDistance = 0:0.5:60;
    lb = laneBoundaries(egovehicle,'XDistance',lookaheadDistance,'LocationType','inner');
    [obdets,nobdets,obValid,lb_dets,nlb_dets,lbValid] = ...
        visionSensor(tgtpose,lb,scenario.SimulationTime);
    [objposition,objyaw,objlength,objwidth,objoriginOffset,color] = targetOutlines(egovehicle);
    plotOutline(olPlotter,objposition,objyaw,objlength,objwidth, ...
        'OriginOffset',objoriginOffset,'Color',color)
    if obValid
        detPos = cellfun(@(d)d.Measurement(1:2),obdets,'UniformOutput',false);
        detPos = vertcat(zeros(0,2),cell2mat(detPos')');
        plotDetection(detPlotter,detPos)
    end
    if lbValid
        plotLaneBoundary(lbPlotter,vertcat(lb_dets.LaneBoundaries))
    end
end

Алгоритмы

развернуть все

Введенный в R2017a

Для просмотра документации необходимо авторизоваться на сайте