exponenta event banner

validatorOccupancyMap3D

Средство проверки состояния на основе карты сетки 3-D

    Описание

    validatorOccupancyMap3D объект проверяет состояния и дискретизированные движения на основе значений занятости в карте занятости 3-D. Объект интерпретирует расположения карт без препятствий как допустимые состояния. Объект интерпретирует занятые и неизвестные расположения карты как недопустимые состояния.

    Создание

    Описание

    validator = validatorOccupancyMap3D создает средство проверки карты заполнения 3-D, связанное с пространством состояния SE (3) с настройками по умолчанию.

    пример

    validator = validatorOccupancyMap3D(stateSpace) создает средство проверки в указанном пространстве состояния. stateSpace задает значение свойства StateSpace.

    validator = validatorOccupancyMap3D(stateSpace,Name,Value) Задает свойства, используя одну или несколько пар имя-значение. Неопределенные свойства имеют значения по умолчанию. Заключите каждое имя свойства в кавычки.

    Например, validatorOccupancyMap3D('ValidationDistance',0.1) создает 3-D валидатор карты занятости с интервалом выборки 0,1.

    Свойства

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

    Это свойство доступно только для чтения.

    Пространство состояний для проверки состояний, указанное как подкласс nav.StateSpace. Это предварительно определенные объекты пространства:

    Пример: validatorOccupancyMap3D(stateSpaceSE3)

    Карта, используемая для проверки состояний, указанная как occupancyMap3D объект.

    Пример: validator.Map = occupancyMap3D(10)

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

    Пример: validator.ValidationDistance = 0.1

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

    Отображение переменной состояния для координат xyz в векторе состояния, указанном как трехэлементный вектор формы [xIdx yIdx zIdx].

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

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

    copyСоздание глубокой копии объекта проверки состояния
    isMotionValidПроверка допустимости пути между состояниями
    isStateValidПроверка допустимости состояния

    Примеры

    свернуть все

    Создайте карту занятости 3-D и связанный с ней средство проверки состояния. Планирование, проверка и визуализация пути по карте занятости.

    Загрузить и назначить карту средству проверки состояния

    Загрузите карту заполняемости 3-D городского блока в рабочее пространство. Укажите порог, для которого ячейки будут рассматриваться как свободные от препятствий.

    mapData = load('dMapCityBlock.mat');
    omap = mapData.omap;
    omap.FreeThreshold = 0.5;

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

    inflate(omap,5)

    Создайте объект пространства состояния SE (3) с границами для переменных состояния.

    ss = stateSpaceSE3([-20 220;
        -20 220;
        -10 100;
        inf inf;
        inf inf;
        inf inf;
        inf inf]);

    Создайте средство проверки состояния карты занятости 3-D, используя созданное пространство состояний.

    sv = validatorOccupancyMap3D(ss);

    Назначьте карту занятости объекту проверки состояния. Укажите интервал расстояния выборки.

    sv.Map = omap;
    sv.ValidationDistance = 0.1;

    Планирование и визуализация траектории

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

    planner = plannerRRT(ss,sv);
    planner.MaxConnectionDistance = 50;
    planner.MaxIterations = 1000;

    Создайте определяемую пользователем функцию оценки для определения того, достигает ли путь цели. Укажите вероятность выбора целевого состояния во время выборки.

    planner.GoalReachedFcn = @(~,x,y)(norm(x(1:3)-y(1:3))<5);
    planner.GoalBias = 0.1;

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

    start = [40 180 25 0.7 0.2 0 0.1];
    goal = [150 33 35 0.3 0 0.1 0.6];

    Запланируйте траекторию, используя указанные начало, цель и планировщик.

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

    Убедитесь, что точки пути являются допустимыми состояниями.

    isValid = isStateValid(sv,pthObj.States)
    isValid = 6x1 logical array
    
       1
       1
       1
       1
       1
       1
    
    

    Убедитесь, что движение между каждым состоянием последовательного пути является действительным.

    isPathValid = zeros(size(pthObj.States,1)-1,1,'logical');
    for i = 1:size(pthObj.States,1)-1
        [isPathValid(i),~] = isMotionValid(sv,pthObj.States(i,:),...
            pthObj.States(i+1,:));
    end
    isPathValid
    isPathValid = 5x1 logical array
    
       1
       1
       1
       1
       1
    
    

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

    show(omap)
    hold on
    scatter3(start(1,1),start(1,2),start(1,3),'g','filled') % draw start state
    scatter3(goal(1,1),goal(1,2),goal(1,3),'r','filled')    % draw goal state
    plot3(pthObj.States(:,1),pthObj.States(:,2),pthObj.States(:,3),...
        'r-','LineWidth',2) % draw path

    Figure contains an axes. The axes with title Occupancy Map contains 4 objects of type patch, scatter, line.

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

    Создание кода C/C + +
    Создайте код C и C++ с помощью MATLAB ® Coder™

    .
    Представлен в R2020b