road

Адд-Роуд к ведущему сценарию или дорожной группе

Описание

Добавьте дороги к управлению сценарием

пример

road(scenario,roadcenters) добавляет дорога к ведущему сценарию, scenario. Вы задаете дорожную форму и ориентацию дороги в 2D плоскости при помощи набора дорожных центров, roadcenters, в дискретных точках. Когда вы задаете количество маршрутов на дороге, маршруты пронумерованы относительно дорожных центров. Для получения дополнительной информации смотрите, Чертят Направление Дороги и Нумерацию Маршрутов.

road(scenario,roadcenters,roadwidth) добавляет дорога с заданной шириной, roadwidth.

пример

road(scenario,roadcenters,roadwidth,bankingangle) добавляет дорога с заданной шириной и банковским углом, bankingangle.

пример

road(scenario,roadcenters,'Lanes',lspec) добавляет дорога с заданными маршрутами, lspec.

road(scenario,roadcenters,bankingangle,'Lanes',lspec) добавляет дорога с заданным банковским углом и маршрутами.

road(___,'Name',name) задает имя дороги, с помощью любой из комбинаций входных аргументов от предыдущих синтаксисов.

rd = road(___) возвращает Road возразите, что хранит свойства созданной дороги.

Добавьте дороги к дорожной группе

пример

road(rg,roadcenters) добавляет дорожный сегмент к дорожной группе, rg. Используйте дорожную группу, чтобы создать пересечение дорог или пересечение. Вы задаете форму и ориентацию дорожного сегмента в 2D плоскости при помощи набора дорожных центров, roadcenters, в дискретных точках. Когда вы задаете количество маршрутов на дорожном сегменте, маршруты пронумерованы относительно дорожных центров. Для получения дополнительной информации смотрите, Чертят Направление Дороги и Нумерацию Маршрутов.

пример

road(rg,roadcenters,roadwidth) добавляет дорожный сегмент с заданной шириной, roadwidth, дорожной группе.

road(rg,roadcenters,roadwidth,bankingangle) добавляет дорожный сегмент с заданной шириной и банковским углом, bankingangle, дорожной группе.

пример

road(rg,roadcenters,'Lanes',lspec) добавляет дорожный сегмент с заданными маршрутами, lspec, дорожной группе.

пример

road(rg,roadcenters,bankingangle,'Lanes',lspec) добавляет дорожный сегмент с заданным банковским углом и маршрутами дорожной группе.

пример

road(___,'Name',name) задает имя дорожного сегмента, с помощью любой из комбинаций входных аргументов от предыдущих синтаксисов.

Примеры

свернуть все

Создайте ведущий сценарий, содержащий кривую дорогу, две дороги подряд и двух агентов: автомобиль и велосипед. Оба агента проходят дорога в течение 60 секунд.

Создайте ведущий объект сценария.

scenario = drivingScenario('SampleTime',0.1','StopTime',60);

Создайте кривую дорогу с помощью дорожных центральных точек после дуги круга с 800-метровым радиусом. Дуга запускается на уровне 0 °, заканчивается на уровне 90 ° и производится в шаге на 5 °.

angs = [0:5:90]';
R = 800;
roadcenters = R*[cosd(angs) sind(angs) zeros(size(angs))];
roadwidth = 10;
road(scenario,roadcenters,roadwidth);

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

roadcenters = [700 0 0; 100 0 0];
road(scenario,roadcenters)
ans = 
  Road with properties:

           Name: ""
         RoadID: 2
    RoadCenters: [2x3 double]
      RoadWidth: 6
      BankAngle: [2x1 double]

roadcenters = [400 400 0; 0 0 0];
road(scenario,roadcenters)
ans = 
  Road with properties:

           Name: ""
         RoadID: 3
    RoadCenters: [2x3 double]
      RoadWidth: 6
      BankAngle: [2x1 double]

Получите дорожные контуры.

rbdry = roadBoundaries(scenario);

Добавьте автомобиль и велосипед к сценарию. Расположите автомобиль в начале первой дороги подряд.

car = vehicle(scenario,'ClassID',1,'Position',[700 0 0], ...
    'Length',3,'Width',2,'Height',1.6);

Расположите велосипед дальше в будущем.

bicycle = actor(scenario,'ClassID',3,'Position',[706 376 0]', ...
    'Length',2,'Width',0.45,'Height',1.5);

Постройте сценарий.

plot(scenario,'Centerline','on','RoadCenters','on');
title('Scenario');

Figure contains an axes. The axes with title Scenario contains 1219 objects of type patch, line.

Отобразите положения агента и профили.

poses = actorPoses(scenario)
poses=2×1 struct array with fields:
    ActorID
    Position
    Velocity
    Roll
    Pitch
    Yaw
    AngularVelocity

profiles = actorProfiles(scenario)
profiles=2×1 struct array with fields:
    ActorID
    ClassID
    Length
    Width
    Height
    OriginOffset
    MeshVertices
    MeshFaces
    RCSPattern
    RCSAzimuthAngles
    RCSElevationAngles

Создайте ведущий сценарий, содержащий дорогу фигуры 8, заданную в мировых координатах сценария. Преобразуйте мировые координаты сценария к системе координат автомобиля, оборудованного датчиком.

Создайте пустой ведущий сценарий.

scenario = drivingScenario;

Добавьте дорогу фигуры 8 к сценарию. Отобразите сценарий.

roadCenters = [0  0  1
             20 -20  1
             20  20  1
            -20 -20  1
            -20  20  1
              0   0  1];

roadWidth = 3;
bankAngle = [0 15 15 -15 -15 0];
road(scenario,roadCenters,roadWidth,bankAngle);
plot(scenario)

Figure contains an axes. The axes contains 4 objects of type patch, line.

Добавьте автомобиль, оборудованный датчиком в сценарий. Расположите транспортное средство в мировых координатах (20, –20) и ориентируйте его под –15 углами рыскания степени.

ego = actor(scenario,'ClassID',1,'Position',[20 -20 0],'Yaw',-15);

Figure contains an axes. The axes contains 5 objects of type patch, line.

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

rbEgo1 = roadBoundaries(ego);

Отобразите результат на видимом с большого расстояния графике.

bep = birdsEyePlot;
lbp = laneBoundaryPlotter(bep,'DisplayName','Road');
plotLaneBoundary(lbp,rbEgo1)

Figure contains an axes. The axes contains an object of type line. This object represents Road.

Получите дорожные контуры в мировых координатах при помощи roadBoundaries функция. Задайте сценарий как входной параметр.

rbScenario = roadBoundaries(scenario);

Получите дорожные контуры в координатах автомобиля, оборудованного датчиком при помощи driving.scenario.roadBoundariesToEgo функция.

rbEgo2 = driving.scenario.roadBoundariesToEgo(rbScenario,ego);

Отобразите дорожные контуры на видимом с большого расстояния графике.

bep = birdsEyePlot;
lbp = laneBoundaryPlotter(bep,'DisplayName','Road boundaries');
plotLaneBoundary(lbp,{rbEgo2})

Figure contains an axes. The axes contains an object of type line. This object represents Road boundaries.

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

Создайте пустой ведущий сценарий.

scenario = drivingScenario;

Создайте прямой, 25-метровый дорожный сегмент с двумя маршрутами перемещения в одном направлении.

lm = [laneMarking('Solid')
      laneMarking('Dashed','Length',2,'Space',4)
      laneMarking('Solid')];
l = lanespec(2,'Marking',lm);
road(scenario,[0 0 0; 25 0 0],'Lanes',l);

Добавьте в ведущий сценарий пешеходный переход дорога на уровне 1 метра в секунду и автомобиль после дороги на уровне 10 метров в секунду.

ped = actor(scenario,'ClassID',4,'Length',0.2,'Width',0.4,'Height',1.7);
car = vehicle(scenario,'ClassID',1);
smoothTrajectory(ped,[15 -3 0; 15 3 0],1);
smoothTrajectory(car,[car.RearOverhang 0 0; 25-car.Length+car.RearOverhang 0 0],10);

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

plot(scenario)

chasePlot(car)

Запустите симуляцию.

  1. Создайте видимый с большого расстояния график.

  2. Создайте плоттер схемы, плоттер контура маршрута и плоттер маркировки маршрута для видимого с большого расстояния графика.

  3. Получите дорожные контуры и предназначайтесь для основ.

  4. Получите вершины маркировки маршрута и поверхности.

  5. Отобразите контуры маршрута и маркеры маршрута.

  6. Запустите цикл симуляции.

bep = birdsEyePlot('XLim',[-25 25],'YLim',[-10 10]);
olPlotter = outlinePlotter(bep);
lbPlotter = laneBoundaryPlotter(bep);
lmPlotter = laneMarkingPlotter(bep,'DisplayName','Lanes');
legend('off');
while advance(scenario)
    rb = roadBoundaries(car);
    [position,yaw,length,width,originOffset,color] = targetOutlines(car);
    [lmv,lmf] = laneMarkingVertices(car);
    plotLaneBoundary(lbPlotter,rb);
    plotLaneMarking(lmPlotter,lmv,lmf);
    plotOutline(olPlotter,position,yaw,length,width, ...
        'OriginOffset',originOffset,'Color',color);
end

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

Добавьте три дороги к управлению сценарием

Создайте пустой ведущий сценарий.

scenario = drivingScenario;

Задайте количество маршрутов и ширину каждого маршрута на дорогах.

ls = lanespec(2,'Width',5);

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

% Add the first road
roadCenters = [-20 0; 6 0];
road(scenario,roadCenters,'Name','Road 1','Lanes',ls);

% Add the second road
roadCenters = [23 7; 50 33];
road(scenario,roadCenters,'Name','Road 2','Lanes',ls);

% Add the third road
roadCenters = [23 -7; 50 -33];
road(scenario,roadCenters,'Name','Road 3','Lanes',ls);

Постройте сценарий.

figure
plot(scenario)

Figure contains an axes. The axes contains 5 objects of type patch, line.

Создайте Y-соединение, чтобы соединить дороги

Создайте RoadGroup объект. Задайте ширину для каждого дорожного сегмента, который формирует Y-соединение.

rg = driving.scenario.RoadGroup('Name','Y-Junction');
roadWidth = 10;

Задайте дорожные центры трех дорожных сегментов и добавьте эти дорожные сегменты в RoadGroup объект при помощи road функция. Эти дорожные сегменты пересекаются друг с другом.

% Add the first road segment
roadCenters = [23 7; 14 1; 6 0];
road(rg,roadCenters,roadWidth,'Name','Segment 1');

% Add the second road segment
roadCenters = [23 -7; 14 -1; 6 0];
road(rg,roadCenters,roadWidth,'Name','Segment 2');

% Add the third road segment
roadCenters = [23 7; 21 4; 21 -4; 23 -7];
road(rg,roadCenters,roadWidth,'Name','Segment 3');

Добавьте Y-соединение в управление сценарием

Добавьте дорожные сегменты, сохраненные в RoadGroup возразите против ведущего сценария при помощи roadGroup функция. Дорожные сегменты формируют Y-соединение, которое соединяет эти три дороги в ведущем сценарии.

roadGroup(scenario,rg);

Figure contains an axes. The axes contains 3 objects of type patch, line.

Входные параметры

свернуть все

Ведущий сценарий в виде drivingScenario объект.

Дорожная группа, которая задает пересечение дорог или пересечение в виде RoadGroup объект.

Дорожные центры раньше задавали дорогу в виде N с действительным знаком-by-2 или N-by-3 матрица. Дорожные центры определяют центральную линию дороги в дискретных точках.

  • Если roadcenters N-by-2 матрица, затем каждая строка матрицы представляет (x, y) координаты дорожного центра. z - координата каждого дорожного центра является нулем.

  • Если roadcenters N-by-3 матрица, затем каждая строка матрицы представляет (x, y, z) координаты дорожного центра.

Если первая строка матрицы совпадает с последней строкой, дорога является циклом. Модули исчисляются в метрах.

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

Ширина дороги в виде положительного действительного скаляра. Ширина является постоянной вдоль целой дороги. Модули исчисляются в метрах.

Задавать bankingangle введите, но не roadwidth, задайте roadwidth как пустой аргумент, [].

Если вы задаете roadwidth, затем вы не можете задать lspec входной параметр.

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

Банковский угол дороги в виде N с действительным знаком-by-1 вектор. N является количеством дорожных центров. banking angle является углом вращения дороги вдоль направления дороги. Модули в градусах.

Спецификация маршрута в виде lanespec или compositeLaneSpec объект. Используйте lanespec объект создать дорогу с однополосной спецификацией. Можно задать количество маршрутов, ширину каждого маршрута и тип маркировок маршрута с помощью lanespec объект. Задавать маркировки маршрута в lanespec, используйте laneMarking функция.

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

Если вы задаете lspec, затем вы не можете задать roadwidth входной параметр.

Пример: 'Lanes',lanespec(3) задает трехполосную дорогу с ширинами маршрута по умолчанию и маркировками маршрута.

Имя дороги в виде вектора символов или строкового скаляра.

Пример: 'Name','Road1'

Пример: "Name","Road1"

Типы данных: char | string

Выходные аргументы

свернуть все

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

СвойствоЗначение
Name

Имя дороги в виде строкового скаляра

name входной параметр устанавливает это свойство. Даже если вы задаете name как вектор символов, Name значение свойства является строковым скаляром.

RoadID

Идентификатор дороги в виде положительного целого числа

scenario входной параметр генерирует уникальный идентификатор для каждой дороги в ведущем сценарии.

RoadCenters

Дорожные центры раньше задавали дорогу в виде N с действительным знаком-by-2 или N-by-3 матрица, где N является количеством дорожных центров

roadcenters входной параметр устанавливает это свойство.

RoadWidth

Ширина дороги в виде положительного действительного скаляра

roadwidth входной параметр устанавливает это свойство.

BankAngle

Банковский угол дороги в виде N-by-1 вектор с действительным знаком, где N является количеством дорожных центров на дороге

bankingangle входной параметр устанавливает это свойство.

Больше о

свернуть все

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

Создать дорогу при помощи 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

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

Алгоритмы

road функция создает дорогу для агента, чтобы следовать в ведущем сценарии. Вы задаете дорогу с помощью N двумерный или 3D waypoints. Каждый из сегментов N - 1 между waypoints задает кривую, искривление которой варьируется линейно с расстоянием вдоль сегмента. Функция соответствует кусочной кривой clothoid к (x, y) координаты waypoints путем соответствия с искривлением с обеих сторон waypoint. Для незакрытой кривой искривление в первом и последнем waypoint является нулем. Если первые и последние waypoints совпадают, то искривления до и после конечных точек являются соответствующими. z - координаты дороги интерполированы с помощью сохраняющей форму кусочной кубической кривой.

Введенный в R2017a