plannerRRT

Создайте планировщика RRT для геометрического планирования

Описание

plannerRRT объект создает планировщика быстро исследующего случайного дерева (RRT) для того, чтобы решить геометрические задачи планирования. RRT является основанным на дереве планировщиком движения, который создает дерево поиска инкрементно из выборок, случайным образом чертивших от данного пространства состояний. Дерево в конечном счете охватывает пространство поиска и соединяет начальное состояние с целевым состоянием. Общий процесс роста дерева следующие:

  1. Планировщик производит случайный rand x состояния в пространстве состояний.

  2. Планировщик находит, что x состояния около этого уже находится в дереве поиска и является самым близким (на основе определения расстояния в пространстве состояний) к rand x.

  3. Планировщик расширяется от x рядом к rand x, пока новый x состояния не достигнут.

  4. Затем новый новый x состояния добавляется к дереву поиска.

Для геометрического RRT расширение и связь между двумя состояниями могут быть найдены аналитически, не нарушая ограничения, заданные в пространстве состояний объекта планировщика.

Создание

Описание

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

Свойства

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

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

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

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

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

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

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

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

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

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

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

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

 function isReached = myGoalReachedFcn(planner,currentState,goalState)

где:

  • planner — Созданный объект планировщика, заданный как plannerRRT объект.

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

  • goalState — Целевое состояние, заданное как три вектора действительных чисел элемента.

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

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

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

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

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

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

Примеры

свернуть все

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

ss = stateSpaceSE2;

Создайте occupanyMap- основанный блок проверки допустимости состояния, использующий созданное пространство состояний.

sv = validatorOccupancyMap(ss);

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

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

Установите расстояние валидации для блока проверки допустимости.

sv.ValidationDistance = 0.01;

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

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

Создайте планировщика пути и увеличьте макс. расстояние связи.

planner = plannerRRT(ss,sv);
planner.MaxConnectionDistance = 0.3;

Установите запуск и целевые состояния.

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

Запланируйте путь с настройками по умолчанию.

rng(100,'twister'); % for repeatable result
[pthObj,solnInfo] = planner.plan(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

Введенный в R2019b