isStateValid
Clase: nav.StateValidator
Espacio de nombres: nav
Comprobar si el estado es válido
Descripción
determina si los isValid
= isStateValid(validatorObj
,states
)states
son válidos.
Argumentos de entrada
Objeto validador de estado, especificado como un objeto de una subclase de nav.StateValidator
. Para conocer los objetos validadores de estado proporcionados, consulte validatorOccupancyMap
o validatorVehicleCostmap
.
Posición del estado inicial, especificada como un vector de elementos n o una matriz de vectores filam por n. n es la dimensión del espacio de estados especificado en validatorObj
. m es el número de estados a validar.
Argumentos de salida
Estados válidos, especificados como un vector de elementos m de 1
s y 0
s.
Ejemplos
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
. Copia todos los valores de las variables definidas por el usuario en un nuevo objeto, por lo que copyObj
es 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 solo 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, utilice linspace
para interpolar uniformemente entre estados y verificar si estos estados son válidos utilizando 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.
Historial de versiones
Introducido en R2019b
Consulte también
nav.StateValidator
| nav.StateSpace
| validatorOccupancyMap
| validatorVehicleCostmap
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)