траектория

Создайте агента или траекторию автомобиля в ведущем сценарии

Синтаксис

trajectory(ac,waypoints,speed)

Описание

пример

trajectory(ac,waypoints,speed) создает траекторию для агента или автомобиля, ac, от набора waypoints. Агент следует за траекторией на заданной скорости.

Примеры

свернуть все

Создайте ведущий сценарий и добавьте кривую дорогу 2D маршрута к нему.

sc = drivingScenario('SampleTime',0.05);
roadcenters = [5 0; 30 10; 35 25];
lspec = lanespec(2);
road(sc,roadcenters,'Lanes',lspec);

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

v = vehicle(sc);
waypoints = [6 2; 18 4; 25 7; 28 10; 31 15; 33 22];
speeds = [30 10 5 5 10 30];
trajectory(v,waypoints,speeds)

Постройте сценарий и запустите симуляцию. Наблюдайте, как автомобиль замедляется, когда он ведет машину по кривой.

plot(sc,'Waypoints','on','RoadCenters','on')
while advance(sc)
    pause(0.1)
end

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

Создайте ведущий сценарий, состоящий из двух пересекающихся прямых дорог. Первый дорожный сегмент 45 метров длиной. Вторая дорога подряд 32 метра длиной и пересекает первую дорогу. Автомобиль, перемещающийся на уровне 12,0 метров в секунду вдоль первой дороги, приближается к рабочему пешеходному переходу пересечение на уровне 2,0 метров в секунду.

sc = drivingScenario('SampleTime',0.1,'StopTime',1);
road(sc,[-10 0 0; 45 -20 0]);
road(sc,[-10 -10 0; 35 10 0]);
ped = actor(sc,'Length',0.4,'Width',0.6,'Height',1.7);
car = vehicle(sc);
pedspeed = 2.0;
carspeed = 12.0;
trajectory(ped,[15 -3 0; 15 3 0],pedspeed);
trajectory(car,[-10 -10 0; 35 10 0],carspeed);

Создайте эгоцентрический график преследования для автомобиля.

chasePlot(car,'Centerline','on')

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

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

  • Обновите видимый с большого расстояния график отобразить обновленные дорожные контуры и целевые основы. Перспектива графика всегда относительно автомобиля, оборудованного датчиком.

bepPlot = birdsEyePlot('XLim',[-50 50],'YLim',[-40 40]);
outlineplotter = outlinePlotter(bepPlot);
laneplotter = laneBoundaryPlotter(bepPlot);
legend('off')

while advance(sc)
    rb = roadBoundaries(car);
    [position,yaw,length,width,originOffset,color] = targetOutlines(car);    
    plotLaneBoundary(laneplotter,rb)
    plotOutline(outlineplotter,position,yaw,length,width, ...
        'OriginOffset',originOffset,'Color',color)
    pause(0.01)
end

Моделируйте ведущий сценарий с одним автомобилем, перемещающимся на S-кривой. Создайте и постройте контуры маршрута.

Создайте ведущий сценарий с одной дорогой, имеющей S-кривую.

sc = 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(sc,roadcenters,'Lanes',ls);

Добавьте автомобиль, оборудованный датчиком и задайте его траекторию от его скорости и waypoints. Автомобиль перемещается на уровне 30 метров в секунду.

car = vehicle(sc, ...
    '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(sc)

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

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

свернуть все

Агент, принадлежащий объекту drivingScenario, заданному как объект Actor или Vehicle. Чтобы создать эти объекты, используйте actor и функции vehicle, соответственно.

Траектория waypoints, заданный как N с действительным знаком-by-2 или N-by-3 матрица, где N является количеством waypoints.

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

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

Waypoints находятся в системе мировой координаты. Модули исчисляются в метрах.

Пример: [1 0 0; 2 7 7; 3 8 8]

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

Скорость агента в каждом waypoint в waypoints, заданном как положительный действительный скаляр или N - вектор элемента неотрицательных значений. N является количеством waypoints.

  • Когда speed является скаляром, скорость является постоянной в движении агента.

  • Когда speed является вектором, векторные значения задают скорость в каждом waypoint.

Скорости интерполированы между waypoints. speed может быть нулем в любом waypoint, но не может быть нулем в двух последовательных waypoints. Модули исчисляются в метрах в секунду.

Пример: [10,8,9]

Алгоритмы

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

Можно задать скорость как скаляр или вектор. Когда скорость является скаляром, агент следует за траекторией с постоянной скоростью. Когда скоростью является N - вектор элемента, скорость линейно интерполирована между waypoints. Обнуление скорости в двух последовательных waypoints создает стационарного агента.

Введенный в R2018a