drivingScenario

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

Описание

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

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

  • Добавить агентов (автомобили, пешеходы, велосипеды, и так далее), использование 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 функции.

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

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

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

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

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

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

Источник дорожной сети соответствует первому набору географических координат, заданных, как введено к roadNetwork функция. Если вы задаете, чтобы импортировать дороги областью, то эта точка соответствует центральной точке заданной прямоугольной области.

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

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

Зависимости

Чтобы включить это свойство, импортируйте дороги из веб-сервиса HERE HD Live Map[1] в ведущий сценарий при помощи roadNetwork функционируйте или приложение Driving Scenario Designer.

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

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

advanceУсовершенствуйте ведущую симуляцию сценария одним временным шагом
plotСоздайте ведущий график сценария
recordЗапустите ведущий сценарий и запишите состояния агента
restartПерезапустите ведущую симуляцию сценария с начала
updatePlotsОбновите ведущие графики сценария
exportЭкспортируйте дорожную сеть в OpenDRIVE
actorДобавьте агента в ведущий сценарий
actorPosesПоложения, скорости и ориентации агентов в ведущем сценарии
actorProfilesФизический и радарные характеристики агентов в ведущем сценарии
vehicleДобавьте транспортное средство в ведущий сценарий
chasePlotЭгоцентрический проективный перспективный график
trajectoryСоздайте агента или траекторию транспортного средства в ведущем сценарии
targetPosesЦелевые положения и ориентации относительно автомобиля, оборудованного датчиком
targetOutlinesОсновы целей просматриваются агентом
driving.scenario.targetsToEgoПреобразуйте целевые положения от сценария до координат эго
driving.scenario.targetsToScenarioПреобразуйте целевые положения от эго до координат сценария
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)
ans = 
  Road with properties:

           Name: ""
         RoadID: 2
    RoadCenters: [2x3 double]
      RoadWidth: 6
      BankAngle: [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]

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

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');

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

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);
road(scenario,[-10 0 0; 45 -20 0]);
road(scenario,[-10 -10 0; 35 10 0]);
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;
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,'ClassID',1);
egopath = [1.5 0 0; 60 0 0; 111 25 0];
egospeed = 30;
trajectory(egovehicle,egopath,egospeed);

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

targetcar = vehicle(scenario,'ClassID',1);
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

[1]  Необходимо заключить отдельное соглашение с HERE для того, чтобы получить доступ к сервисам HDLM и получить необходимые учетные данные (access_key_id и access_key_secret) для использования Сервиса HERE.