Класс: навигация. StateValidator
Пакет: навигация
Проверка допустимости состояния
определяет, isValid = isStateValid(validatorObj,states)states действительны.
validatorObj - Объект проверки состоянияnav.StateValidatorОбъект проверки состояния, указанный как объект из подкласса nav.StateValidator. Для получения информации об объектах проверки состояния см. validatorOccupancyMap или validatorVehicleCostmap.
states - Государственные должностиПозиция начального состояния, заданная как вектор n-элемента или матрица m-на-n векторов строк. n - размер пространства состояния, указанный в validatorObj. m - количество состояний для проверки.
isValid - Действительные состояния1s и 0sДопустимые состояния, указанные как вектор m-элемента 1s и 0s.
В этом примере показано, как использовать createPlanningTemplate для создания шаблона для настройки собственного класса проверки состояния. Проверка состояния используется с алгоритмами планирования путей для обеспечения допустимых путей. Функция шаблона предоставляет базовую реализацию для примера.
Вызовите функцию создания шаблона. Эта функция создает файл определения класса для изменения для собственной реализации. Сохраните этот файл.
createPlanningTemplate("StateValidator")
Определение класса и свойства
Первая часть шаблона определяет определение класса и любые свойства класса. Вывести из nav.StateValidator класс. Здесь можно указать любые дополнительные пользовательские свойства.
classdef MyCustomStateValidator < nav.StateValidator & ... matlabshared.planning.internal.EnforceScalarHandle properties % User-defined properties end
Сохраните класс проверки пользовательского состояния и убедитесь, что имя файла соответствует имени класса.
Конструктор классов
Используйте конструктор, чтобы задать имя средства проверки пространства состояний и указать объект пространства состояний. Задайте значение по умолчанию для пространства состояния, если оно не указано. Вызовите конструктор базового класса. Инициализируйте любые другие пользовательские свойства.
methods
function obj = MyCustomStateValidator(space)
narginchk(0,1)
if nargin == 0
space = stateSpaceSE2;
end
obj@nav.StateValidator(space);
% Initialize user-defined properties
end
Копирование семантики
Укажите copy определение метода. Скопируйте все значения пользовательских переменных в новый объект, чтобы copyObj является глубокой копией. Поведение по умолчанию, приведенное в этом примере, создает новую копию объекта с тем же типом.
function copyObj = copy(obj) copyObj = feval(class(obj), obj.StateSpace); end
Проверить действительность состояния
Определите способ проверки данного состояния. state входной может быть либо одним вектором строки, либо матрицей векторов строк для нескольких состояний. Настройте эту функцию для любого специального поведения проверки для области состояния, например для проверки столкновений с препятствиями.
function isValid = isStateValid(obj, state) narginchk(2,2); nav.internal.validation.validateStateMatrix(state, nan, obj.StateSpace.NumStateVariables, ... "isStateValid", "state"); bounds = obj.StateSpace.StateBounds'; inBounds = state >= bounds(1,:) & state <= bounds(2,:); isValid = all(inBounds, 2); end
Проверка достоверности движения
Определите способ формирования движения между состояниями и определите, является ли оно действительным. Для этого примера используйте linspace для равномерной интерполяции между состояниями и проверки достоверности этих состояний с помощью isStateValid. Настройте эту функцию для выборки между состояниями или рассмотрите другие аналитические методы для определения того, может ли транспортное средство перемещаться между заданными состояниями.
function [isValid, lastValid] = isMotionValid(obj, state1, state2) narginchk(3,3); state1 = nav.internal.validation.validateStateVector(state1, ... obj.StateSpace.NumStateVariables, "isMotionValid", "state1"); state2 = nav.internal.validation.validateStateVector(state2, ... obj.StateSpace.NumStateVariables, "isMotionValid", "state2"); if (~obj.isStateValid(state1)) error("statevalidator:StartStateInvalid", "The start state of the motion is invalid."); end % Interpolate at a fixed interval between states and check state validity numInterpPoints = 100; interpStates = obj.StateSpace.interpolate(state1, state2, linspace(0,1,numInterpPoints)); interpValid = obj.isStateValid(interpStates); % Look for invalid states. Set lastValid state to index-1. firstInvalidIdx = find(~interpValid, 1); if isempty(firstInvalidIdx) isValid = true; lastValid = state2; else isValid = false; lastValid = interpStates(firstInvalidIdx-1,:); end end
Завершите методы и разделы классов.
end end
Сохраните определение класса проверки пространства состояния. Теперь можно использовать конструктор класса для создания объекта для проверки состояний для данного пространства состояний.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.