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

Свойства

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

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

Количество маршрутов на дороге в виде положительного целочисленного или двухэлементного вектора положительных целых чисел, [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 M массивом объектов маркировки маршрута.

M является количеством маркировок маршрута. Для дороги с маршрутами N, M = N + 1.

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

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

Никакая маркировка маршрута

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

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

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

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

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

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

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

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

Типы маршрута дороги в виде гомогенного текстового объекта маршрута или 1 M массивом текстовых объектов маршрута. M является количеством типов маршрута.

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

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

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

Примеры

свернуть все

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

Симулируйте ведущий сценарий с одним автомобилем, перемещающимся на 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];
speed = 30;
trajectory(car,waypoints,speed);

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

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