plannerControlRRT

Основанный на управлении планировщик RRT

    Описание

    plannerControlRRT объект является быстро исследующим случайным деревом (RRT) планировщик для решения кинематического и динамического (kinodynamic) планирование проблем с помощью средств управления. Алгоритм RRT является основанной на дереве стандартной программой планирования движения, которая инкрементно выращивает дерево поиска. В кинематических планировщиках дерево растет путем случайной выборки состояний на пробеле конфигурации системы, и затем пытается распространить самый близкий узел к тому состоянию. Выборки распространителя состояния управляют для достижения состояния на основе кинематической модели и политик управления. Когда дерево добавляет узлы, произведенные состояния охватывают пространство поиска и в конечном счете соединяют запуск и целевые состояния.

    Это основанные на управлении шаги алгоритма RRT:

    • Планировщик, plannerControlRRT, запрашивает состояние от пространства состояний.

    • Планировщик находит самое близкое состояние в дереве поиска на основе стоимости.

    • Распространитель состояния, mobileRobotPropagator, выборки управляют командами и длительностью, чтобы распространить к целевому состоянию.

    • Распространитель состояния распространяет к целевому состоянию.

    • Если распространитель возвращает допустимую траекторию в состояние, то добавьте состояние в дерево.

    • Дополнительный: Попытайтесь направить траекторию к итоговой цели на основе свойств NumGoalExtension и GoalBias.

    • Продолжите искать, пока дерево поиска не достигает цели или удовлетворяет другим выходным критериям.

    Преимущество kinodynamic планировщика как plannerControlRRT это, это, как гарантируют, возвратит последовательность состояний, средств управления и ссылок, которые включают кинематическим образом или динамически осуществимо путь. Недостаток kinodynamic планировщику - то, что кинематическое распространение не может гарантировать, что новые состояния точно равны целевым состояниям, если там не существует и аналитическое представление для последовательности средств управления, которые управляют системой между двумя настройками с нулевой остаточной ошибкой. Это означает, что kinodynamic планировщики обычно асимптотически завершены и гарантируют кинематическую выполнимость, но часто не могут гарантировать асимптотическую оптимальность.

    Создание

    Описание

    пример

    controlPlanner = plannerControlRRT(propagator) создает kinodynamic RRT планировщик от объекта распространителя состояния и устанавливает StatePropagator свойство.

    controlPlanner = plannerControlRRT(propagator,Name=Value) задает дополнительные свойства с помощью аргументов name-value. Например, plannerControlRRT(propagator,ContinueAfterGoalReached=1) продолжает искать альтернативные пути после того, как дерево сначала достигнет цели.

    Свойства

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

    Мобильный распространитель состояния робота в виде mobileRobotPropagator возразите или объект подкласса nav.StatePropagator.

    Оптимизация после достижения цели в виде логического 0 ложь) или 1 TRUE). Если задано как верный, планировщик продолжает искать альтернативные пути после того, как это сначала достигнет цели. Планировщик отключает независимо от значения этого свойства, если это достигает максимального количества итераций или максимального количества древовидных узлов.

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

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

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

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

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

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

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

    Максимальное количество времен планировщик может распространить к цели в виде положительного целого числа. После успешного добавления нового узла к дереву планировщик пытается распространить новый узел к цели с помощью propagateWhileValid объектная функция распространителя состояния. Планировщик продолжает распространять, пока функция не возвращает пустой вектор состояния, указывающий, что никакое допустимое управление не найдено, планировщик достигает цели, или функция была вызвана NumGoalExtension \times.

    Чтобы выключить это поведение, установите свойство на 0. Выключение этого поведения приведет к распространению случайным образом вместо к цели.

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

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

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

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

     function isReached = myGoalReachedFcn(planner,currentState,goalState),

    где:

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

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

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

    • isReached — boolean, который указывает, достигло ли текущее состояние целевого состояния, возвращенного как true или false.

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

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

    planЗапланируйте путь от запуска до целевого состояния

    Примеры

    свернуть все

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

    Установите параметры распространителя состояния и состояния

    Загрузите троичную матрицу карты и создайте occupancyMap объект. Создайте распространителя состояния, использующего карту. По умолчанию распространитель состояния использует велосипед кинематическая модель.

    load('exampleMaps','ternaryMap')
    map = occupancyMap(ternaryMap,10);
    
    propagator = mobileRobotPropagator(Environment=map); % Bicycle model

    Установите границы состояния на пространстве состояний на основе пределов мира карты.

    propagator.StateSpace.StateBounds(1:2,:) = ...
                        [map.XWorldLimits; map.YWorldLimits];

    Запланируйте путь

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

    planner = plannerControlRRT(propagator);

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

    start = [10 15 0];
    goal  = [40 30 0];

    Запланируйте путь между состояниями. Для повторяемых результатов, сброс генератор случайных чисел перед планированием. plan функционируйте выводит navPathControl объект, который содержит состояния, команды управления и длительность.

    rng("default")
    path = plan(planner,start,goal)
    path = 
      navPathControl with properties:
    
        StatePropagator: [1x1 mobileRobotPropagator]
                 States: [192x3 double]
               Controls: [191x2 double]
              Durations: [191x1 double]
           TargetStates: [191x3 double]
              NumStates: 192
            NumSegments: 191
    
    

    Визуализация результатов

    Визуализируйте карту и постройте состояния пути.

    show(map)
    hold on
    plot(start(1),start(2),"rx")
    plot(goal(1),goal(2),"go")
    plot(path.States(:,1),path.States(:,2),"b")
    hold off

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

    Отобразите [v psi] управляйте входными параметрами прямой скорости и держащегося угла.

    plot(path.Controls)
    ylim([-1 1])
    legend(["Velocity (m/s)","Steering Angle (rad)"])

    Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Velocity (m/s), Steering Angle (rad).

    Ссылки

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

    [2] Kavraki, L. и С. Лэвалл. "Глава 5 Планирование движения", 1-й редактор, Б. Сисилиано и О. Хэтиб, Эд. Нью-Йорк: Springer-Verlag Берлин Гейдельберг, 2008, стр 109-131.

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