дорога

Адд-Роуд к ведущему сценарию

Синтаксис

road(sc,roadcenters)
road(sc,roadcenters,roadwidth)
road(sc,roadcenters,roadwidth,bankingangle)
road(sc,roadcenters,'Lanes',lspec)
road(sc,roadcenters,bankingangle,'Lanes',lspec)

Описание

пример

road(sc,roadcenters) добавляет дорога к ведущему сценарию, sc. Вы задаете дорожную форму с помощью набора дорожных центров, roadcenters, в дискретных точках.

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

пример

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

пример

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

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

Примеры

свернуть все

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

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

sc = 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(sc,roadcenters,roadwidth);

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

roadcenters = [700 0 0; 100 0 0];
road(sc,roadcenters)
roadcenters = [400 400 0; 0 0 0];
road(sc,roadcenters)

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

rbdry = roadBoundaries(sc);

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

car = vehicle(sc,'Position',[700 0 0],'Length',3,'Width',2,'Height',1.6);

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

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

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

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

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

poses = actorPoses(sc)
poses = 2x1 struct array with fields:
    ActorID
    Position
    Velocity
    Roll
    Pitch
    Yaw
    AngularVelocity

profiles = actorProfiles(sc)
profiles = 2x1 struct array with fields:
    ActorID
    ClassID
    Length
    Width
    Height
    OriginOffset
    RCSPattern
    RCSAzimuthAngles
    RCSElevationAngles

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

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

sc = 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(sc,roadCenters,roadWidth,bankAngle);
plot(sc)

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

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

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

rbEgo1 = roadBoundaries(ego);

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

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

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

rbScenario = roadBoundaries(sc);

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

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

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

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

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

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

sc = drivingScenario;

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

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

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

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

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

plot(sc)

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(sc)
    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

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

свернуть все

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

Дорожные центры раньше задавали дорогу, заданную как 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. Используйте lanespec, чтобы задать количество маршрутов, ширину каждого маршрута и тип маркировок маршрута. Чтобы задать маркировки маршрута в lanespec, используйте функцию laneMarking.

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

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

Алгоритмы

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

Введенный в R2017a