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

где:

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

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

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

  • V d — Объем модульного шара в d th размерность

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

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

Типы данных: логический

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

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

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

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

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

Типы данных: 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);

Создайте карту occupany из карты в качестве примера и и установите разрешение карты как 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

Ссылки

[1] Карамен, S. и Э. Фрэззоли. "Основанные на выборке Алгоритмы для Оптимального Планирования Движения". Международный журнал Исследования Робототехники. Издание 30, Номер 7, 2011, стр 846 – 894.

Введенный в R2019b