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

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

Подробнее о

свернуть все

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

Чтобы создать дорогу при помощи road function, задайте дорожные центры как матричный вход. Функция создает ориентированную линию, которая пересекает центры дорог, начиная с координат в первой строке матрицы и заканчивая координатами в последней строке матрицы. Координаты в первых двух строках матрицы определяют 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

Задайте количество полос в качестве двухэлементного вектора положительного целого числа для двухсторонней дороги. Если вы устанавливаете вектор равным [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, определяет дорожные полосы.

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

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

  • The Marking свойство содержит спецификации каждой разметки маршрута в дороге. Marking - массив объектов разметки маршрута с одним объектом на полосу. Чтобы создать эти объекты, используйте laneMarking функция. Спецификации разметки маршрута включают:

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

    • Width - Ширина разметки маршрута

    • Color - Цвет разметки маршрута

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

    • Length - для штриховых полос, длина каждой штриховой линии

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

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

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

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

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

    Чтобы создать эти объекты, используйте laneType функция. Спецификации типа маршрута включают:

    • Type - Тип маршрута (вождение, граница и так далее)

    • Color - Цвет маршрута

    • Strength - Прочность цвета маршрута

Введенный в R2018a