interpolate
Clase: nav.StateSpace
Espacio de nombres: nav
Interpolar entre estados
Descripción
Argumentos de entrada
Objeto de espacio de estados, especificado como un objeto de una subclase de nav.StateSpace
.
Posición del estado inicial, especificada como un vector de elementos n. n es la dimensión del espacio de estado especificado en la propiedad NumStateVariables
de ssObj
.
Posición del estado final, especificada como un vector de elementos n. n es la dimensión del espacio de estado especificado en la propiedad NumStateVariables
de ssObj
.
Valores de relación para interpolar a lo largo de la ruta, especificados como un vector de elementos m. Estas proporciones determinan cómo realizar el muestreo entre los dos estados.
Argumentos de salida
Ejemplos
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 un muestreador 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 de estado.Llame al constructor de la clase base.
Para este ejemplo, especifique los valores de las propiedades de distribución normal y uniforme utilizando las 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
. 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 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 argumentos de entrada variables.
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 muestrear 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 de inicio 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.
Historial de versiones
Introducido en R2019b
Consulte también
nav.StateSpace
| nav.StateValidator
| stateSpaceSE2
| stateSpaceDubins
| stateSpaceReedsShepp
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)