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 объект.

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

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

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

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

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

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

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

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

 function isReached = myGoalReachedFcn(planner,currentState,goalState)

где:

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

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

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

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

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

Типы данных: 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] = plan(planner,start,goal);

Визуализируйте результаты.

show(map)
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 object. The axes object with title Occupancy Grid contains 3 objects of type image, line.

Ссылки

[1] С.М. Лэвалл и Дж.Дж. Каффнер. "Рандомизированное Планирование Kinodynamic". Международный журнал Исследования Робототехники. Издание 20, Номер 5, 2001, стр 378 – 400.

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

Введенный в R2019b
Для просмотра документации необходимо авторизоваться на сайте