Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

positioning.INSSensorModel Clase

Espacio de nombres: positioning

Clase base para definir modelos de sensores utilizados con insEKF

Desde R2022a

Descripción

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

Para definir un nuevo sensor:

  • Herede de esta clase e implemente al menos el método measurement.

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

Si la definición del modelo de sensor requiere el uso del estado rastreado, además debe:

  • Implemente el método sensorstates para definir el estado rastreado.

  • Opcionalmente, puede implementar el método stateTransition si el estado no es constante en el tiempo.

  • Opcionalmente, puede implementar el método stateTransitionJacobian (que devuelve el jacobiano de la función de transición de estado) para una simulación de mayor fidelidad. 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, consulte los detalles de implementación de insAccelerometer escribiendo lo siguiente en la ventana de comandos:

edit insGyroscope

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

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

ejemplo

Métodos

expandir todo

Ejemplos

contraer todo

Personalice un modelo de sensor utilizado con el objeto insEKF. El sensor mide el estado de la velocidad, incluido un sesgo afectado por el ruido aleatorio.

Personalice el modelo del sensor heredando de la clase de interfaz positioning.INSSensorModel e implementando sus métodos. Tenga en cuenta que solo se requiere el método measurement para la implementación en la clase de interfaz positioning.INSSensorModel. Estas secciones proporcionan una descripción general de cómo la clase BiasSensor implementa los métodos positioning.INSSensorModel, pero para obtener detalles sobre su implementación, consulte los detalles de la implementación en el archivo BiasSensor.m adjunto.

Implementar el método sensorstates

Para modelar el sesgo, el método sensorstates necesita devolver un estado, Bias, como estructura. Cuando agrega un objeto BiasSensor a un objeto de filtro insEKF, el filtro agrega el componente de sesgo al vector de estado del filtro.

Implementar el método measurement

La medición es el componente de velocidad del estado del filtro, incluida la polarización. Por lo tanto, devuelva la suma del componente de velocidad del filtro y la polarización.

Implementar el método measurementJacobian

El método measurementJacobian devuelve la derivada parcial del método measurement con respecto al vector de estado del filtro como una estructura. Todas las derivadas parciales son 0, excepto las derivadas parciales de la medición con respecto a los componentes de velocidad y estado de sesgo.

Implementar el método stateTransition

El método stateTransiton devuelve la derivada del estado del sensor definido en el método sensorstates. Tenga en cuenta que este ejemplo solo muestra cómo configurar el método y no corresponde a ninguna aplicación práctica.

Implementar el método stateTransitionJacobian

Como la función stateTransiton no depende del estado del filtro, la matriz jacobiana es 0.

Crear y agregar objeto heredado

Cree un objeto BiasSensor.

biSensor = BiasSensor
biSensor = 
  BiasSensor with no properties.

Crea un objeto insEKF con el objeto biSensor.

filter = insEKF(biSensor,insMotionPose)
filter = 
  insEKF with properties:

                   State: [17×1 double]
         StateCovariance: [17×17 double]
    AdditiveProcessNoise: [17×17 double]
             MotionModel: [1×1 insMotionPose]
                 Sensors: {[1×1 BiasSensor]}
             SensorNames: {'BiasSensor'}
          ReferenceFrame: 'NED'

El estado del filtro contiene el componente de polarización.

stateinfo(filter)
ans = struct with fields:
        Orientation: [1 2 3 4]
    AngularVelocity: [5 6 7]
           Position: [8 9 10]
           Velocity: [11 12 13]
       Acceleration: [14 15 16]
    BiasSensor_Bias: 17

Mostrar clase BiasSensor personalizada

type BiasSensor.m
classdef BiasSensor < positioning.INSSensorModel
%BIASSENSOR Sensor measuring velocity with bias

%   Copyright 2021 The MathWorks, Inc.    

    methods 
        function s = sensorstates(~,~)
            % Assume the sensor has a bias. Define a Bias state to enable
            % the filter to estimate the bias.
            s = struct('Bias',0);
        end        
        function z = measurement(sensor,filter)
            % Measurement is the summation of the velocity measurement and
            % the bias.
            velocity = stateparts(filter,'Velocity');
            bias = stateparts(filter,sensor,'Bias');
            z = velocity + bias;
        end        
        function dzdx = measurementJacobian(sensor,filter)
            % Compute the Jacobian, which is the partial derivative of the 
            % measurement (velocity plus bias) with respect to the filter
            % state vector. 
            % Obtain the dimension of the filter state.
            N = numel(filter.State);  

            % The partial derviative of the Bias with respect to all the
            % states is zero, except the Bias state itself.
            dzdx = zeros(1,N); 

            % Obtain the index for the Bias state component in the filter.
            bidx = stateinfo(filter,sensor,'Bias'); 
            dzdx(:,bidx) = 1;

            % The partial derivative of the Velocity with respect to all the
            % states is zero, except the Velocity state itself.
            vidx = stateinfo(filter,'Velocity');
            dzdx(:,vidx) = 1;
        end
        function ds = stateTransition(~,~,~,~)
            % Return the derivative of the sensor state with respect to
            % time as a structure. 
            ds = struct('Bias',0);
        end
        function dBiasdx = stateTransitonJacobian(~,filter,~,~)
            % Since the stateTransiton function does not depend on the
            % state of the filter, the Jacobian is all zero.
            N = numel(filter.State);
            dBiasdx = zeros(1,N);
        end
    end
end

Historial de versiones

Introducido en R2022a

Consulte también

|