exponenta event banner

compositeLaneSpec

Создание дороги с несколькими спецификациями полос движения

Описание

compositeLaneSpec объект объединяет массив lanespec объекты для создания дороги с несколькими сегментами дороги, имеющими различные спецификации полос движения.

Создание

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

  1. Создание массива lanespec объекты. Количество lanespec объекты определяют количество сегментов дороги в дороге. Каждый lanespec объект содержит спецификации полосы для одного сегмента дороги.

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

  3. Чтобы изменить диапазон для каждого сегмента дороги, используйте SegmentRange имущества compositeLaneSpec объект.

  4. Для определения соединения между двумя сегментами дороги используйте Connector имущества compositeLanespec объект.

  5. Добавить compositeLaneSpec объект к ведущему сценарию с использованием road функция.

Описание

пример

clspec = compositeLaneSpec(lsArray) создает составную спецификацию полосы движения для дороги с использованием массива объектов спецификации полосы движения; lsArray.

Например, создайте составной объект спецификации полосы движения, compositeLaneSpec, для объединения характеристик полосы движения двух сегментов дороги с двумя и тремя полосами движения соответственно.

lsArray = [lanespec(2) lanespec(3)];
clspec = compositeLaneSpec(lsArray);
Порядок нумерации полос и отрезков дороги зависит от ориентации дороги. Дополнительные сведения см. в разделах «Направление дороги и нумерация полос движения» и «Спецификация составной полосы движения».

пример

clspec = compositeLaneSpec(lsArray,Name,Value) задает свойства, используя один или несколько аргументов «имя-значение». Например, 'SegmentRange',[0.6 0.4] указывает, что нормализованные диапазоны двух сегментов дороги 0.6 и 0.4соответственно.

Свойства

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

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

Характеристики полос движения сегментов дорог, указанные как 1-by-N массив lanespec объекты. N - количество спецификаций полосы движения. Необходимо указать не менее двух lanespec объекты для создания дороги с несколькими спецификациями полос движения. Каждый lanespec объект представляет отдельный сегмент дороги. Как таковое, количество lanespec объекты определяют количество сегментов дороги в дороге.

Необходимо задать это свойство с помощью lsArray входной аргумент при создании объекта. Для создания объектов спецификации полосы используйте lanespec функция.

Пример: [lanespec(2) lanespec(3)] определяет параметры полосы движения для дороги с двумя сегментами. Первый дорожный сегмент имеет две полосы, а второй - три полосы.

Диапазон каждого сегмента дороги, заданный в виде N-элементного числового вектора с нормализованными значениями в диапазоне (0, 1). N - число lanespec объекты в LaneSpecification собственность. Сумма элементов вектора должна быть равна 1.

Значением диапазона по умолчанию для каждого сегмента дороги является 1/N. Например, если LaneSpecification свойство определяет спецификации полосы движения для двух сегментов дороги, затем значением диапазона по умолчанию для каждого сегмента дороги является 1/2, означающее, что SegmentRange = [0.5 0.5].

Пример: [0.4 0.3 0.3]

Типы данных: single | double

Соединители сегмента дороги, указанные как laneSpecConnector объект или 1-by-M массив laneSpecConnector объекты. M - количество соединителей сегмента дороги. Для дороги с N сегментами M = N - 1. При указании только одного объекта одни и те же спецификации применяются ко всем М соединителям дороги.

laneSpecConnector объект задает эти свойства для соединения пары сегментов дороги. Можно указать свойства для laneSpecConnector функция создания в качестве аргументов «имя-значение».

  • TaperShape - определяет форму конуса, соединяющего два сегмента дороги, как 'Linear' или 'None'. Определить 'None' при необходимости изменения шага при добавлении или опускании полос между сегментами дорог. Значение по умолчанию для TaperShape является 'Linear'.

  • TaperLength - определяет длину конуса в метрах. Значение по умолчанию TaperLength является меньшим из 241 метров или 75 процент длины сегмента дороги, содержащего конус.

  • Position - определяет край дороги, с которого требуется добавить или сбросить полосы движения. Можно указать положение соединителя как 'Right', 'Left', или 'Both'.

Пример: [laneSpecConnector('Position','Left') laneSpecConnector('TaperLength',20)]

Примечание

  • Конус является частью нижнего пронумерованного сегмента дороги внутри пары. Дополнительные сведения о порядке нумерации сегментов дорог см. в разделе Спецификация составной полосы движения.

  • Спецификации соединителя сегмента дороги должны соответствовать спецификациям полосы движения и значениям диапазона сегментов. В противном случае функция сбрасывает спецификации соединителя с допустимыми значениями. Например, если указать TaperLength больше, чем длина соответствующего сегмента дороги, функция сбрасывает длину конусности со значением, которое 75 процент от длины соответствующего сегмента дороги.

Примеры

свернуть все

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

Создание дороги с двумя спецификациями полосы движения

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

scenario = drivingScenario('StopTime',5);
roadCenters = [0 20; 100 20];

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

ls1 = lanespec([2 3],'Width',4);
ls2 = lanespec([2 2],'Width',4);
lsArray = [ls1 ls2];

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

clspec = compositeLaneSpec(lsArray);
road(scenario,roadCenters,'Lanes',clspec);

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

figMark = figure;
set(figMark,'Position',[0 0 600 600])
hPlot = axes(figMark);
plot(scenario,'Parent',hPlot)
title('Two-way Road Dropping Rightmost Lane')

Моделирование изменения полосы движения транспортного средства

Добавьте ego-транспортное средство к сценарию. Укажите ППМ и постоянное значение скорости, чтобы задать траекторию движения по средней прямой полосе.

egoVehicle = vehicle(scenario,'ClassID',1,'Position',[2 16 0]);
waypoints = [2 16; 20 16; 95 16];
speed = 30;
smoothTrajectory(egoVehicle,waypoints,speed)

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

car = vehicle(scenario,'ClassID',1,'Position',[2 12 0]);
waypoints = [2 12; 12 12; 30 14; 42 16; 58 16; 85 16];
speed = 20;
smoothTrajectory(car,waypoints,speed)

Создайте пользовательское окно фигуры и постройте график сценария.

close all
figScene = figure;
set(figScene,'Position',[0 0 600 600])
hPanel = uipanel(figScene);
hPlot = axes(hPanel);
plot(scenario,'Waypoints','on','Parent',hPlot)
title('Merge Left as Right Lane Ends')

while advance(scenario)
    pause(0.01)
end

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

Создайте сценарий управления. Укажите центры дорог для прямой 100-метровой дороги с направлением рисования слева направо.

scenario = drivingScenario;
roadCenters = [20 100; 20 0];

Определите массив спецификаций полосы движения для двух сегментов дороги с односторонним движением. Первый дорожный сегмент имеет две полосы, а второй дорожный сегмент имеет три полосы.

lsArray = [lanespec(2) lanespec(3)];

Определите объект соединителя сегмента дороги. Чтобы добавить третью полосу к левой стороне второго сегмента дороги, задайте свойство position. Длина конусности меньше длины первого сегмента дороги. Длина обоих сегментов дороги составляет 50 метров, так как по умолчанию общая длина дороги 100 метров делится поровну между указанными сегментами дороги.

lc = laneSpecConnector('Position','Left','TaperLength',30);

Создайте составной объект спецификации полосы движения.

clspec = compositeLaneSpec(lsArray,'Connector',lc);

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

road(scenario,roadCenters,'Lanes',clspec);
plot(scenario)
title('Road with Multiple Lane Specifications')

Создайте пустой сценарий управления. Укажите центры дорог для криволинейной дороги.

scenario = drivingScenario;
roadCenters = [-20 22; 0 22; 18.8 15.8; 22 0; 22 -20];

Определите параметры полосы движения для трех сегментов двухсторонней дороги. Обратите внимание, что все сегменты дорог имеют одинаковое количество полос. Однако второй сегмент дороги имеет большую ширину полосы (4,6 метра) для расширения дороги по кривой. Два других сегмента дороги имеют ширину полосы по умолчанию 3,6 метра.

lsArray = [lanespec([1 1]) lanespec([1 1],'Width',4.6) lanespec([1 1])];

Определите нормализованные длины для каждого сегмента дороги. Обратите внимание, что сумма нормированных длин равна 1и длина вектора соответствует количеству объектов спецификации полосы движения.

range = [0.25 0.65 0.1];

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

lc = laneSpecConnector('TaperLength',14);

Создайте составной объект спецификации полосы движения и добавьте дорогу в сценарий движения.

clspec = compositeLaneSpec(lsArray,'Connector',lc,'SegmentRange',range);
road(scenario,roadCenters,'Lanes',clspec);

Постройте график сценария вождения.

plot(scenario,'RoadCenters','on')
title('Lane Widening Along a Curve')

Ограничения

  • При переходах от одного сегмента дороги к другому расстояние между разметками полос не согласовывается.

Подробнее

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

Представлен в R2021a