isMotionValid

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

Описание

пример

[isValid,lastValid] = isMotionValid(validatorObj,state1,state2) определяет, допустимо ли движение между двумя состояниями путем интерполяции между состояниями. Функция также возвращает последнее допустимое состояние вдоль пути.

Примеры

свернуть все

В этом примере показано, как подтвердить пути через evironment.

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

load exampleMaps.mat
map = occupancyMap(simpleMap);
show(map)

Задайте крупный путь через карту.

path = [2 2 pi/2; 10 15 0; 17 8 -pi/2];
hold on
plot(path(:,1),path(:,2),"--o")

Создайте блок проверки допустимости состояния с помощью stateSpaceSE2 определение. Задайте карту и расстояние для интерполяции и проверки сегментов пути.

validator = validatorOccupancyMap(stateSpaceSE2);
validator.Map = map;
validator.ValidationDistance = 0.1;

Проверяйте, что точки пути являются допустимыми состояниями. Все три точки находятся в свободном пространстве, рассмотрен допустимым - также.

isValid = isStateValid(validator,path)
isValid = 3x1 logical array

   1
   1
   1

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

startStates = [path(1,:);path(2,:)];
endStates = [path(2,:);path(3,:)];
    for i = 1:2
        [isPathValid, lastValid] = isMotionValid(validator,startStates(i,:),endStates(i,:));
        if ~isPathValid
            plot(lastValid(1),lastValid(2),'or')
        end
    end
hold off

В этом примере показано, как подтвердить пути через evironment.

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

load exampleMaps.mat
map = vehicleCostmap(double(simpleMap));
map.CollisionChecker = inflationCollisionChecker("InflationRadius",1);
plot(map)

Задайте крупный путь через карту.

path = [3 3 pi/2; 8 15 0; 17 8 -pi/2];
hold on
plot(path(:,1),path(:,2),"--o")

Создайте блок проверки допустимости состояния с помощью stateSpaceSE2 определение. Задайте карту и расстояние для интерполяции и проверки сегментов пути.

validator = validatorVehicleCostmap(stateSpaceSE2);
validator.Map = map;
validator.ValidationDistance = 0.1;

Проверяйте, что точки пути являются допустимыми состояниями. Все три точки находятся в свободном пространстве, рассмотрен допустимым - также.

isValid = isStateValid(validator,path)
isValid = 3x1 logical array

   1
   1
   1

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

startStates = [path(1,:);path(2,:)];
endStates = [path(2,:);path(3,:)];
    for i = 1:2
        [isPathValid, lastValid] = isMotionValid(validator,startStates(i,:),endStates(i,:));
        if ~isPathValid
            plot(lastValid(1),lastValid(2),'or')
        end
    end
hold off

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

свернуть все

Объект блока проверки допустимости состояния, заданный как объект подкласса nav.StateValidator. Для обеспеченных объектов блока проверки допустимости состояния смотрите validatorOccupancyMap или validatorVehicleCostmap.

Положения начального состояния, заданные как n - вектор элемента или m-by-n матрица векторов-строк. n является размерностью пространства состояний, заданного в validatorObj. m является количеством состояний, чтобы подтвердить.

Положения конечного состояния, заданные как n - вектор элемента или m-by-n матрица векторов-строк. n является размерностью пространства состояний, заданного в validatorObj. m является количеством состояний, чтобы подтвердить.

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

свернуть все

Допустимые состояния, заданные как m - вектор элемента 1s и 0s.

Итоговое допустимое состояние вдоль пути, заданного как n - вектор элемента или m-by-n матрица векторов-строк. n является размерностью пространства состояний, заданного в свойстве пространства состояний в validatorObj.

Введенный в R2019b

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