parkingLot

Добавьте парковку в ведущий сценарий

Описание

пример

parkingLot(scenario,vertices) добавляет парковка к ведущему сценарию. Парковка в форме многоугольника, сформированного заданными вершинами.

пример

parkingLot(scenario,vertices,Name=Value) задает дополнительные опции с помощью аргументов name-value. Например, задать парковочное место раньше заполняло одно из предопределенных размещений парковки, использовало ParkingSpace аргумент значения имени.

пример

lot = parkingLot(___) возвращает ParkingLot объект, lot, это хранит свойства созданной парковки. Чтобы вставить парковочные места в эту парковку, задайте lot как входной параметр insertParkingSpaces функция. Можно возвратить lot использование любого из предыдущих синтаксисов.

Примеры

свернуть все

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

scenario = drivingScenario;
roadcenters = [25 30; 25 15];
road(scenario,roadcenters);

vertices = [0 0; 50 0; 50 20; 0 20];
lot = parkingLot(scenario,vertices);
plot(scenario,ParkingLotEdges="On")

Задайте тип парковочного места, чтобы добавить вдоль одного из ребер. Установите угол 60 градусов. Постройте парковочное место.

space = parkingSpace(Angle=60);
plot(space)

Вставьте угловые пробелы вдоль ребра 1 из парковки.

insertParkingSpaces(lot,space,Edge=1)

Вставьте повернутые пробелы вдоль ребра 3: пять выше соединения и пять ниже соединения. Возместите эти пробелы на 3 метра и в 30 метрах от нижней части ребра 3, соответственно. Инвертируйте угол пробелов, используемых вдоль ребра 1.

numSpaces = 5;
space = parkingSpace(Angle=120);
insertParkingSpaces(lot,space,numSpaces,Edge=3,Offset=3)
insertParkingSpaces(lot,space,numSpaces,Edge=3,Offset=30)

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

Задайте парковочное место, используемое, чтобы заполнить парковку. Измените ширину, длину или угол пробела и ширины и силы ее маркировок маршрута. Постройте парковочное место.

width = 2.6; % m
длина = 5.5; % m
угол = 90; % deg
markingWidth = 0.15;
markingStrength = 1;

пробел = parkingSpace (Width=width, ...
                    Length=length, ...
                    Angle=angle, ...
                    MarkingWidth=markingWidth, ...
                    MarkingStrength=markingStrength);
постройте (пробел)

Figure contains an axes object. The axes object with title Parking Space contains 2 objects of type patch, line.

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

  • Когда вы увеличиваете размер парковочного места или минимальной ведущей ширины маршрута, количества парковки сеток, которые соответствуют посреди уменьшений парковки.

  • Если вы выбираете HorizontalWithEdges или VerticalWithEdges размещение, одно ребро имеет меньше пробелов, чем другие. Это ребро содержит ведущий маршрут ширины DrivingLaneWidth это позволяет транспортным средствам ввести парковку.

scenario = drivingScenario;
vertices = [0 0; 50 0; 50 -50; 0 -50];
parkingLayout = "Vertical";
drivingLaneWidth = 2.6; % m

parkingLot (сценарий, вершины, ...
    ParkingSpace=space, ...
    ParkingLayout=parkingLayout, ...
    DrivingLaneWidth=drivingLaneWidth);

постройте (сценарий)

Figure contains an axes object. The axes object contains 3 objects of type patch, line.

Создайте ведущий сценарий, содержащий 50-метровую дорогу и 20 30 парковка метра. Постройте сценарий.

scenario = drivingScenario;
roadcenters = [0 50; 50 0];
road(scenario,roadcenters);

vertices = [40 10; 25 -5; 5 15; 20 30];
lot = parkingLot(scenario,vertices);
plot(scenario)

Figure contains an axes object. The axes object contains 2 objects of type patch, line.

Вставьте сетку парковки в партию. Задайте сетку с двумя строками восьми пробелов. Используйте размерности парковочного места по умолчанию и поместите сетку в углу в 45 градусов, чтобы выровнять ее с дорогой.

space = parkingSpace;
numSpaces = 8;
insertParkingSpaces(lot,space,numSpaces,Rows=2,Position=[15 20],Orientation=45)

Figure contains an axes object. The axes object contains 3 objects of type patch, line.

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

Задайте парковочное место, чтобы использовать на парковке. Используйте настройки по умолчанию. Постройте пробел.

space = parkingSpace;
plot(space,Origin="off")

Figure contains an axes object. The axes object with title Parking Space contains an object of type patch.

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

noSpace = parkingSpace(Type="NoParking",Width=(space.Width - 1),MarkingColor="White");
plot(noSpace,Origin="off")

Figure contains an axes object. The axes object with title No Parking contains an object of type patch.

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

accessibleSpace = parkingSpace(Type="Accessible",Width=(space.Width + 1));
plot(accessibleSpace,Origin="off")

Figure contains an axes object. The axes object with title Accessible Parking Space contains 4 objects of type patch.

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

scenario = drivingScenario;
vertices = [0 0; 32 -10.5; 32 -50.5; 25 -57.5; 0 -57.5];
lot = parkingLot(scenario,vertices);
plot(scenario,ParkingLotEdges="on")

Figure contains an axes object. The axes object contains 7 objects of type patch, line, text.

Вставьте парковочные места по умолчанию вдоль первых трех ребер парковки. Чтобы постараться не перекрывать парковочные места, внесите эти корректировки во вставки:

  • Вдоль ребра 1, вставьте только 10 пробелов.

  • Вдоль ребра 2, возмещает пробелы на 5 метров от первой вершины ребра.

  • Вдоль ребра 3, возмещает пробелы на 3 метра от первой вершины ребра.

numSpaces = 10;
insertParkingSpaces(lot,space,numSpaces,Edge=1)
insertParkingSpaces(lot,space,Edge=2,Offset=5)
insertParkingSpaces(lot,space,Edge=3,Offset=3)

Figure contains an axes object. The axes object contains 23 objects of type text, patch, line.

В центре парковки вставьте 2 10 сетка парковочных мест, содержащих 8 столбцов пробелов по умолчанию, 1 столбец областей без парковок и 1 столбец доступных пробелов.

insertParkingSpaces(lot,[space noSpace accessibleSpace],[8 1 1],Position=[12 -18],Rows=2)

Figure contains an axes object. The axes object contains 28 objects of type text, patch, line.

Симулируйте ведущий сценарий, в котором автомобиль управляет наоборот, чтобы отступить в парковочное место.

Создайте ведущий сценарий, содержащий парковку.

scenario = drivingScenario;
vertices = [0 9; 18 9; 18 -9; 0 -9];
parkingLot(scenario,vertices,ParkingSpace=parkingSpace);

Создайте автомобиль и задайте его траекторию. Автомобильные диски вперед, остановки, и затем управляют наоборот, чтобы отступить в парковочное место. Когда автомобиль вводит парковочное место, он имеет угол ориентации рыскания, который является 90 градусами против часовой стрелки от того, где он запустился.

car = vehicle(scenario,ClassID=1);
waypoints = [9 -5; 9 5; 6 -1.3; 2 -1.3];
speed = [3; 0; -2; 0];
yaw = [90 90 180 180];
smoothTrajectory(car,waypoints,speed,Yaw=yaw)

Постройте ведущий сценарий и отобразите waypoints траектории.

plot(scenario,Waypoints="on")
while advance(scenario)
    pause(0.001)
end

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

Создайте ведущий сценарий, содержащий дорожную и парковку.

scenario = drivingScenario;
roadcenters = [10 40; 10 -40];
road(scenario,roadcenters);
vertices = [0 20; 20 20; 20 -20; 0 -20];
parkingLot(scenario,vertices,ParkingSpace=parkingSpace);

Добавьте автомобиль, оборудованный датчиком и задайте траекторию, в которой транспортное средство проезжает парковка.

ego = vehicle(scenario);
waypoints = [10 35 0; 10 10 0];
speed = 5; % m/s
smoothTrajectory(ego,waypoints,speed)

Создайте припаркованные автомобили на нескольких парковочных местах. Постройте сценарий.

parkedCar1 = vehicle(scenario,Position=[15.8 12.4 0]);
parkedCar2 = vehicle(scenario,Position=[15.8 -12.4 0]);
parkedCar3 = vehicle(scenario,Position=[2 -9.7 0]);
parkedCar4 = vehicle(scenario,Position=[2 9.7 0]);
plot(scenario)

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

sensor = visionDetectionGenerator;

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

bep = birdsEyePlot(XLim=[-40 40],YLim=[-30 30]);
olPlotter = outlinePlotter(bep);
lbPlotter = laneBoundaryPlotter(bep);
lmPlotter = laneMarkingPlotter(bep,DisplayName="Parking lanes");
caPlotter = coverageAreaPlotter(bep,DisplayName="Coverage area");
detPlotter = detectionPlotter(bep,DisplayName="Detections");

while advance(scenario)

    % Plot target outlines.
    [position,yaw,length,width,originOffset,color] = targetOutlines(ego);
    plotOutline(olPlotter,position,yaw,length,width)

    % Plot lane boundaries of ego vehicle.
    rbEgo = roadBoundaries(ego);
    plotLaneBoundary(lbPlotter,rbEgo)

    % Plot parking lane markings.
    [plmv,plmf] = parkingLaneMarkingVertices(ego);
    plotParkingLaneMarking(lmPlotter,plmv,plmf)

    % Plot sensor coverage area.
    mountPosition = sensor.SensorLocation;
    range = sensor.MaxRange;
    orientation = sensor.Yaw;
    fieldOfView = sensor.FieldOfView(1);
    plotCoverageArea(caPlotter,mountPosition,range,orientation,fieldOfView)

    % Generate and plot detections.
    actors = targetPoses(ego);
    time = scenario.SimulationTime;
    [dets,isValidTime] = sensor(actors,time);
    if isValidTime
        positions = cell2mat(cellfun(@(x)([x.Measurement(1) x.Measurement(2)]), ...
            dets,UniformOutput=false));
        plotDetection(detPlotter,positions)
    end

end

Входные параметры

свернуть все

Ведущий сценарий в виде drivingScenario объект.

Вершины парковки в виде N-by-2 или N-by-3 матрица с действительным знаком. N является количеством вершин, и каждый из сегментов N - 1 между вершинами задает ребро парковки. N должен быть больше или быть равен 3.

  • Если vertices N-by-2 матрица, затем каждая строка матрицы представляет (x, y) координата вершины. Z-координатой каждой вершины является 0.

  • Если vertices N-by-3 матрица, затем каждая строка матрицы представляет (x, y, z) координата вершины.

Вершины находятся в системе мировой координаты ведущего сценария.

Этот аргумент устанавливает Vertices свойство парковки. Просмотреть свойства парковки, любой доступ ParkingLots свойство scenario, или возвратите парковку путем определения lot выходной аргумент.

Пример: [0 0; 0 20; 20 20; 20 0]

Пример: [0 0 0; 0 20 5; 20 20 5; 20 0 0]

Аргументы name-value

Задайте дополнительные пары аргументов как Name1=Value1,...,NameN=ValueN, где Name имя аргумента и Value соответствующее значение. Аргументы name-value должны появиться после других аргументов, но порядок пар не имеет значения.

Пример: ParkingSpace=parkingSpace,ParkingLayout="Horizontal" заполняет парковку с парковочным местом по умолчанию в горизонтальном макете.

Парковочное место раньше заполняло парковку в виде parkingSpace объект. Задавать тип размещения раньше заполняло парковку с пробелами, использовало ParkingLayout аргумент значения имени.

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

Размещение парковки в виде "Vertical", "Horizontal", "VerticalWithEdges", или "HorizontalWithEdges".

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

Эта таблица описывает ParkingLayout опции.

ОпцияОписание
"Vertical"

Разметьте парковочные места сверху донизу.

Vertical parking lot layout

"Horizontal"

Разметьте парковочные места слева направо.

Horizontal parking lot layout

"VerticalWithEdges"

Разметьте парковочные места сверху донизу и также вставьте парковочные места вдоль левых и правых ребер. Чтобы позволить транспортным средствам ввести парковку, базовый край содержит ведущий маршрут с шириной DrivingLaneWidth метры.

Vertical parking lot layout with parking grids on horizontal edges

"HorizontalWithEdges"

Разметьте парковочные места слева направо и также вставьте парковочные места вдоль верхних и нижних ребер. Чтобы позволить транспортным средствам ввести парковку, правый край содержит ведущий маршрут с шириной DrivingLaneWidth метры.

Horizontal parking lot layout with parking grids on vertical edges

Типы данных: char | string

Минимальная ширина ведущих маршрутов на парковке, на метрах в виде действительного скаляра в области значений [0, 50]. Чтобы использовать этот аргумент, необходимо задать ParkingSpace аргумент значения имени. parkingLot функционируйте использует DrivingLaneWidth определить сумму пробела, чтобы добавить по обе стороны от сеток парковки. По умолчанию, DrivingLaneWidth равно ширине пробела, заданного ParkingSpace.

Чтобы осуществить симметричное расположение сеток парковки, фактическая ширина ведущих маршрутов может быть больше DrivingLaneWidth. Например, на этой парковке, горизонтальная ширина, W H, равна DrivingLaneWidth, но вертикальная ширина, W V, немного больше DrivingLaneWidth. Дополнительная вертикальная ширина включает ровное распределение сеток парковки в партии вдоль вертикальной оси

Parking lot with parking grids on the top and bottom edge and two interior parking grids. The vertical width between parking grids is slightly greater than the horizontal width.

Имя парковки в виде вектора символов или строкового скаляра. Этот аргумент устанавливает Name свойство парковки. Просмотреть это свойство на парковке, любой доступ ParkingLots свойство scenario или возвратите парковку путем определения lot выходной аргумент.

Типы данных: char | string

Выходные аргументы

свернуть все

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

СвойствоЗначение
Vertices

Вершины парковки в виде N с действительным знаком-by-3 матрица, где N является количеством вершин.

vertices входной параметр устанавливает это свойство. Если вы задаете vertices как N-by-2 матрица, затем третье значение (z - значение) каждой строки матрицы Vertices 0. Сохраненный Vertices имеют совпадающий тип данных как вход vertices.

RoadID

Идентификатор парковки в виде положительного целого числа.

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

Name

Имя парковки в виде строкового скаляра.

Name аргумент значения имени устанавливает это свойство. Даже если вы задаете этот аргумент как вектор символов, Name значение свойства является строковым скаляром.

Чтобы вставить парковочные места в эту парковку, задайте lot как входной параметр insertParkingSpaces функция.

Ограничения

  • Импорт данных о парковке из внешних источников при помощи roadNetwork функция не поддерживается.

  • Импорт парковок в приложение Driving Scenario Designer не поддерживается. Если вы открываете сценарий, содержащий парковку в приложении, приложение не использует парковку из сценария.

  • Импорт парковок в Simulink® не поддерживается. Если вы читаете сценарий, содержащий парковку в Simulink при помощи блока Scenario Reader, блок не использует парковку из модели Simulink.

  • Обнаружения датчика парковки маркировок маршрута не поддерживаются. Однако можно визуализировать маркировки маршрута парковки на birdsEyePlot объект при помощи plotParkingLaneMarking функция.

Введенный в R2021b