isStateValid

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

Описание

пример

isValid = isStateValid(validatorObj,states) проверяет, допустим ли набор данных состояний.

Примеры

свернуть все

В этом примере показано, как подтвердить пути через 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 является количеством состояний, чтобы подтвердить.

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

свернуть все

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

Введенный в R2019b