exponenta event banner

laneMarking

Создание объекта разметки дорожной полосы

Описание

Тип одиночной разметки вдоль полосы движения

lm = laneMarking(type) создает объект разметки полосы по умолчанию указанного типа (сплошная полоса, пунктирная полоса и т. д.). Этот объект определяет характеристики разметки границ полосы движения на дороге. При создании дорог в сценарии движения можно использовать объекты разметки полос в качестве входных данных для lanespec объект.

пример

lm = laneMarking(type,Name,Value) задайте свойства объекта разметки полосы движения, используя одну или несколько пар имя-значение. Например, laneMarking('Solid','Color','yellow') создает сплошную желтую разметку полосы движения.

Несколько типов разметки вдоль полосы движения

пример

cm = laneMarking(lmArray) создает составной объект разметки полосы из массива объектов разметки полосы; lmArray. Этот синтаксис используется для создания разметки полосы движения, содержащей несколько типов маркеров.

Например, создайте разметку границы полосы движения, которая имеет как сплошные, так и пунктирные типы разметки, путем определения lmArray.

lmArray = [laneMarking('Solid') laneMarking('Dashed')]
cm = laneMarking(lmArray)
Порядок нанесения разметки зависит от направления движения дороги. Дополнительные сведения см. в разделах Направление дороги и нумерация полос и Составная разметка полос.

пример

cm = laneMarking(lmArray,'SegmentRange',range) задает диапазон для каждого типа маркера в комбинированной разметке полосы движения с помощью аргумента пары имя-значение 'SegmentRange', range.

Примеры

свернуть все

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

scenario = drivingScenario;
roadCenters = [0 0; 80 0];

Создать lanespec объект для четырехполосной дороги. Используйте laneMarking для задания его пяти разметок полос движения. Осевая линия - двойная сплошная и двойная желтая. Самые внешние линии сплошные и белые. Внутренние линии пунктирные и белые.

solidW = laneMarking('Solid','Width',0.3);
dashW = laneMarking('Dashed','Space',5);
doubleY = laneMarking('DoubleSolid','Color','yellow');
lspec = lanespec([2 2],'Width',[5 5 5 5], ...
    'Marking',[solidW dashW doubleY dashW solidW]);

Добавьте дорогу в сценарий движения. Отображение дороги.

road(scenario,roadCenters,'Lanes',lspec);
plot(scenario)

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

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

Создайте сценарий движения с одной дорогой, имеющей S-образную кривую.

scenario = drivingScenario('StopTime',3);
roadcenters = [-35 20 0; -20 -20 0; 0 0 0; 20 20 0; 35 -20 0];

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

lm = [laneMarking('Solid','Color','w'); ...
    laneMarking('Dashed','Color','y'); ...
    laneMarking('Dashed','Color','y'); ...
    laneMarking('Solid','Color','w')];
ls = lanespec(3,'Marking',lm);
road(scenario,roadcenters,'Lanes',ls);

Добавьте эго-транспортное средство и укажите его траекторию из его ППМ. По умолчанию автомобиль едет со скоростью 30 метров в секунду.

car = vehicle(scenario, ...
    'ClassID',1, ...
    'Position',[-35 20 0]);
waypoints = [-35 20 0; -20 -20 0; 0 0 0; 20 20 0; 35 -20 0];
smoothTrajectory(car,waypoints);

Постройте график сценария и соответствующий график погони.

plot(scenario)

chasePlot(car)

Запустите цикл моделирования.

  1. Инициализируйте график «птичий глаз» и создайте плоттер контура, плоттер границы левой и правой полос и плоттер границы дороги.

  2. Получение границ дороги и прямоугольных контуров.

  3. Получить границы полосы слева и справа от транспортного средства.

  4. Продолжите моделирование и обновите плоттеры.

bep = birdsEyePlot('XLim',[-40 40],'YLim',[-30 30]);
olPlotter = outlinePlotter(bep);
lblPlotter = laneBoundaryPlotter(bep,'Color','r','LineStyle','-');
lbrPlotter = laneBoundaryPlotter(bep,'Color','g','LineStyle','-');
rbsEdgePlotter = laneBoundaryPlotter(bep);
legend('off');
while advance(scenario)
    rbs = roadBoundaries(car);
    [position,yaw,length,width,originOffset,color] = targetOutlines(car);
    lb = laneBoundaries(car,'XDistance',0:5:30,'LocationType','Center', ...
        'AllBoundaries',false);
    plotLaneBoundary(rbsEdgePlotter,rbs)
    plotLaneBoundary(lblPlotter,{lb(1).Coordinates})
    plotLaneBoundary(lbrPlotter,{lb(2).Coordinates})
    plotOutline(olPlotter,position,yaw,length,width, ...
        'OriginOffset',originOffset,'Color',color)
end

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

Создание дороги с проезжающими зонами с помощью композитной разметки полосы движения

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

scenario = drivingScenario('StopTime',10);
roadCenters = [50 0; -4 0];
numLanes = [1 1];

Как правило, количество разметок полос равно количеству полос плюс одна. Двухсторонняя, двухполосная дорога имеет 3 разметки полос, а самая внешняя разметка полос по обоим краям представляет собой сплошные белые линии.

Создать сплошной объект разметки шириной 0,25 метра, составляющий самую внешнюю разметку полосы движения для дороги с двусторонним движением.

outerLM = laneMarking('Solid','Width',0.25);

Создание массива разметки полосы движения SolidMarking и DashedMarking объекты, содержащие свойства сплошных и пунктирных двойных желтых линий.

lmArray = [laneMarking('DoubleSolid','Color','Yellow','Width',0.25)
           laneMarking('DashedSolid','Color','Yellow','Length',1,'Space',1.5,'Width',0.25)
           laneMarking('DoubleSolid','Color','Yellow','Width',0.25)
           laneMarking('SolidDashed','Color','Yellow','Length',1,'Space',1.5,'Width',0.25)];

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

centerLM = laneMarking(lmArray,'SegmentRange',[0.1 0.25 0.2 0.35]);

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

marking = [outerLM centerLM outerLM];
ls = lanespec(numLanes,'Width',7,'Marking',marking);

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

road(scenario,roadCenters,'Lanes',ls);
figMark = figure;
set(figMark,'Position',[0 0 600 600]);
hPlot = axes(figMark);
plot(scenario,'Parent',hPlot);
title('Composite Marking: Road with Passing Zones')

Figure contains an axes. The axes with title Composite Marking: Road with Passing Zones contains 3 objects of type patch, line.

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

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

slowVehicle = vehicle(scenario,'ClassID',1,'Position',[37 -3 0]);
waypoints = [37 -3;12 -3];
speed = 2;
smoothTrajectory(slowVehicle,waypoints,speed);

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

passingVehicle = vehicle(scenario,'ClassID',1,'Position',[49 -3 0]);
waypoints = [49 -3; 45 -3; 40 -3; 35 0;
             30 3; 26 3; 22 3; 18 3;
             8 0; 5 -2; 2 -3; 1 -3];
speed = 6;
smoothTrajectory(passingVehicle,waypoints,speed);

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

close all;
figScene = figure;
set(figScene,'Position',[0 0 600 600]);
hPanel = uipanel(figScene);
hPlot = axes(hPanel);
plot(scenario,'Parent',hPlot);
title('Passing Zone: Change Lane and Pass Other Vehicle')

% Run the simulation
while advance(scenario)
    pause(0.01)
end

Figure contains an axes and an object of type uipanel. The axes with title Passing Zone: Change Lane and Pass Other Vehicle contains 5 objects of type patch, line.

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

свернуть все

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

'Unmarked' 'Solid''Dashed''DoubleSolid''DoubleDashed''SolidDashed''DashedSolid'

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

Сплошная линия

Пунктирная линия

Две сплошные линии

Две пунктирные линии

Сплошная линия слева, пунктирная линия справа

Пунктирная линия слева, сплошная линия справа

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

1-D массив объектов разметки полосы движения, указанный как

  • LaneMarking объект для 'Unmarked' тип разметки полосы движения.

  • SolidMarking объект для 'Solid' и 'DoubleSolid' типы разметки полосы движения.

  • DashedMarking объект для 'Dashed', 'DoubleDashed', 'SolidDashed', и 'DashedSolid' типы разметки полосы движения.

Пример: lmArray = [laneMarking('Solid') laneMarking('Dashed')]

Диапазон для каждого типа маркировки, заданный как вектор с нормализованными значениями в интервале [0, 1]. Длина вектора должна совпадать с числом типов маркировки, указанных во входном массиве lmArray.

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

Например, если входной массив разметки полосы содержит три объекта разметки полосы, например lmArray = [laneMarking('Solid') laneMarking('Dashed') laneMarking('Solid')], то значение диапазона по умолчанию для каждого типа маркировки равно 1/3, то есть range = [0.3330 0.3330 0.3330].

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: laneMarking('Dashed','Width',0.25,'Length',5.0) создает полосу с тире шириной 0,25 метра и разнесением на 5 метров.

Ширина разметки полосы движения, указанная как разделенная запятыми пара, состоящая из 'Width' и положительный действительный скаляр. Для обозначения двойной полосы используется одинаковая ширина обеих линий. Единицы в метрах.

Ширина разметки полосы должна быть меньше ширины ее ограждающей полосы. Ограждающая полоса - полоса непосредственно слева от разметки полосы.

Пример: 0.20

Цвет разметки полосы, указанной как разделенная запятыми пара, состоящая из: 'Color' и триплет RGB, шестнадцатеричный цветовой код, имя цвета или короткое имя цвета. Для обозначения двойной полосы используется один и тот же цвет для обеих линий.

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

  • Триплет RGB - это трехэлементный вектор строки, элементы которого задают интенсивности красной, зеленой и синей составляющих цвета. Интенсивности должны находиться в диапазоне [0,1]; например, [0.4 0.6 0.7].

  • Шестнадцатеричный цветовой код - это символьный вектор или строковый скаляр, начинающийся с хэш-символа (#), за которыми следуют три или шесть шестнадцатеричных цифр, которые могут варьироваться от 0 кому F. Значения не чувствительны к регистру. Таким образом, цветовые коды '#FF8800', '#ff8800', '#F80', и '#f80' эквивалентны.

Можно также задать некоторые общие цвета по имени. В этой таблице перечислены параметры именованного цвета, эквивалентные триплеты RGB и шестнадцатеричные цветовые коды.

Имя цветаКраткое имяТриплет RGBШестнадцатеричный цветовой кодВнешность
'red''r'[1 0 0]'#FF0000'

'green''g'[0 1 0]'#00FF00'

'blue''b'[0 0 1]'#0000FF'

'cyan' 'c'[0 1 1]'#00FFFF'

'magenta''m'[1 0 1]'#FF00FF'

'yellow''y'[0.98 0.86 0.36]'#FFFF00'

'black''k'[0 0 0]'#000000'

'white''w'[1 1 1]'#FFFFFF'

Пример: [0.8 0.8 0.8]

Прочность насыщения цвета разметки полосы, определяемая как разделенная запятыми пара, состоящая из: 'Strength' и действительный скаляр в диапазоне [0, 1]. Значение 0 соответствует маркировке, цвет которой является полностью ненасыщенным. Маркировка серая. Значение 1 соответствует маркировке, цвет которой полностью насыщен. Для двухполосной разметки используется одинаковая прочность для обеих линий.

Пример: 0.20

Длина тире в пунктирных линиях, определяемая как разделенная запятыми пара, состоящая из 'Length' и положительный действительный скаляр. Для двухполосной разметки используется одинаковая длина для обеих линий. Тире является видимой частью пунктирной линии. Единицы в метрах.

Пример: 2.0

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

Пример: 2.0

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

свернуть все

Разметка полосы, возвращенная как LaneMarking объект, SolidMarking объект, или DashedMarking объект. Тип возвращаемого объекта зависит от типа входной разметки полосы, указанной для type вход.

Тип вводаРазметка выходной полосыСвойства разметки полосы движения
'Unmarked'

LaneMarking объект

  • Type

'Solid'

SolidMarking объект

  • Color

  • Width

  • Strength

  • Type

'DoubleSolid'
'Dashed'

DashedMarking объект

  • Length

  • Space

  • Color

  • Width

  • Strength

  • Type

'DashedSolid'
'SolidDashed'
'DoubleDashed'

Эти свойства можно задать при создании объекта разметки полосы движения с помощью соответствующих пар «имя-значение» laneMarking функция. Чтобы обновить эти свойства после создания, используйте точечную нотацию. Например:

lm = laneMarking('Solid');
lm.Width = 0.2;
После создания можно задать все свойства, кроме Type, который доступен только для чтения. Для получения подробной информации о геометрических свойствах SolidMarking и DashedMarking см. «Спецификации полосы движения».

Композитная разметка полосы движения, возвращенная как CompositeMarking объект со свойствами Markings и SegmentRange.

Свойства разметки составной полосы движенияОписание
MarkingsЭто свойство представляет собой массив объектов разметки полос, который определяет несколько типов разметки, составляющих составную разметку полос. Часть разметки полосы, определяемая каждым объектом разметки полосы, является сегментом маркера. Это свойство доступно только для чтения.
SegmentRangeЭто свойство задает нормированный диапазон для каждого сегмента маркера в составной разметке полосы движения. Это свойство доступно только для чтения.

Этот объект используется для задания нескольких типов разметки вдоль полосы движения. Дополнительные сведения о том, как задать составную разметку полосы движения и порядок сегментов маркеров вдоль полосы движения, см. в разделе Составная разметка полосы движения.

Подробнее

свернуть все

Рисование направления дороги и нумерация полос движения

Создание дороги с помощью road укажите центры дорог в качестве ввода матрицы. Функция создает направленную линию, пересекающую центры дорог, начиная от координат в первой строке матрицы и заканчивая координатами в последней строке матрицы. Координаты в первых двух строках матрицы определяют направление прорисовки дороги. Эти координаты соответствуют первым двум последовательным дорожным центрам. Направление рисования - это направление, в котором дороги визуализируются на графике сценария.

Чтобы создать дорогу с помощью приложения «Конструктор сценариев вождения», можно либо указать параметр «Центры дорог», либо в интерактивном режиме нарисовать на холсте сценария. Подробный пример см. в разделе Создание сценария управления. В этом случае направление прорисовки - это направление, в котором тонируются дороги в холсте «Сценарий».

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

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

Road with top-to-bottom draw direction

Road with bottom-to-top draw direction

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

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

Road with left-to-right draw direction

Road with right-to-left draw direction

Нумерация полос

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

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

Нумерация полос в дороге с односторонним движениемНумерация полос движения в двухсторонней дороге

Укажите количество полос движения как положительное целое число для дороги с односторонним движением. Если целочисленное значение задано как 3, то дорога имеет три полосы, которые едут в одном направлении. Полосы пронумерованы начиная с левого края дороги.

1, 2, 3 обозначают первую, вторую и третью полосы дороги соответственно.

Lane numbers in one-way road

Укажите количество полос движения в виде двухэлементного вектора положительного целого числа для дороги с двусторонним движением. Если установить вектор как [1 2], то дорога имеет три полосы: две полосы движения в одном направлении и одна полоса движения в противоположном направлении. Из-за направления розыгрыша дорога имеет одну левую полосу и две правые полосы. Полосы пронумерованы начиная с левого края дороги.

1L обозначают единственную левую полосу дороги. 1R и 2R обозначают первую и вторую правую полосы дороги соответственно.

Lane numbers in two-way road

Спецификации полос применяются в порядке нумерации полос.

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

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

Порядок расположения указанных сегментов маркера в составной разметке полосы зависит от направления прорисовки дороги. Каждый сегмент маркера представляет собой направленный сегмент с начальной точкой и перемещается к центру последней дороги. Первый сегмент маркера начинается от первого центра дороги и перемещается к последнему центру дороги на заданную длину. Второй сегмент маркера начинается от конечной точки первого сегмента маркера и перемещается к центру последней дороги на заданную длину. Такой же процесс применяется к каждому сегменту маркера, заданному для составной разметки полосы движения. Нормализованную длину для каждого из этих сегментов маркера можно задать, указав range входной аргумент.

Например, рассмотрим одностороннюю дорогу с двумя полосами. Вторая разметка полосы движения с левого края дороги представляет собой составную разметку полосы движения с типами разметки Solid и Dashed. Нормированный диапазон для каждого типа маркировки составляет 0,5. Первый сегмент маркера представляет собой сплошную маркировку, а второй сегмент маркера представляет собой пунктирную маркировку. На этих диаграммах показан порядок, в котором сегменты маркера применяются к направлениям рисования дороги слева направо и справа налево.

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

Технические характеристики полосы движения

На схеме показаны компоненты и геометрические свойства дорог, полос движения и разметки полос движения.

Geometric properties of roads, lanes, and lane markings

Объект спецификации полосы движения, lanespec, определяет полосы движения.

  • NumLanes свойство определяет количество полос движения. При создании этого объекта необходимо указать количество полос движения.

  • Width свойство определяет ширину каждой полосы.

  • Marking свойство содержит спецификации каждой разметки полосы движения на дороге. Marking представляет собой массив объектов разметки полос с одним объектом на полосу. Для создания этих объектов используйте laneMarking функция. Технические требования к разметке полосы движения включают:

    • Type - Тип разметки полосы движения (сплошная, пунктирная и т.д.)

    • Width - Ширина разметки полосы движения

    • Color - Цвет разметки полосы движения

    • Strength - Значение насыщенности для цвета разметки полосы движения

    • Length - для пунктирных полос - длина каждой пунктирной линии;

    • Space - Для пунктирных полос - расстояние между тире

    • SegmentRange - Для составной разметки полосы движения нормированная длина каждого сегмента маркера

  • Type свойство содержит характеристики типа полосы движения для каждой полосы движения в дороге. Type может быть однородным объектом типа полосы или гетерогенным массивом типов полосы.

    • Однородный объект типа полосы содержит характеристики всех полос на дороге.

    • Гетерогенный массив типов полос содержит массив объектов типа полос с одним объектом на полосу.

    Для создания этих объектов используйте laneType функция. Характеристики типа полосы движения включают в себя:

    • Type - Тип полосы движения (движение, граница и т.д.)

    • Color - Цвет полосы

    • Strength - Прочность цвета полосы движения

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