exponenta event banner

lanespec

Создание спецификаций полос движения

Описание

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

Создание

Описание

lnspec = lanespec(numlanes) создает спецификации полосы движения для дороги, имеющей numlanes полосы движения. numLanes устанавливает NumLanes имущества lanespec объект. Порядок нумерации полос на дороге зависит от ориентации дороги. Дополнительные сведения см. в разделе Направление дороги и нумерация полос движения.

пример

lnspec = lanespec(numlanes,Name,Value) задает свойства, используя одну или несколько пар имя-значение. Например, lanespec(3,'Width',[2.25 3.5 2.25]) определяет трехполосную дорогу с шириной слева направо 2,25 метра, 3,5 метра и 2,25 метра. Дополнительные сведения о геометрических свойствах полосы движения см. в разделе Спецификации полосы движения.

Свойства

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

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

Число полос движения в дороге, указанное как положительное целое число или двухэлементный вектор положительных целых чисел, [NL, NR]. Когда NumLanes - положительное целое число, все полосы протекают в одном направлении. Когда NumLanes является вектором:

  • NL - количество левых полос, протекающих в одном направлении.

  • NR - количество правых полос, протекающих в противоположном направлении.

Общее количество полос движения в дороге - сумма этих векторных значений: N = NL + NR.

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

Пример: [2 2] задает две левые полосы движения и две правые полосы движения.

Ширина полосы, заданная как положительный действительный скаляр или 1-by-N вектор положительных вещественных скаляров, где N - количество полос в дороге. N должно быть равно numlanes и соответствующее значение, установленное в NumLanes собственность.

Когда Width - скаляр, одинаковое значение применяется ко всем полосам. Когда Width является вектором, элементы вектора применяются к полосам слева направо. Единицы в метрах.

Пример: [3.5 3.7 3.7 3.5]

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

Разметка полосы движения дороги, указанная как одно из следующих значений:

  • LaneMarking объект. Это значение по умолчанию.

  • SolidMarking объект

  • DashedMarking объект

  • CompoundMarking объект

  • 1-by-M массив объектов разметки полос движения.

M - количество разметок полос движения. Для дороги с N полосами М = N + 1.

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

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

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

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

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

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

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

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

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

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

Пример: [laneMarking('Solid') laneMarking('DoubleDashed') laneMarking('Solid')] задание разметки полосы движения для двухполосной дороги. Крайняя левая и крайняя правая разметка полосы представляет собой сплошные линии, а разметка разделительной полосы представляет собой двойную пунктирную линию.

Типы полос дорог, определяемые как однородный объект типа полосы движения или 1-by-M массив объектов типа полосы движения. M - количество типов полос движения.

Для создания объектов типа полосы используйте laneType и укажите тип полосы движения.

'Driving''Border''Restricted''Shoulder''Parking'

Пример: [laneType('Shoulder') laneType('Driving')] определяет типы полос движения для двухполосной дороги. Крайней левой полосой является обочина, а самой правой полосой - ведущая полоса.

Примеры

свернуть все

Создайте сценарий вождения и центры дорог для прямой 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

Ограничения

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

  • Количество полос для дороги фиксированное. Во время моделирования невозможно изменить параметры полосы движения для дороги.

Подробнее

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

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