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
validatorObj
— Objeto del validador de estado
objeto de una subclase de nav.StateValidator
Objeto validador de estado, especificado como un objeto de una subclase de nav.StateValidator
. Para conocer los objetos del validador de estado proporcionados, consulte validatorOccupancyMap
o validatorVehicleCostmap
.
states
— Posiciones estatales
n-elemento vectorial | m-por- n matriz de vectores fila
Posición de estado inicial, especificada como un vector de elemento n o m-por- n matriz de vectores fila. n es la dimensión del espacio de estados especificado en validatorObj
. m es el número de estados a validar.
Argumentos de salida
isValid
— Estados válidos
m-vector de elementos de 1
s y 0
s
Estados válidos, especificados como un vector de elementos m de 1
s y 0
s.
Ejemplos
Crear un validador de espacio de estado personalizado para la planificación de rutas
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 estado. 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
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)