compositeLaneSpec

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

Описание

The 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-бай- 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. Если задан только как один объект, те же спецификации применяются ко всем M соединителям дороги.

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

Симулируйте изменение маршрута транспортного средства

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

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

Задайте объект соединителя сегмента дороги. Чтобы добавить третью полосу для левой стороны второго сегмента дороги, задайте свойство положения. Задайте длину конуса меньше длины первого сегмента дороги. Оба сегмента дороги имеют длину 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 объект. Поскольку вы не добавляете и не сбрасываете полосы, не задайте свойство положения соединителя сегмента дороги.

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