trajectory

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

Описание

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

Примечание

Функция траектории генерирует траектории, которые имеют разрывы на ускорении между waypoints, приводящим к большому количеству толчка. Чтобы сгенерировать сглаженную, ограниченную толчками траекторию, используйте smoothTrajectory функцию вместо этого.

пример

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

пример

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

пример

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

Примеры

свернуть все

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

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

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

v = vehicle(scenario,'ClassID',1);
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

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

Figure contains an axes and an object of type uipanel. The axes contains 13 objects of type patch, line.

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

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

scenario = drivingScenario;

roadCentersParking = [6 0; 24 0];
lmParking = [laneMarking('Unmarked') ...
            repmat(laneMarking('Solid'),1,5) ...
            laneMarking('Unmarked')];
lspecParking = lanespec(6,'Width',3,'Marking',lmParking);
road(scenario,roadCentersParking,'Lanes',lspecParking);

roadCentersDriving = [12 0; 18 0];
lmDriving = [laneMarking('Unmarked') laneMarking('Unmarked')];
lspecDriving = lanespec(1,'Width',18,'Marking',lmDriving);
road(scenario,roadCentersDriving,'Lanes',lspecDriving);

Добавьте транспортное средство в ведущий сценарий.

car = vehicle(scenario,'ClassID',1,'Position',[15 -6 0],'Yaw',90);

Задайте траекторию транспортного средства. Диски транспортного средства вперед, остановки, и затем управляют наоборот, пока это не отступает в место для парковки. Когда транспортное средство вводит место для парковки, оно имеет угол ориентации рыскания, который является 90 градусами против часовой стрелки от того, где оно запустилось.

waypoints = [15 -6; 15 5; 12 -1.5; 7.3 -1.5];
speed = [4.5; 0; -2; 0];
trajectory(car,waypoints,speed,'Yaw',[90 90 180 180]);

Постройте ведущий сценарий и отобразите waypoints траектории.

plot(scenario,'Waypoints','on')
while advance(scenario)
    pause(0.001)
end

Задайте траекторию пешехода, который поворачивает направо на пересечении.

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

scenario = drivingScenario;
roadCenters = [0 10; 0 -10];
road(scenario,roadCenters);
road(scenario,flip(roadCenters,2));

Добавьте пешеходного агента в сценарий.

pedestrian = actor(scenario, ...
    'ClassID',4, ...
    'Length',0.24, ...
    'Width',0.45, ...
    'Height',1.7, ...
    'Position',[-9 0 0], ...
    'RCSPattern',[-8 -8; -8 -8], ...
    'Mesh', driving.scenario.pedestrianMesh, ...
    'Name','Pedestrian');

Задайте траекторию пешехода. Пешеход приближается к пересечению, делает паузу кратко, и затем поверните направо на пересечении. Чтобы задать резкий правый поворот, задайте два waypoints на пересечении, которые являются близко друг к другу. Для этих waypoints задайте угол ориентации рыскания второго waypoint в углу в 90 градусов сначала waypoint.

waypoints = [-9 0; -0.25 0; 0 -0.25; 0 -9];
speed = [1.5; 0; 0.5; 1.5];
yaw =  [0; 0; -90; -90];
waittime = [0; 0.2; 0; 0];
trajectory(pedestrian,waypoints,speed,waittime,'Yaw', yaw);

Постройте ведущий сценарий и отобразите waypoints пешехода.

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

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

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

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

  • Когда speed вектор, векторные значения задают скорость в каждом waypoint. Для движения вперед задайте положительные значения скорости. Для противоположного движения задайте отрицательные значения скорости. Чтобы изменить направления движения, разделите положительные скорости и отрицательные скорости waypoint с 0 скорость.

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

Пример: [10 8 9] задает скорости 10 м/с, 8 м/с и 9 м/с.

Пример: [10 0 -10] задает скорость 10 м/с в движении вперед, сопровождаемом паузой, сопровождаемой скоростью 10 м/с наоборот.

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

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

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

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

Если вы не задаете yaw, затем рысканием в каждом waypoint является NaN, подразумевать, что рыскание не имеет никаких ограничений.

Пример: [0 90] задает агента под углом с 0 степенями в первом waypoint и углом в 90 градусов во втором waypoint.

Пример: [0 NaN] задает агента под углом с 0 степенями в первом waypoint. Агент не имеет никаких ограничений на свое рыскание во втором waypoint.

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

Алгоритмы

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

Сгенерированная траектория приводит к кусочному профилю постоянного ускорения для каждого сегмента между waypoints. Эти сегменты имеют ускоряющие разрывы между ними. Чтобы избежать разрывов на ускорении, используйте smoothTrajectory функция, чтобы сгенерировать траектории вместо этого.

Введенный в R2018a