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.

positioning.INSMotionModel Clase

Espacio de nombres: positioning

Clase base para definir modelos de movimiento utilizados con insEKF

Desde R2022a

Descripción

La clase positioning.INSMotionModel define la clase base para los modelos de movimiento utilizados con filtros INS. Deriva de esta clase para definir tu propio modelo de movimiento.

Para definir un nuevo modelo de movimiento:

  • Herede de esta clase e implemente al menos dos métodos: modelstates y stateTransition.

  • Opcionalmente, si desea una simulación de mayor fidelidad, puede implementar un método stateTransitionJacobian que devuelve el jacobiano de la función de transición de estado. Si no implementa este método, el objeto calcula numéricamente el jacobiano con menor precisión y mayor coste de cálculo.

Como ejemplo de implementación de esta clase de interfaz, vea los detalles de implementación de insMotionOrientation escribiendo esto en la ventana de comandos:

edit insMotionOrientation

La clase positioning.INSMotionModel 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

sensor = positioning.INSMotionModel() crea un objeto de modelo de sensor INS. Este constructor sólo se puede llamar desde una clase derivada.

Métodos

expandir todo

Ejemplos

contraer todo

Personalice un modelo de movimiento de velocidad constante 1-D usado con un objeto insEKF . Personalice el modelo de movimiento heredando de la clase de interfaz positioning.INSMotionModel e implemente los métodos modelstates y stateTranistion . Opcionalmente, también puede implementar el método stateTransitionJacobian . Estas secciones proporcionan una descripción general de cómo la clase ConstantVelocityMotion implementa los métodos positioning.INSMotionModel , pero para obtener más detalles sobre su implementación, consulte el ConstantVelocityMotion.m adjunto. $ archivo.

Implementar el método modelstates

Para modelar un movimiento de velocidad constante unidimensional, es necesario devolver solo la posición unidimensional y el estado de velocidad como estructura. Cuando agrega un objeto de filtro ConstantVelocityMotion a un objeto de filtro insEKF , el filtro agrega el objeto de filtro Position y Velocity componentes al vector de estado del filtro.

Implementar el método stateTransition

El método stateTransition devuelve las derivadas del estado definido por el modelo de movimiento como estructura. La derivada del Position es el Velocity, y la derivada del Velocity es el 0.

Implementar el método stateTransitionJacobian

El método stateTransitionJacobian devuelve las derivadas parciales del método stateTransition , con respecto al vector de estado del filtro, como una estructura. Todas las derivadas parciales son 0, excepto la derivada parcial de la derivada del componente Position , que es el Velocity, con respecto al Velocity estado, es 1.

Crear y agregar objeto heredado

Cree un objeto ConstantVelocityMotion .

cvModel = ConstantVelocityMotion
cvModel = 
  ConstantVelocityMotion with no properties.

Cree un objeto insEKF con el objeto cvModel creado.

filter = insEKF(insAccelerometer,cvModel)
filter = 
  insEKF with properties:

                   State: [5x1 double]
         StateCovariance: [5x5 double]
    AdditiveProcessNoise: [5x5 double]
             MotionModel: [1x1 ConstantVelocityMotion]
                 Sensors: {[1x1 insAccelerometer]}
             SensorNames: {'Accelerometer'}
          ReferenceFrame: 'NED'

El estado del filtro contiene los componentes Position y Velocity .

stateinfo(filter)
ans = struct with fields:
              Position: 1
              Velocity: 2
    Accelerometer_Bias: [3 4 5]

Mostrar clase ConstantVelocityMotion personalizada

type ConstantVelocityMotion.m
classdef ConstantVelocityMotion < positioning.INSMotionModel
% CONSTANTVELOCITYMOTION Constant velocity motion in 1-D

%   Copyright 2021 The MathWorks, Inc.    

    methods 
        function m = modelstates(~,~)
            % Return the state of motion model (added to the state of the
            % filter) as a structure.
            % Since the motion is 1-D constant velocity motion,
            % retrun only 1-D position and velocity state.  
            m = struct('Position',0,'Velocity',0); 
        end
        function sdot = stateTransition(~,filter,~, varargin)
            % Return the derivative of each state with respect to time as a
            % structure.

            % Deriviative of position = velocity.
            % Deriviative of velocity = 0 because this model assumes constant
            % velocity.

            % Find the current estimated velocity
            currentVelocityEstimate = stateparts(filter,'Velocity');

            % Return the derivatives
            sdot = struct( ...
                'Position',currentVelocityEstimate, ...
                'Velocity',0); 
        end
        function dfdx = stateTransitionJacobian(~,filter,~,varargin)
            % Return the Jacobian of the stateTransition method with
            % respect to the state vector. The output is a structure with the
            % same fields as stateTransition but the value of each field is a
            % vector containing the derivative of that state relative to
            % all other states.

            % First, figure out the number of state components in the filter
            % and the corresponding indices
            N = numel(filter.State);  
            idx = stateinfo(filter);  


            % Compute the N partial derivatives of Position with respect to
            % the N states. The partial derivative of the derivative of the
            % Position stateTransition function with respect to Velocity is
            % just 1. All others are 0.
            dpdx = zeros(1,N);  
            dpdx(1,idx.Velocity) =  1;
            
            % Compute the N partial derivatives of Velocity with respect to
            % the N states. In this case all the partial derivatives are 0.
            dvdx = zeros(1,N);

            % Return the partial derivatives as a structure.
            dfdx = struct('Position',dpdx,'Velocity',dvdx);
        end
    end
end

Historial de versiones

Introducido en R2022a

Consulte también

|