exponenta event banner

plannerRRTStar

Создание оптимального планировщика путей RRT (RRT *)

Описание

plannerRRTStar объект создает асимптотически оптимальный планировщик RRT, RRT *. Алгоритм RRT * сходится к оптимальному решению с точки зрения расстояния пространства состояний. Также его время выполнения является постоянным коэффициентом времени выполнения алгоритма RRT. RRT * используется для решения задач геометрического планирования. Задача геометрического планирования требует, чтобы любые два случайных состояния, взятые из пространства состояний, могли быть соединены.

Создание

Описание

пример

planner = plannerRRTStar(stateSpace,stateVal) создает планировщик RRT * из государственного космического объекта ,stateSpaceи объект проверки состояния, stateVal. Пространство состояний stateVal должно быть таким же, как stateSpace. stateSpace и stateVal также устанавливает StateSpace и StateValidator свойства planner объект.

Свойства

развернуть все

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

r = min ({γ ln (n) nVd} 1/d, start)

где:

  • d - Размер пространства состояний

  • n - количество узлов в дереве поиска;

  • start- Значение MaxConnectionDistance собственность

  • Vd - Объем шарика агрегата в d-ом измерении

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

Определите, продолжает ли плановик оптимизацию после достижения цели, указанной как false или true. Плановик также завершается независимо от значения этого свойства, если достигнуто максимальное количество итераций или максимальное количество узлов дерева.

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

Пространство состояния для планировщика, указанное как объект пространства состояния. Можно использовать объекты пространства состояний, такие как stateSpaceSE2, stateSpaceDubins, и stateSpaceReedsShepp. Можно также настроить состояние объекта пространства с помощью nav.StateSpace объект.

Средство проверки состояния для планировщика, указанное как объект средства проверки состояния. Можно использовать объекты проверки состояния, такие как validatorOccupancyMap и validatorVehicleCostmap.

Максимальное количество узлов в дереве поиска (исключая корневой узел), указанное как положительное целое число.

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

Максимальное число итераций, указанное как положительное целое число.

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

Максимальная длина движения, разрешенная в дереве, заданная как скаляр.

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

Функция обратного вызова для определения того, достигнута ли цель, указанная как дескриптор функции. Можно создать собственную функцию достижения цели. Функция должна следовать следующему синтаксису:

 function isReached = myGoalReachedFcn(planner,currentState,goalState)

где:

  • planner - созданный объект планировщика, указанный как plannerRRTStar объект.

  • currentState - текущее состояние, указанное как вещественный вектор из трех элементов.

  • goalState - состояние цели, указанное как вещественный вектор из трех элементов.

  • isReached - логическая переменная, указывающая, достигло ли текущее состояние целевого состояния, возвращаемого как true или false.

Типы данных: function handle

Вероятность выбора целевого состояния при выборке состояния, заданная как действительный скаляр в [0,1]. Свойство определяет вероятность выбора фактического состояния цели в процессе случайного выбора состояний из пространства состояний. Можно начать с установки небольшого значения вероятности, например: 0.05.

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

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

planПланирование пути между двумя состояниями
copyСоздание копии объекта планировщика

Примеры

свернуть все

Создание пространства состояний.

ss = stateSpaceSE2;

Создать occupancyMap- средство проверки состояния на основе созданного пространства состояний.

sv = validatorOccupancyMap(ss);

Создайте карту занятия из примера карты и установите разрешение карты 10 ячеек/метр.

load exampleMaps.mat
map = occupancyMap(simpleMap, 10);
sv.Map = map;

Задайте расстояние проверки для средства проверки.

sv.ValidationDistance = 0.01;

Обновите границы пространства состояний так, чтобы они совпадали с границами карты.

ss.StateBounds = [map.XWorldLimits; map.YWorldLimits; [-pi pi]];

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

planner = plannerRRTStar(ss,sv);
planner.ContinueAfterGoalReached = true;

Уменьшите максимальные итерации и увеличьте максимальное расстояние соединения.

planner.MaxIterations = 2500;
planner.MaxConnectionDistance = 0.3;

Задайте начальное и целевое состояния.

start = [0.5, 0.5 0];
goal = [2.5, 0.2, 0];

Планирование пути с параметрами по умолчанию.

rng(100, 'twister') % repeatable result
[pthObj, solnInfo] = plan(planner,start,goal);

Визуализация результатов.

map.show;
hold on;
plot(solnInfo.TreeData(:,1),solnInfo.TreeData(:,2), '.-'); % tree expansion
plot(pthObj.States(:,1),pthObj.States(:,2),'r-','LineWidth',2); % draw path

Figure contains an axes. The axes with title Occupancy Grid contains 3 objects of type image, line.

Ссылки

[1] Караман, С. и Э. Фраццоли. «Алгоритмы на основе выборки для оптимального планирования движения». Международный журнал исследований робототехники. Том 30, номер 7, 2011, стр. 846 - 894.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2019b