Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

nav.StateValidator Clase

Espacio de nombres: nav

Crear validador de estado para la planificación de rutas

Desde R2019b

Descripción

nav.StateValidator es una interfaz para todos los validadores estatales utilizados para la planificación de rutas. Derive de esta clase si desea definir su propio validador de estado. Esta representación permite la validación del estado y del movimiento.

Para crear una plantilla de muestra para generar su propia clase de espacio de estados, llame a createPlanningTemplate ("StateValidator"). Para implementaciones específicas de la clase de validador de estado para aplicación general, consulte Validación de estado en Planificación de movimiento.

La clase nav.StateValidator es una clase handle .

Atributos de clase

Abstracto
verdadero

Para obtener información sobre los atributos de clase, consulte Class Attributes.

Creación

Descripción

ejemplo

ssObj = nav.StateValidator(stateSpace) crea un objeto validador de estado que valida estados en el espacio de estados dado. Este constructor sólo se puede llamar desde una clase derivada. Cree su propia definición de clase usando createPlanningTemplate.

Propiedades

expandir todo

Definición de espacio de estados, especificada como un objeto de una subclase de nav.StateSpace. Especifique esta propiedad utilizando la entrada stateSpace en la construcción. También puedes especificar cualquiera de nuestros objetos predefinidos en la sección Validación de Estado desde Planificación de movimiento.

Ejemplo: stateSpaceSE2

Atributos:

Tener acceso
público
Establecer acceso
inmutable

Métodos

expandir todo

Ejemplos

contraer todo

Este ejemplo muestra cómo utilizar la función createPlanningTemplate para generar una plantilla para personalizar su propia clase de validación de estado. La validación de estado se utiliza con algoritmos de planificación de rutas para garantizar rutas válidas. La función de plantilla proporciona una implementación básica a modo de ejemplo.

Llame a la función de creación de plantilla. Esta función genera un archivo de definición de clase que puede modificar para su propia implementación. Guarde este archivo.

createPlanningTemplate("StateValidator")

Definición de clase y propiedad

La primera parte de la plantilla especifica la definición de clase y las propiedades de la clase. Deriva de la clase nav.StateValidator . Puede especificar aquí cualquier propiedad adicional definida por el usuario.

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

Guarde su clase de validador de estado personalizado y asegúrese de que el nombre de su archivo coincida con el nombre de la clase.

Constructor de clases

Utilice el constructor para establecer el nombre del validador del espacio de estados y especificar el objeto del espacio de estados. Establezca un valor predeterminado para el espacio de estado si no se proporciona uno. Llame al constructor de la clase base. Inicialice cualquier otra propiedad definida por el usuario. Este ejemplo utiliza un valor predeterminado de MyCustomStateSpace, que se ilustró en el ejemplo anterior.

methods
        function obj = MyCustomStateValidator(space)
            narginchk(0,1)
            
            if nargin == 0
                space = MyCustomStateSpace;
            end

            obj@nav.StateValidator(space);
            
           % Initialize user-defined properties
        end

Copiar semántica

Especifique la definición del método copy . Copie todos los valores de sus variables definidas por el usuario en un nuevo objeto, de modo que copyObj sea una copia profunda. El comportamiento predeterminado dado en este ejemplo crea una nueva copia del objeto con el mismo tipo.

        function copyObj = copy(obj)
            copyObj = feval(class(obj), obj.StateSpace);
        end

Verificar validez del estado

Defina cómo se valida un estado determinado. La entrada state puede ser un vector fila o una matriz de vectores fila para múltiples estados. Personalice esta función para cualquier comportamiento de validación especial para su espacio de estado, como la verificación de colisiones contra obstáculos.

        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

Verificar la validez del movimiento

Defina cómo generar el movimiento entre estados y determine si es válido. Para este ejemplo, use linspace para interpolar uniformemente entre estados y verifique si estos estados son válidos usando isStateValid. Personalice esta función para realizar muestreos entre estados o considere otros métodos analíticos para determinar si un vehículo puede moverse entre estados determinados.

        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

Termine los métodos y las secciones de clase.

    end
end

Guarde la definición de clase del validador de espacio de estados. Ahora puede utilizar el constructor de clases para crear un objeto para la validación de estados para un espacio de estados determinado.

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Historial de versiones

Introducido en R2019b