exponenta event banner

класс nav.StateValidator

Пакет: навигация

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

Описание

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

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

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

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

Определите способ проверки данного состояния. 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