drivingScenario

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

Описание

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

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

  • Чтобы добавить парковки, используйте parkingLot функция.

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

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

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

Создание

Описание

пример

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

пример

scenario = drivingScenario(Name,Value) устанавливает SampleTime, StopTime, и GeoReference свойства с помощью пар "имя-значение". Например, drivingScenario('GeoReference',[42.3 -71.0 0]) устанавливает географический источник сцены к координате долготы широты (42.3, –71.0) и высота 0.

Свойства

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

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

Пример: 1.5

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

Пример: 60.0

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

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

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

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

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

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

Барьеры содержатся в сценарии в виде разнородного массива Barrier объекты. Чтобы добавить барьеры для ведущего сценария, используйте barrier функция.

Парковки содержатся в сценарии в виде разнородного массива ParkingLot объекты. Чтобы добавить парковки в ведущий сценарий, используйте parkingLot функция.

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

Географические координаты источника дорожной сети в виде трехэлементного числового вектора-строки из формы [latlon , alt], где:

  • lat широта координаты в градусах.

  • lon долгота координаты в градусах.

  • alt высота координаты в метрах.

Эти значения относительно опорного эллипсоида WGS84, который является стандартным эллипсоидом, используемым данными о GPS.

Можно установить GeoReference когда вы создаете ведущий сценарий. roadNetwork функционируйте также устанавливает это свойство, когда вы импортируете дороги в пустой ведущий сценарий.

  • Если вы импортируете дороги путем определения координат, то roadNetwork функционируйте устанавливает GeoReference к первому (или только) заданная координата.

  • Если вы импортируете дороги путем определения области или сопоставляете файл, то roadNetwork наборы GeoReference к центральной точке области или карты.

roadNetwork функционируйте заменяет любой ранее набор GeoReference значение.

В приложении Driving Scenario Designer, когда вы импортируете данные о карте и экспортируете drivingScenario объект, GeoReference свойство того объекта установлено в географическую ссылку сценария приложения.

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

Если ваш ведущий сценарий не использует географические координаты, то GeoReference пустой массив, [].

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

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

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

Примеры

свернуть все

Создайте ведущий сценарий, содержащий кривую дорогу, две дороги подряд и двух агентов: автомобиль и велосипед. Оба агента проходят дорога в течение 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)
ans = 
  Road with properties:

           Name: ""
         RoadID: 2
    RoadCenters: [2x3 double]
      RoadWidth: 6
      BankAngle: [2x1 double]
        Heading: [2x1 double]

roadcenters = [400 400 0; 0 0 0];
road(scenario,roadcenters)
ans = 
  Road with properties:

           Name: ""
         RoadID: 3
    RoadCenters: [2x3 double]
      RoadWidth: 6
      BankAngle: [2x1 double]
        Heading: [2x1 double]

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

rbdry = roadBoundaries(scenario);

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

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

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

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

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

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

Figure contains an axes object. The axes object with title Scenario contains 1219 objects of type patch, line.

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

poses = actorPoses(scenario)
poses=2×1 struct array with fields:
    ActorID
    Position
    Velocity
    Roll
    Pitch
    Yaw
    AngularVelocity

profiles = actorProfiles(scenario)
profiles=2×1 struct array with fields:
    ActorID
    ClassID
    Length
    Width
    Height
    OriginOffset
    MeshVertices
    MeshFaces
    RCSPattern
    RCSAzimuthAngles
    RCSElevationAngles

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

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

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

scenario = drivingScenario;

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

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

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

egovehicle = vehicle(scenario,'ClassID',1);
egopath = [1.5 0 0; 60 0 0; 111 25 0];
egospeed = 30;
smoothTrajectory(egovehicle,egopath,egospeed);

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

targetcar = vehicle(scenario,'ClassID',1);
targetpath = [8 2; 60 -3.2; 120 33];
targetspeed = 40;
smoothTrajectory(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