plannerRRTStar

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

Описание

The 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,η)

где:

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

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

  • η - Значение MaxConnectionDistance свойство

  • V d - Объем модуля мяча в 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++ с помощью Coder™ MATLAB ®

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