Создайте ведущий сценарий
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.
SampleTime
— Временной интервал между шагами симуляции сценария
(значение по умолчанию) | положительный действительный скалярВременной интервал между шагами симуляции сценария в виде положительного действительного скаляра. Величина в секундах.
Пример: 1.5
StopTime
— Время окончания симуляцииInf
(значение по умолчанию) | положительный действительный скалярВремя окончания симуляции в виде положительного действительного скаляра. Величина в секундах. StopTime
по умолчанию из
Inf
заставляет симуляцию заканчиваться, когда первый агент достигает конца своей траектории.
Пример: 60.0
SimulationTime
— Текущее время симуляцииЭто свойство доступно только для чтения.
Текущее время симуляции в виде положительного действительного скаляра. Чтобы сбросить время, чтобы обнулить, вызовите restart
функция. Величина в секундах.
IsRunning
— Состояние симуляцииtrue
| false
Это свойство доступно только для чтения.
Состояние симуляции в виде true
или false
. Если симуляция запускается, IsRunning
true
.
Actors
— Агенты и транспортные средства содержатся в сценарииActor
и Vehicle
объектыBarriers
— Барьеры содержатся в сценарииBarrier
объектыБарьеры содержатся в сценарии в виде разнородного массива Barrier
объекты. Чтобы добавить барьеры для ведущего сценария, используйте barrier
функция.
ParkingLots
— Парковки содержатся в сценарииParkingLot
объектыПарковки содержатся в сценарии в виде разнородного массива ParkingLot
объекты. Чтобы добавить парковки в ведущий сценарий, используйте parkingLot
функция.
GeoReference
— Географические координаты источника дорожной сетиlat
lon
, alt
]Это свойство доступно только для чтения.
Географические координаты источника дорожной сети в виде трехэлементного числового вектора-строки из формы [lat
lon
, 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');
Отобразите положения агента и профили.
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
Создайте ведущий сценарий, содержащий автомобиль, оборудованный датчиком и целевое транспортное средство, перемещающееся вдоль трехполосной дороги. Обнаружьте контуры маршрута при помощи генератора обнаружения видения.
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);
Запустите симуляцию.
Создайте видимый с большого расстояния график и связанные плоттеры.
Отобразите зону охвата датчика.
Отобразите маркировки маршрута.
Получите положения основной истины целей на дороге.
Получите идеальные граничные точки маршрута до 60 м вперед.
Сгенерируйте обнаружения от идеальных целевых положений и контуров маршрута.
Отобразите схему цели.
Обнаружения экранного объекта, когда обнаружение объектов допустимо.
Отобразите контур маршрута, когда обнаружение маршрута будет допустимо.
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
Чтобы задать движение агентов в ведущем сценарии, можно или задать траектории для агентов или задать их движение вручную.
trajectory
и smoothTrajectory
функции определяют свойства положения агента на основе набора waypoints и скоростей, на которых агент перемещается между теми waypoints. Свойства положения агента являются положением, скоростью, креном, тангажом, рысканием и скоростью вращения. С этим подходом движение задано скоростью, не скоростью, потому что траектория определяет направление движения.
smoothTrajectory
функция дополнительно определяет ускорение агента между waypoints на основе waypoints, скорости, и максимальным продольным толчком.
Агент проходит траектория каждый раз advance
функция вызвана. Можно вручную обновить свойства положения агента в любое время во время симуляции. Однако эти свойства перезаписываются с обновленными значениями в следующем вызове advance
.
Когда вы указываете, что движение агента вручную, устанавливая скорость или свойства скорости вращения автоматически не перемещает агента в последовательные вызовы advance
функция. Поэтому необходимо использовать собственную модель движения, чтобы обновить положение, скорость и другие параметры положения на каждом шаге времени симуляции.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.