trajectory

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

Описание

пример

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

пример

trajectory(___,speed) также задает скорость, с которой агент или транспортное средство перемещаются вдоль траектории.

пример

trajectory(___,speed,waittime) задает время ожидания для агента или транспортного средства в дополнение к входным параметрам в предыдущем синтаксисе. Используйте этот синтаксис, чтобы сгенерировать ведущие сценарии останавливать-и-идти путем приостановки агента или агентов транспортного средства в определенном waypoints.

Примеры

свернуть все

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

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

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

v = vehicle(scenario);
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(scenario,'Waypoints','on','RoadCenters','on')
while advance(scenario)
    pause(0.1)
end

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

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

scenario = drivingScenario('SampleTime',0.1,'StopTime',1);
road(scenario,[-10 0 0; 45 -20 0]);
road(scenario,[-10 -10 0; 35 10 0]);
ped = actor(scenario,'Length',0.4,'Width',0.6,'Height',1.7);
car = vehicle(scenario);
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(scenario)
    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-кривую.

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

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

scenario = drivingScenario('StopTime',2.75);
roadCenters = [50 1 0; 2 0.9 0];
laneSpecification = lanespec(2,'Width',4);
road(scenario,roadCenters,'Lanes',laneSpecification);
roadCenters = [27 24 0; 27 -21 0];
road(scenario,roadCenters,'Lanes',laneSpecification);

Добавьте автомобиль, оборудованный датчиком в сценарий. Задайте waypoints и значения скорости для транспортного средства в каждом waypoint. Установите время ожидания для транспортного средства во втором waypoint. Сгенерируйте траекторию, в которой автомобиль, оборудованный датчиком перемещается через заданный waypoints на заданной скорости.

egoVehicle = vehicle(scenario,'ClassID',1,'Position',[5 -1 0]);
waypoints = [5 -1 0; 16 -1 0; 40 -1 0];
speed = [30; 0; 30];
waittime = [0; 0.3; 0];
trajectory(egoVehicle,waypoints,speed,waittime);

Добавьте автомобиль в сценарий. Задайте waypoints и значения скорости для автомобиля в каждом waypoint. Установите время ожидания для автомобиля во втором waypoint. Сгенерируйте траекторию, в которой автомобиль перемещается через заданный waypoints на заданной скорости.

car = vehicle(scenario,'ClassID',1,'Position',[48 4 0],'PlotColor',[0.494 0.184 0.556], 'Name','Car');
waypoints = [47 3 0; 38 3 0; 10 3 0];
speed = [30; 0; 30];
waittime = [0; 0.3; 0];
trajectory(car,waypoints,speed,waittime);

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

ambulance = vehicle(scenario,'ClassID',6,'Position',[25 22 0],'PlotColor',[0.466 0.674 0.188],'Name','Ambulance');
waypoints = [25 22 0; 25 13 0; 25 6 0; 26 2 0; 33 -1 0; 45 -1 0];
speed = 25;
trajectory(ambulance,waypoints,speed);

Создайте пользовательское окно рисунка, чтобы построить сценарий.

fig = figure;
set(fig,'Position',[0,0,800,600]);
movegui(fig,'center');
hViewPnl = uipanel(fig,'Position',[0 0 1 1],'Title','Stop-and-Go Scenario');
hPlt = axes(hViewPnl);

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

plot(scenario,'Waypoints','on','RoadCenters','on','Parent',hPlt)
while advance(scenario)
    pause(0.1)
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]

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

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Алгоритмы

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

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

Введенный в R2018a