trajectory

Создайте траекторию актёра или транспортного средства в сценарии вождения

Описание

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

Примечание

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

пример

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

пример

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

пример

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

Примеры

свернуть все

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

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

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

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);

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

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);

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

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);

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

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]);

Постройте график сценария вождения и отобразите путевые точки траектории.

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');

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

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);

Постройте график сценария вождения и отобразите путевые точки пешехода.

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

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

свернуть все

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

Точки пути траектории, заданные как матрица N вещественным значением -by-2 или N -by-3, где N - количество точек пути.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример: [0 90] задает актёра под углом 0 градусов в первой путевой точке и под углом 90 градусов во второй путевой точке.

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

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

Алгоритмы

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

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

Введенный в R2018a