plan

Планируйте путь между двумя состояниями

    Описание

    path = plan(planner,startState,goalState) возвращает двунаправленный быстро исследуемый путь случайного дерева (RRT) из начального состояния в состояние цели как navPath объект.

    пример

    [path,solnInfo] = plan(planner,startState,goalState) также возвращает информацию о решении из планирования пути.

    Примеры

    свернуть все

    Используйте plannerBiRRT объект для планирования пути между двумя состояниями в окружении с препятствиями. Визуализируйте запланированный путь с интерполированными состояниями.

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

    ss = stateSpaceSE2;

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

    sv = validatorOccupancyMap(ss);

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

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

    Установите расстояние валидации для валидатора.

    sv.ValidationDistance = 0.01;

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

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

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

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

    Задайте начальное и целевое состояния.

    start = [20 10 0];
    goal = [40 40 0];

    Планируйте путь. Из-за случайности алгоритма RRT установите rng seed для повторяемости.

    rng(100,'twister')
    [pthObj,solnInfo] = plan(planner,start,goal);

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

    fprintf('Number of iterations: %d\n',solnInfo.NumIterations)
    Number of iterations: 346
    

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

    show(map)
    hold on
    plot(solnInfo.StartTreeData(:,1),solnInfo.StartTreeData(:,2),'.-','color','b') % Start tree expansion
    plot(solnInfo.GoalTreeData(:,1),solnInfo.GoalTreeData(:,2),'.-','color','g') % Goal tree expansion
    plot(pthObj.States(:,1),pthObj.States(:,2),'r-','LineWidth',2) % draw path
    hold off

    Перепрофилируйте путь с помощью EnableConnectHeuristic значение свойства установлено равным true.

    planner.EnableConnectHeuristic = true;
    [pthObj,solnInfo] = plan(planner,start,goal);

    Отобразите количество проделанных итераций для сходимости дерева. Обратите внимание, что планировщик требует значительно меньше итераций по сравнению с тем, когда EnableConnectHeuristic для свойства задано значение false.

    fprintf('Number of iterations: %d\n',solnInfo.NumIterations)
    Number of iterations: 135
    

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

    figure
    show(map)
    hold on
    plot(solnInfo.StartTreeData(:,1),solnInfo.StartTreeData(:,2),'.-','color','b') % Start tree expansion
    plot(solnInfo.GoalTreeData(:,1),solnInfo.GoalTreeData(:,2),'.-','color','g') % Goal tree expansion
    plot(pthObj.States(:,1),pthObj.States(:,2),'r-','LineWidth',2) % draw path

    Входные параметры

    свернуть все

    Планировщик пути, заданный как plannerBiRRT объект.

    Начальное состояние пути, заданное как N элемент с реальным значением. N - количество размерностей в пространстве состояний.

    Пример: [1 1 pi/6]

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

    Целевое состояние пути, заданное как N элемент с реальным значением. N - количество размерностей в пространстве состояний.

    Пример: [2 2 pi/3]

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

    Выходные аргументы

    свернуть все

    Информация о запланированном пути, возвращенная как navPath объект.

    Информация о решении, возвращенная как структура. Структура содержит следующие поля:

    ОбластьОписание
    IsPathFoundУказывает, найден ли путь. Возвращается 1 (true), если путь найден. В противном случае возвращается 0 (false).
    ExitFlag

    Указывает причину прекращения работы планировщика, возвращаемую следующим образом:

    • 1 - Планировщик достигает цели.

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

    • 3 - плановик достигает максимального количества узлов.

    StartTreeNumNodesЧисло узлов в начальном дереве поиска, когда плановик заканчивается, исключая корневой узел.
    GoalTreeNumNodesЧисло узлов в дереве поиска цели, когда плановик заканчивается, исключая корневой узел.
    NumIterationsКоличество комбинированных итераций как начальным деревом, так и деревом целей.
    StartTreeDataНабор исследуемых состояний, которые отражают статус начального дерева поиска, когда плановик заканчивается. Обратите внимание, что NaN значения вставляются как разделители, чтобы разделить каждое отдельное ребро.
    GoalTreeDataНабор исследуемых состояний, которые отражают статус дерева поиска цели, когда плановик заканчивается. Обратите внимание, что NaN значения вставляются как разделители, чтобы разделить каждое отдельное ребро.

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

    См. также

    Объекты

    Функции

    Введенный в R2021a