Найдите оптимальную траекторию для ссылочного пути
trajectoryOptimalFrenet объект генерирует оптимальную, выполнимую, и траекторию без коллизий для ссылочного пути.
plan функция вычисляет оптимальную траекторию между start и конечные состояния. Функциональные выборки несколько траекторий для каждой пары состояний и выбирают выполнимую траекторию с наименьшим количеством стоимостью.
создает planner = trajectoryOptimalFrenet(refPath,validator)trajectoryOptimalFrenet объект со ссылочным путем, refPath, в форме n-by-2 массив [x y]
waypoints и блок проверки допустимости состояния, validatorВ виде validatorOccupancyMap объект.
refPath — Ссылочный путьСсылочный путь в виде n-by-2 матрица [x y]
пары, где n является количеством waypoints.
Пример: [100,100; 400,400]
Типы данных: double
validator — Объект блока проверки допустимости состоянияvalidatorOccupancyMap объектОбъект блока проверки допустимости состояния в виде validatorOccupancyMap объект.
Для 'Weights' и 'FeasibilityParameters' свойства, вы не можете задать целые структуры целиком. Вместо этого установите их поля индивидуально как пары "имя-значение". Например, trajectoryOptimalFrenet(refPath,validator,'Deviation',0) устанавливает 'Deviation' поле структуры 'Weights'.
Weights — Веса для всех затрат траекторииВеса для всей траектории стоят в виде структуры, содержащей скаляры для множителей стоимости соответствующих атрибутов траектории. Общая стоимость траектории является суммой всех атрибутов, умноженных на их веса. Структура имеет эти поля.
Time — Вес в течение времени стоится (значение по умолчанию) | положительная скалярная величинаФункция стоимости умножает вес к общему времени, потраченному, чтобы достигнуть конечного состояния. Задайте это значение как разделенную запятой пару 'Time' и положительная скалярная величина в секундах.
Типы данных: double
ArcLength — Вес для длины дуги стоится (значение по умолчанию) | положительная скалярная величинаФункция стоимости умножает вес на общую длину сгенерированных траекторий. Задайте это значение как разделенную запятой пару 'ArcLength' и положительная скалярная величина в метрах.
Типы данных: double
LateralSmoothness — Вес для бокового толчка стоится (значение по умолчанию) | положительная скалярная величинаФункция стоимости умножается, вес интегралом бокового толчка придал квадратную форму. Это значение определяет агрессивность траектории в боковом направлении (перпендикуляр к ссылочному пути). Задайте это значение как разделенную запятой пару 'LateralSmoothness' и положительная скалярная величина. Чтобы оштрафовать бокового придурка в запланированной траектории увеличивают эту величину затрат.
Типы данных: double
LongitudinalSmoothness — Вес для продольного толчка стоится (значение по умолчанию) | положительная скалярная величинаФункция стоимости умножается, вес интегралом продольного толчка придал квадратную форму. Это значение определяет агрессивность траекторий в продольном направлении (направление ссылочного пути). Задайте это значение как разделенную запятой пару 'LongitudinalSmoothness' и положительная скалярная величина. Чтобы оштрафовать большое изменение на прямом и обратном ускорении увеличивают эту величину затрат.
Типы данных: double
Deviation — Вес для отклонения от ссылочного пути (значение по умолчанию) | положительная скалярная величинаФункция стоимости умножает вес на перпендикулярное расстояние от ссылочного пути в конце траектории в метрах. Задайте это значение как разделенную запятой пару 'Deviation' и положительная скалярная величина в метрах.
Типы данных: double
Типы данных: struct
FeasibilityParameters — Структура, содержащая параметры выполнимостиПараметры выполнимости в виде структуры, содержащей скалярные значения, чтобы проверять валидность траектории. Структура имеет эти поля.
MaxCurvature — Максимальное искривление, которое может выполнить транспортное средство (значение по умолчанию) | положительный действительный скалярМаксимальное искривление, которое может выполнить транспортное средство. Задайте это значение как разделенную запятой пару 'MaxCurvature' и положительный действительный скаляр в m-1. Это значение определяет кинематическую выполнимость траектории.
Типы данных: double
MaxAcceleration — Максимальное ускорение в направлении движения транспортного средства (значение по умолчанию) | положительный действительный скалярМаксимальное ускорение в направлении движения транспортного средства. Задайте это значение как разделенную запятой пару 'MaxAcceleration' и положительный действительный скаляр в m/s2. Чтобы понизить предел на ускорение транспортного средства в прямом или обратном направлении уменьшают это значение.
Типы данных: double
Типы данных: struct
TimeResolution — Интервал дискретизации траектории (значение по умолчанию) | положительный действительный скалярВременной интервал между дискретизированными состояниями траектории. Задайте это значение как разделенную запятой пару 'TimeResolution' и положительный действительный скаляр в секундах. Эти дискретизированные состояния определяют валидность состояния и функцию стоимости.
Типы данных: double
CostFunction — Пользовательская функция стоимостиПользовательская функция стоимости в виде указателя на функцию. Функция должна принять матрицу n-by-7 состояния, TRAJSTATES, для каждой траектории и возвращают величину затрат как скаляр. plan функция возвращает путь с самой низкой ценой.
Например, leftLaneChangeCost = @(states)((states(end,2) < refPath(end,2))*10) создает указатель функции стоимости, чтобы приоритизировать оставленный изменения маршрута.
Типы данных: function handle
TrajectoryList — Список всех возможных траекторийЭто свойство доступно только для чтения.
'TrajectoryList' свойство, возвращенное как массив структур всех траекторий кандидата и их соответствующих параметров. Каждая структура имеет эти поля:
Trajectory — n-by-7 матрица [x, y, theta, kappa, speed, acceleration, time], где n является количеством траектории waypoints.
Cost — Стоимость траектории.
MaxAcceleration — Максимальное ускорение траектории.
MaxCurvature — Максимальное искривление траектории.
Feasible — Четырехэлементный векторный [velocity, acceleration, curvature, collision] указание на валидность траектории.
Значение элементов может быть также,
1 — Траектория допустима.
0 — Траектория недопустима.
-1 — Траектория не проверяется.
Типы данных: struct
TerminalStates — Структура всех целевых состоянийСтруктура, которая содержит список целевых состояний относительно ссылочного пути. Эти параметры задают поведение выборки для генерации альтернативных сегментов траектории между запуском и каждым целевым состоянием. Структура имеет эти поля.
Longitudinal — Длины сегмента траектории (значение по умолчанию) | векторДлины сегмента траектории в виде вектора в метрах.
Типы данных: double
Lateral — Массив отклонений от ссылочного пути в перпендикулярном направлении в целевом состоянии (значение по умолчанию) | векторМассив отклонений от ссылочного пути в перпендикулярном направлении в целевом состоянии в виде вектора в метрах.
Типы данных: double
Speed — Скорость в целевом состоянии в направлении движения (значение по умолчанию) | положительная скалярная величинаСкорость в целевом состоянии в направлении движения в виде положительной скалярной величины в m/s.
Типы данных: double
Acceleration — Ускорение в целевом состоянии в направлении движения (значение по умолчанию) | положительная скалярная величинаУскорение в целевом состоянии в направлении движения в виде положительной скалярной величины в m/s2.
Типы данных: double
Time — Массив времени окончания для выполнения сегмента траектории (значение по умолчанию) | положительный векторМассив времени окончания для выполнения сегмента траектории в виде положительного вектора в секундах.
Типы данных: double
Типы данных: struct
Waypoints — Waypoints ссылочного путиWaypoints ссылочного пути в виде n-by-2 матрица [x y]
пары, где n является количеством waypoints. Waypoints действуют как ссылка для планирования альтернативных траекторий, оптимизированных этим планировщиком.
Типы данных: double
NumSegments — Количество продольных сегментов для каждой траектории (значение по умолчанию) | положительная скалярная величинаКоличество продольных сегментов для каждой траектории. Задайте это значение как разделенную запятой пару 'NumSegments' и положительная скалярная величина. Это свойство генерирует промежуточные продольные конечные состояния, к которым все боковые конечные состояния объединены с для генерации большего количества примитивов движения к каждому конечному состоянию.
Например, 'NumSegments',2 создает два раздела между каждым продольным конечным состоянием. Траектории сгенерированы, чтобы достигнуть промежуточных продольных состояний со всеми доступными боковыми конечными состояниями.
Типы данных: double
DeviationOffset — Отклонение возмещено от ссылочного пути в боковом направлении (значение по умолчанию) | скалярОтклонение возмещено от ссылочного пути в боковом направлении. Задайте это значение как разделенную запятой пару 'DeviationOffset' и скаляр. Отрицательная величина возместила отклонение направо, и положительное значение возместило отклонение слева от ссылочного пути в боковом направлении. Установите это свойство сместить ваше решение определенного направления поворота при предотвращении препятствий в ссылочном пути.
Типы данных: double
cart2frenet | Преобразуйте Декартовы состояния в состояния Frenet |
frenet2cart | Преобразуйте состояния Frenet в Декартовы состояния |
plan | Запланируйте оптимальную траекторию |
show | Визуализация траекторий |
В этом примере показано, как запланировать оптимальную траекторию с помощью trajectoryOptimalFrenet объект.
Создайте и присвойте карту блоку проверки допустимости состояния
Создайте объект блока проверки допустимости состояния для проверки столкновения.
stateValidator = validatorOccupancyMap;
Создайте карту сетки препятствия.
grid = zeros(50,100); grid(24:26,48:53) = 1;
Создайте binaryOccupancyMap с картой сетки.
map = binaryOccupancyMap(grid);
Присвойте карту блоку проверки допустимости состояния.
stateValidator.Map = map;
Запланируйте и визуализируйте траекторию
Создайте ссылочный путь для планировщика, чтобы следовать.
refPath = [0,25;100,25];
Объявите, что указатель функции стоимости приоритизирует оставленный изменения маршрута.
leftLaneChangeCost = @(states)((states(end,2) < refPath(end,2))*10);
Инициализируйте объект планировщика ссылочным путем, блоком проверки допустимости состояния и пользовательской функцией стоимости.
planner = trajectoryOptimalFrenet(refPath,stateValidator,'CostFunction',leftLaneChangeCost);Присвойте продольное конечное состояние, боковое отклонение и максимальные ускоряющие значения.
planner.TerminalStates.Longitudinal = 100; planner.TerminalStates.Lateral = -10:10:10; planner.FeasibilityParameters.MaxAcceleration = 10;
Планирование траектории
Начальное состояние Frenet транспортного средства.
initFrenetState = zeros(1,6);
Запланируйте траекторию от начального состояния Frenet.
plan(planner,initFrenetState);
Визуализация траектории
Визуализируйте карту и траектории.
show(map) hold on show(planner,'Trajectory','all')

В этом примере показано, как разделить продольные конечные состояния в оптимальном планировании траектории с помощью trajectoryOptimalFrenet объект.
Создайте и присвойте карту блоку проверки допустимости состояния
Создайте объект блока проверки допустимости состояния для проверки столкновения.
statevalidator = validatorOccupancyMap;
Создайте карту сетки препятствия.
grid = zeros(50,100); grid(22:24,28:33) = 1; grid(18:20,37:42) = 1; grid(29:31,72:77) = 1;
Создайте binaryOccupancyMap с картой сетки.
map = binaryOccupancyMap(grid);
Присвойте карту блоку проверки допустимости состояния.
statevalidator.Map = map;
Запланируйте и визуализируйте траекторию
Создайте ссылочный путь для планировщика, чтобы следовать.
refPath = [0,25;30,30;75,20;100,25];
Инициализируйте объект планировщика ссылочным путем и блок проверки допустимости состояния.
planner = trajectoryOptimalFrenet(refPath,statevalidator);
Присвойте продольное конечное состояние и максимальные ускоряющие значения.
planner.TerminalStates.Longitudinal = 100; planner.FeasibilityParameters.MaxAcceleration = 10;
Планирование траектории
Начальное состояние Frenet транспортного средства.
initFrenetState = zeros(1,6);
Присвойте номер разделов для продольного конечного состояния.
planner.NumSegments = 3;
Запланируйте траекторию от начального состояния Frenet.
plan(planner,initFrenetState);
Визуализация траектории
Визуализируйте карту и траектории.
show(map) hold on show(planner,'Trajectory','all')

Самопересечения в ссылочном пути могут привести к неожиданному поведению.
Планировщик не поддерживает противоположное управление.
Начальная ориентация для планирования должна быть в -pi/2 и pi/2 к ссылочному пути.
Ограничьте количество TerminalStates для приложений реального времени, поскольку вычислительная сложность растет с ним.
[1] Werling, Мориц, Юлиус Циглер, Серен Каммель и Себастиан Трун. "Оптимальная Генерация Траектории для Сценариев Динэмик-Стрит в Системе координат Frenet". 2 010 Международных конференций IEEE по вопросам Робототехники и Автоматизации. 2010, стр 987–993.
nav.StateValidator | plannerHybridAStar | validatorOccupancyMap
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.