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 размерность

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

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

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

Пространство состояний для планировщика в виде объекта пространства состояний. Можно использовать объекты пространства состояний, такие как 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);

Создайте карту 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

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

Ссылки

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

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

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

Введенный в R2019b