nav.StateValidator class

Пакет: военно-морской

Создайте блок проверки допустимости состояния для планирования пути

Описание

nav.StateValidator интерфейс для всех блоков проверки допустимости состояния, используемых для планирования пути. Выведите из этого класса, если вы хотите задать свой собственный блок проверки допустимости состояния. Это представление допускает валидация движения и состояние.

Чтобы создать демонстрационный шаблон для генерации вашего собственного класса пространства состояний, вызвать createPlanningTemplate("StateValidator"). Для определенных реализаций класса блока проверки допустимости состояния для общего применения смотрите Валидацию состояния в Планировании Движения.

nav.StateValidator классом является handle класс.

Атрибуты класса

Abstract
true

Для получения информации об атрибутах класса см. Атрибуты класса.

Создание

Описание

пример

ssObj = nav.StateValidator(stateSpace) создает объект блока проверки допустимости состояния, который подтверждает состояния в данном пространстве состояний. Этот конструктор может только быть назван от производного класса. Создайте свое собственное использование определения класса createPlanningTemplate.

Свойства

развернуть все

Определение пространства состояний в виде объекта подкласса от nav.StateSpace. Задайте это свойство с помощью stateSpace введите на конструкции. Можно также задать любой из наших предопределенных объектов в разделе State Validation от Планирования Движения.

Пример: stateSpaceSE2

Атрибуты:

GetAccess
public
SetAccess
immutable

Методы

развернуть все

Примеры

свернуть все

В этом примере показано, как использовать createPlanningTemplate функция, чтобы сгенерировать шаблон для настройки вашего собственного класса валидации состояния. Валидация состояния используется с алгоритмами планирования пути, чтобы гарантировать допустимые пути. Функция шаблона предоставляет базовому внедрению, например, цели.

Вызовите создать функцию шаблона. Эта функция генерирует файл определения класса для вас, чтобы изменить для вашей собственной реализации. Сохраните этот файл.

createPlanningTemplate("StateValidator")

Класс и определение свойства

Первая часть шаблона задает определение класса и любые свойства для класса. Выведите из nav.StateValidator класс. Можно задать любые дополнительные пользовательские свойства здесь.

classdef MyCustomStateValidator < nav.StateValidator & ...
        matlabshared.planning.internal.EnforceScalarHandle
    properties
       % User-defined properties
    end

Сохраните свой пользовательский класс блока проверки допустимости состояния и гарантируйте, что ваше имя файла совпадает с именем класса.

Конструктор класса

Используйте конструктора, чтобы определить имя блока проверки допустимости пространства состояний и задать объект пространства состояний. Установите значение по умолчанию для пространства состояний, если вам не предоставляют. Вызовите конструктора базового класса. Инициализируйте любые другие пользовательские свойства. Этот пример использует значение по умолчанию MyCustomStateSpace, который был проиллюстрирован в предыдущем примере.

methods
        function obj = MyCustomStateValidator(space)
            narginchk(0,1)
            
            if nargin == 0
                space = MyCustomStateSpace;
            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

Сохраните свое определение класса блока проверки допустимости пространства состояний. Можно теперь использовать конструктора класса, чтобы создать объект для валидации состояний для данного пространства состояний.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2019b