Contenu principal

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

sensorStates

États des capteurs

Depuis R2022a

Description

s = sensorStates(filter,options) renvoie une structure qui décrit les états utilisés par le modèle de capteur et suivis par l'objet filtre insEKF .

Conseil

Implémentez cette méthode uniquement si vous souhaitez estimer les états spécifiques au capteur, tels que les biais, à l'aide du filtre.

exemple

Exemples

réduire tout

Personnalisez un modèle de capteur utilisé avec l'objet insEKF . Le capteur mesure l'état de vitesse, y compris un biais affecté par un bruit aléatoire.

Personnalisez le modèle de capteur en héritant de la classe d'interface positioning.INSSensorModel et en implémentant ses méthodes. Notez que seule la méthode measurement est requise pour l'implémentation dans la classe d'interface positioning.INSSensorModel . Ces sections donnent un aperçu de la façon dont la classe BiasSensor implémente les méthodes positioning.INSSensorModel , mais pour plus de détails sur leur implémentation, voir les détails de l'implémentation dans le ci-joint. Fichier $BiasSensor.m .

Implémenter la méthode sensorStates

Pour modéliser le biais, la méthode sensorStates doit renvoyer un état, Bias, en tant que structure. Lorsque vous ajoutez un objet BiasSensor à un objet filtre insEKF , le filtre ajoute le composant de biais au vecteur d'état du filtre.

Implémenter la méthode measurement

La mesure est la composante de vitesse de l'état du filtre, y compris le biais. Par conséquent, renvoyez la somme de la composante de vitesse du filtre et du biais.

Implémenter la méthode measurementJacobian

La méthode measurementJacobian renvoie la dérivée partielle de la méthode measurement par rapport au vecteur d'état du filtre en tant que structure. Toutes les dérivées partielles sont 0, à l'exception des dérivées partielles de la mesure par rapport aux composantes de vitesse et d'état de biais.

Implémenter la méthode stateTransition

La méthode stateTransiton renvoie la dérivée de l'état du capteur défini dans la méthode sensorStates . Supposons que la dérivée du biais soit affectée par un bruit blanc avec un écart type de 0.01. Renvoie la dérivée sous forme de structure. Notez que cela montre uniquement comment configurer la méthode et ne correspond à aucune application pratique.

Implémenter la méthode stateTransitionJacobian

Puisque la fonction stateTransiton ne dépend pas de l'état du filtre, la matrice jacobienne est 0.

Créer et ajouter un objet hérité

Créez un objet BiasSensor .

biSensor = BiasSensor
biSensor = 
  BiasSensor with no properties.

Créez un objet insEKF avec l'objet biSensor .

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

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

L'état du filtre contient le composant de polarisation.

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

Afficher la classe BiasSensor personnalisée

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 dBias = stateTransition(~,~,dt,~)
            % Assume the derivative of the bias is affected by a zero-mean 
            % white noise with a standard deviation of 0.01. 
            noise = 0.01*randn*dt;
            dBias = struct('Bias',noise);
        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

Arguments d'entrée

réduire tout

Filtre INS, spécifié comme objet insEKF .

Options pour le filtre INS, spécifié comme objet insOptions .

Arguments de sortie

réduire tout

Structure étatique, restituée comme structure. Les noms de champs de la structure sont les noms des états que vous souhaitez estimer. Le filtre utilise la valeur de chaque champ comme valeur par défaut du composant d'état correspondant et utilise la taille de la valeur comme taille du composant d'état correspondant.

Conseil

Vous pouvez utiliser la fonction objet stateparts de l'objet filtre insEKF pour accéder aux états enregistrés dans le filtre.

Historique des versions

Introduit dans R2022a