Проверяйте, допустимо ли состояние
проверяет, допустим ли набор данных состояний.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
validatorObj — Объект блока проверки допустимости состоянияnav.StateValidatorОбъект блока проверки допустимости состояния, заданный как объект подкласса nav.StateValidator. Для обеспеченных объектов блока проверки допустимости состояния смотрите validatorOccupancyMap или validatorVehicleCostmap.
states — Положения состоянияПоложение начального состояния, заданное как n - вектор элемента или m-by-n матрица векторов-строк. n является размерностью пространства состояний, заданного в validatorObj. m является количеством состояний, чтобы подтвердить.
isValid — Допустимые состояния1s и 0sДопустимые состояния, заданные как m - вектор элемента 1s и 0s.
isMotionValid | nav.StateSpace | nav.StateValidator | stateSpaceSE2
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.