lanespec

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

Описание

The 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 метра. Для получения дополнительной информации о геометрических свойствах маршрута смотрите Спецификации маршрута.

Свойства

расширить все

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

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

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

  • N R - количество правых полос движения, все они протекают в противоположном направлении.

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

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

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

Ширина полосы, заданная как положительный действительный скаляр или 1- 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 полосами M = N + 1.

Чтобы создать объекты разметки маршрута, используйте laneMarking и укажите тип разметки маршрута.

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

Разметка маршрута отсутствует

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

Штриховая линия

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

Две штриховые линии

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

Штриховая линия слева, сплошная линия справа

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

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

Типы дорог маршрута, заданные как объект однородного типа маршрута или 1-байтовый 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