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