Main Content

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

positioning.INSSensorModel Classe

Namespace : positioning

Classe de base pour définir les modèles de capteurs utilisés avec insEKF

Depuis R2022a

Description

La classe définit la classe de base pour les modèles de capteurs utilisés avec les filtres INS.positioning.INSSensorModel Dérivez de cette classe pour définir votre propre modèle de capteur.

Pour définir un nouveau capteur :

  • Héritez de cette classe et implémentez au moins la méthode measurement .

  • En option, si vous souhaitez une simulation plus fidèle, vous pouvez implémenter la méthode measurementJacobian qui renvoie le jacobien de la fonction de mesure. Si vous n'implémentez pas cette méthode, l'objet calcule numériquement un jacobien avec une précision moindre et un coût de calcul plus élevé.

Si la définition du modèle de capteur nécessite l'utilisation de l'état suivi, vous devez en outre :

  • Implémentez la méthode sensorStates pour définir l'état suivi.

  • En option, vous pouvez implémenter la méthode stateTransition si l'état n'est pas constant dans le temps.

  • En option, vous pouvez implémenter la méthode stateTransitionJacobian (qui renvoie le jacobien de la fonction de transition d'état) pour une simulation plus fidèle. Si vous n'implémentez pas cette méthode, l'objet calcule numériquement le jacobien avec une précision moindre et un coût de calcul plus élevé.

À titre d'exemple d'implémentation de cette classe d'interface, consultez les détails d'implémentation de insAccelerometer en tapant ceci dans la fenêtre de commande :

edit insGyroscope

La classe positioning.INSSensorModel est une classe handle .

Attributs de classe

Abstrait
vrai

Pour plus d'informations sur les attributs de classe, voir Class Attributes.

Création

Description

exemple

sensor = positioning.INSSensorModel() crée un objet modèle de capteur INS. Ce constructeur ne peut être appelé qu'à partir d'une classe dérivée.

Méthodes

développer tout

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

Historique des versions

Introduit dans R2022a

Voir aussi

|