nav.StateValidator class

Пакет: nav

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

Описание

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

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

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

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

Abstract
true

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

Создание

Описание

пример

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

Свойства

расширить все

Определение пространства состояний, заданное как объект подкласса из nav.StateSpace. Задайте это свойство используя stateSpace вход на конструкцию. Можно также задать любой из наших предопределенных объектов в разделе «Валидация состояния» в Планировании движения.

Пример: stateSpaceSE2

Атрибуты:

GetAccess
public
SetAccess
immutable

Методы

расширить все

Примеры

свернуть все

В этом примере показано, как использовать 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

Проверяйте валидность состояния

Задайте способ проверки данного состояния. The 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++ с помощью Coder™ MATLAB ®

.
Введенный в R2019b