Main Content

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

positioning.INSMotionModel Classe

Namespace : positioning

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

Depuis R2022a

Description

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

Pour définir un nouveau modèle de mouvement :

  • Héritez de cette classe et implémentez au moins deux méthodes : modelstates et stateTransition.

  • En option, si vous souhaitez une simulation plus fidèle, vous pouvez implémenter une méthode stateTransitionJacobian qui renvoie le jacobien de la fonction de transition d'état. 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 insMotionOrientation en tapant ceci dans la fenêtre de commande :

edit insMotionOrientation

La classe positioning.INSMotionModel 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.INSMotionModel() 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 mouvement 1D à vitesse constante utilisé avec un objet insEKF . Personnalisez le modèle de mouvement en héritant de la classe d'interface positioning.INSMotionModel et implémentez les méthodes modelstates et stateTranistion . Vous pouvez également éventuellement implémenter la méthode stateTransitionJacobian . Ces sections donnent un aperçu de la façon dont la classe ConstantVelocityMotion implémente les méthodes positioning.INSMotionModel , mais pour plus de détails sur leur implémentation, voir le ConstantVelocityMotion.m joint. fichier $ .

Implémenter la méthode modelstates

Pour modéliser un mouvement 1D à vitesse constante, vous devez renvoyer uniquement la position 1D et l’état de vitesse sous forme de structure. Lorsque vous ajoutez un objet ConstantVelocityMotion à un objet filtre insEKF , le filtre ajoute le Position et le Velocity composants au vecteur d'état du filtre.

Implémenter la méthode stateTransition

La méthode stateTransition renvoie les dérivées de l'état défini par le modèle de mouvement comme une structure. Le dérivé du Position est le Velocity, et le dérivé du Velocity est 0.

Implémenter la méthode stateTransitionJacobian

La méthode stateTransitionJacobian renvoie les dérivées partielles de la méthode stateTransition , par rapport au vecteur d'état du filtre, sous forme de structure. Toutes les dérivées partielles sont 0, sauf la dérivée partielle de la dérivée du composant Position , qui est la Velocity, par rapport à la Velocity L'état $ est 1.

Créer et ajouter un objet hérité

Créez un objet ConstantVelocityMotion .

cvModel = ConstantVelocityMotion
cvModel = 
  ConstantVelocityMotion with no properties.

Créez un objet insEKF avec l'objet cvModel créé.

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'

L'état du filtre contient les composants Position et Velocity .

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

Afficher la classe ConstantVelocityMotion personnalisée

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

Historique des versions

Introduit dans R2022a

Voir aussi

|