createPlanningTemplate
Crear una implementación de muestra para la interfaz de planificación de rutas
Desde R2019b
Sintaxis
Descripción
createPlanningTemplate
crea una plantilla de planificación para una subclase de la clase nav.StateSpace
. La función abre un archivo en el Editor MATLAB® . Guarde su implementación personalizada y asegúrese de que el archivo esté disponible en la ruta MATLAB . Sintaxis alternativa: createPlanningTemplate("StateSpace")
createPlanningTemplate("StateValidator")
crea una plantilla para una subclase de la clase nav.StateValidator
.
createPlanningTemplate("StateSampler")
crea una plantilla para una subclase de la clase nav.StateSampler
.
Ejemplos
Crear 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 definición de espacio de estados y muestra para usar con algoritmos de planificación de rutas. Con la plantilla se proporciona una implementación sencilla.
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.
createPlanningTemplate
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.StateSpace
. Para este ejemplo, cree una propiedad para las distribuciones uniforme y normal. Puede especificar aquí cualquier propiedad adicional definida por el usuario.
classdef MyCustomStateSpace < nav.StateSpace & ... matlabshared.planning.internal.EnforceScalarHandle properties UniformDistribution NormalDistribution % Specify additional properties here end
Guarde su clase de espacio 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 espacio de estados, el número de variables de estado y definir sus límites. Alternativamente, puede agregar argumentos de entrada a la función y pasar las variables cuando crea un objeto.
Para cada variable de estado, defina los valores
[min max]
para los límites del estado.Llame al constructor de la clase base.
Para este ejemplo, especifique los valores de propiedad de distribución normal y uniforme utilizando clases predefinidas
NormalDistribution
yUniformDistribution
.Especifique aquí cualquier otro valor de propiedad definido por el usuario.
methods function obj = MyCustomStateSpace spaceName = "MyCustomStateSpace"; numStateVariables = 3; stateBounds = [-100 100; % [min max] -100 100; -100 100]; obj@nav.StateSpace(spaceName, numStateVariables, stateBounds); obj.NormalDistribution = matlabshared.tracking.internal.NormalDistribution(numStateVariables); obj.UniformDistribution = matlabshared.tracking.internal.UniformDistribution(numStateVariables); % User-defined property values here 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 nombre, límites de estado y distribuciones.
function copyObj = copy(obj) copyObj = feval(class(obj)); copyObj.StateBounds = obj.StateBounds; copyObj.UniformDistribution = obj.UniformDistribution.copy; copyObj.NormalDistribution = obj.NormalDistribution.copy; end
Hacer cumplir los límites estatales
Especifique cómo garantizar que los estados estén siempre dentro de los límites estatales. Para este ejemplo, los valores de estado se saturan en los valores mínimos o máximos de los límites del estado.
function boundedState = enforceStateBounds(obj, state) nav.internal.validation.validateStateMatrix(state, nan, obj.NumStateVariables, "enforceStateBounds", "state"); boundedState = state; boundedState = min(max(boundedState, obj.StateBounds(:,1)'), ... obj.StateBounds(:,2)'); end
Muestra uniformemente
Especifique el comportamiento para el muestreo en una distribución uniforme. Admite múltiples sintaxis para restringir la distribución uniforme a un estado cercano dentro de una cierta distancia y muestrear múltiples estados.
STATE = sampleUniform(OBJ) STATE = sampleUniform(OBJ,NUMSAMPLES) STATE = sampleUniform(OBJ,NEARSTATE,DIST) STATE = sampleUniform(OBJ,NEARSTATE,DIST,NUMSAMPLES)
Para este ejemplo, utilice una función de validación para procesar una entrada varargin
que maneja los diferentes argumentos de entrada.
function state = sampleUniform(obj, varargin) narginchk(1,4); [numSamples, stateBounds] = obj.validateSampleUniformInput(varargin{:}); obj.UniformDistribution.RandomVariableLimits = stateBounds; state = obj.UniformDistribution.sample(numSamples); end
Muestra de distribución gaussiana
Especifique el comportamiento del muestreo en una distribución gaussiana. Admite múltiples sintaxis para muestrear uno o varios estados.
STATE = sampleGaussian(OBJ, MEANSTATE, STDDEV) STATE = sampleGaussian(OBJ, MEANSTATE, STDDEV, NUMSAMPLES)
function state = sampleGaussian(obj, meanState, stdDev, varargin) narginchk(3,4); [meanState, stdDev, numSamples] = obj.validateSampleGaussianInput(meanState, stdDev, varargin{:}); obj.NormalDistribution.Mean = meanState; obj.NormalDistribution.Covariance = diag(stdDev.^2); state = obj.NormalDistribution.sample(numSamples); state = obj.enforceStateBounds(state); end
Interpolar entre estados
Defina cómo interpolar entre dos estados en su espacio de estados. Utilice una entrada, fraction
, para determinar cómo realizar el muestreo a lo largo de la ruta entre dos estados. Para este ejemplo, defina un método de interpolación lineal básico utilizando la diferencia entre estados.
function interpState = interpolate(obj, state1, state2, fraction) narginchk(4,4); [state1, state2, fraction] = obj.validateInterpolateInput(state1, state2, fraction); stateDiff = state2 - state1; interpState = state1 + fraction' * stateDiff; end
Calcular la distancia entre estados
Especifique cómo calcular la distancia entre dos estados en su espacio de estados. Utilice las entradas state1
y state2
para definir las posiciones inicial y final. Ambas entradas pueden ser de un solo estado (vector fila) o de múltiples estados (matriz de vectores fila). Para este ejemplo, calcule la distancia basándose en la distancia euclidiana entre cada par de posiciones estatales.
function dist = distance(obj, state1, state2) narginchk(3,3); nav.internal.validation.validateStateMatrix(state1, nan, obj.NumStateVariables, "distance", "state1"); nav.internal.validation.validateStateMatrix(state2, size(state1,1), obj.NumStateVariables, "distance", "state2"); stateDiff = bsxfun(@minus, state2, state1); dist = sqrt( sum( stateDiff.^2, 2 ) ); end
Termine los métodos y las secciones de clase.
end end
Guarde su definición de clase de espacio de estado. Ahora puedes usar el constructor de clases para crear un objeto para tu espacio de estados.
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.
Crear clase para implementar un muestreador de estado personalizado
Este ejemplo muestra cómo utilizar la función createPlanningTemplate
para generar una plantilla para crear su propio muestreador de estado. El muestreo del espacio de estados se utiliza con algoritmos de planificación de rutas para generar muestras válidas para calcular rutas óptimas. 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("StateSampler")
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.StateSampler
. Puede especificar aquí cualquier propiedad adicional definida por el usuario.
classdef MyCustomStateSampler < nav.StateSampler & ... matlabshared.planning.internal.EnforceScalarHandle properties % User-defined properties end
Guarde su clase de muestra de estado personalizada 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 muestreador de estado y especificar el objeto del espacio de estado. Establezca un valor predeterminado para el espacio de estado si no se proporciona uno. Este ejemplo utiliza un stateSpaceSE2
como espacio de estado predeterminado. Llame al constructor de la clase base. Inicialice cualquier otra propiedad definida por el usuario. El objeto del espacio de estados se valida en la clase base StateSampler
.
methods function obj = MyCustomStateSampler(space) narginchk(0,1) if nargin == 0 space = stateSpaceSE2; end obj@nav.StateSampler(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.StateSampler); % Place your code here end
Generar muestras de estado
Defina cómo se deben generar las muestras de estado. Especifique el número de muestras a generar. Si no se especifica, el número predeterminado de muestras generadas es 1. También puede agregar argumentos de entrada adicionales a la función. De forma predeterminada, la función calcula muestras utilizando una distribución uniforme. Puede reemplazar el comportamiento de la función predeterminada con su código personalizado.
function states = sample(obj, numSamples) arguments obj numSamples = 1 end % Default behavior: Do uniform sampling states = obj.StateSpace.sampleUniform(numSamples); %-------------------------------------------------------------- % Place your code here to replace default function behavior. %-------------------------------------------------------------- end
Termine los métodos y las secciones de clase.
end end
Guarde la definición de clase de muestra de su estado. Ahora puede utilizar el constructor de clases para crear un objeto para muestrear un espacio de estados determinado.
Historial de versiones
Introducido en R2019bR2023b: Plantilla de clase para crear una muestra de estado personalizada
Ahora puede usar la función createPlanningTemplate
para generar una plantilla de clase para crear una muestra de estado personalizada. Usa la sintaxis
createPlanningTemplate("StateSampler")
Consulte también
Clases
Objetos
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)