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'Область значений.

Примеры

свернуть все

Создайте ведущий сценарий и дорожные центры прямой, 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);

Добавьте автомобиль, оборудованный датчиком и задайте его траекторию от его waypoints. По умолчанию автомобиль перемещается со скоростью 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

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

Крит-Роуд с передающими зонами при помощи составного отмечающего маршрута

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

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

Как правило, количество маркировок маршрута равно количеству маршрутов плюс один. Двухсторонняя, дорога 2D маршрута имеет 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) в сценарий. Задайте waypoints и значение скорости, чтобы установить траекторию для 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, свойство только для чтения возвращенного объекта маркировки маршрута.

1D массив маркировки маршрута возражает в виде

  • 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 входной параметр.

InputType Выведите отмечающий маршрутСвойства отмечающего маршрута
'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Это свойство является массивом объектов маркировки маршрута, который задает несколько типов маркировки, включающих составную маркировку маршрута. Частью маркировки маршрута, заданной каждым объектом маркировки маршрута, является marker segment. Это свойство доступно только для чтения.
SegmentRangeЭто свойство указывает нормированный диапазон для каждого сегмента маркера в составной маркировке маршрута. Это свойство доступно только для чтения.

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

Больше о

свернуть все

Чертите направление дороги и нумерацию маршрутов

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

Чтобы создать дорогу при помощи приложения Driving Scenario Designer, можно или задать параметр Road Centers или в интерактивном режиме привлечь Scenario Canvas. Для подробного примера смотрите, Создают Ведущий Сценарий. В этом случае направление ничьей является направлением, в котором дороги представляют в Scenario Canvas.

  • Для дороги с направлением ничьей от начала до конца различие между 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

Задайте количество маршрутов как двухэлементный вектор из положительного целого числа для двухсторонней дороги. Если вы устанавливаете вектор как [12 ], затем дорога имеет три маршрута: два маршрута, перемещающиеся в одном направлении и одной полосе, перемещающейся в противоположном направлении. Из-за направления ничьей дорога имеет то, оставленное маршрут и два правильных маршрута. Маршруты пронумерованы, начав с левого края дороги.

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