trajectoryGeneratorFrenet

Нахождение оптимальной траектории вдоль опорного пути

Описание

The trajectoryGeneratorFrenet объект генерирует альтернативные траектории, используя полиномы четвертого или пятого порядка относительно заданного опорного пути. Каждая траектория определяет движение между состояниями Френе в течение заданного временного интервала.

Состояния Френе описывают их положение, скорость и ускорение относительно статического эталонного пути, заданные как referencePathFrenet объект.

Объект выражает состояния Френе как вектор формы [S dS ddS L dL ddL], где S - длина дуги и L - перпендикулярное отклонение от направления опорного пути. Производные S относятся ко времени. Производные L относятся к длине дуги, S.

Depiction of Frenet states relative to a reference path

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

Создание

Описание

пример

connectorFrenet = trajectoryGeneratorFrenet(refPath) генерирует траектории между начальным и конечные состояния относительно пути ссылки refPath задается как referencePathFrenet объект. The refPath входной параметр устанавливает свойство ReferencePath.

connectorFrenet = trajectoryGeneratorFrenet(refPath,'TimeResolution',timeValue) определяет временной интервал дискретизации. The timeValue аргумент устанавливает свойство TimeResolution.

Свойства

расширить все

Временной интервал дискретизации между дискретизированными состояниями Френе, заданный как положительная скалярная величина в секундах. При использовании connect object function, это свойство определяет разрешение Times поле сгенерированных траекторных структур, frenetTrajectory и globalTrajectory.

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

Ссылочный путь в координатах Френе, задается как referencePathFrenet объект.

Функции объекта

connectСоедините начальное и терминальное состояния Frenet

Примеры

свернуть все

Сгенерируйте альтернативные траектории для пути ссылки с помощью координат Френе. Задайте различные начальное и конечные состояния для ваших траекторий. Настройте свои состояния на основе сгенерированных траекторий.

Сгенерируйте ссылку путь из набора путевых точек. Создайте trajectoryGeneratorFrenet объект из ссылочного пути.

waypoints = [0 0; ...
	50 20; ...
	100 0; ...
	150 10];
refPath = referencePathFrenet(waypoints);
connector = trajectoryGeneratorFrenet(refPath);

Сгенерируйте пятисекундную траекторию между источником пути и точкой на 30 м вниз по пути, как утверждает Френе.

initState = [0 0 0 0 0 0];  % [S ds ddS L dL ddL]
termState = [30 0 0 0 0 0]; % [S ds ddS L dL ddL]
[~,trajGlobal] = connect(connector,initState,termState,5);

Отображение траектории в глобальных координатах.

show(refPath);
hold on
axis equal
plot(trajGlobal.Trajectory(:,1),trajGlobal.Trajectory(:,2),'b')
legend(["Waypoints","Reference Path","Trajectory to 30m"])

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Waypoints, Reference Path, Trajectory to 30m.

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

termStateDeviated = termState + ([-3:3]' * [0 0 0 1 0 0]);
[~,trajGlobal] = connect(connector,initState,termStateDeviated,10);

clf
show(refPath);
hold on
axis equal
for i = 1:length(trajGlobal)
    plot(trajGlobal(i).Trajectory(:,1),trajGlobal(i).Trajectory(:,2),'g')
end
legend(["Waypoints","Reference Path","Alternative Trajectories"])
hold off

Figure contains an axes. The axes contains 9 objects of type line. These objects represent Waypoints, Reference Path, Alternative Trajectories.

Задайте новое конечное состояние, чтобы сгенерировать новую траекторию. Эта траектория нежелательна, потому что для достижения поперечной скорости 10 м/с требуется обратное движение.

newTermState = [5 10 0 5 0 0];
[~,newTrajGlobal] = connect(connector,initState,newTermState,3);

clf
show(refPath);
hold on
axis equal
plot(newTrajGlobal.Trajectory(:,1),newTrajGlobal.Trajectory(:,2),'b');
legend(["Waypoint","Reference Path","New Trajectory"])
hold off

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Waypoint, Reference Path, New Trajectory.

Ослабьте ограничение продольного состояния, задав длину дуги NaN. Сгенерируйте и отобразите траекторию еще раз. Новое положение показывает хорошую альтернативную траекторию, которая отклоняется от пути ссылки.

relaxedTermState = [NaN 10 0 5 0 0];
[~,trajGlobalRelaxed] = connect(connector,initState,relaxedTermState,3);

clf
show(refPath);
hold on
axis equal
plot(trajGlobalRelaxed.Trajectory(:,1),trajGlobalRelaxed.Trajectory(:,2),'g');
hold off

Figure contains an axes. The axes contains 3 objects of type line.

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.
Введенный в R2020b