Contenu principal

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

stateTransition

Transition d'état du modèle de mouvement

Depuis R2022a

Description

statedot = stateTransition(model,filter,dt,varargin) renvoie les dérivées des états du modèle de mouvement utilisé avec le filtre INS.

exemple

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

Arguments d'entrée

réduire tout

Modèle de mouvement utilisé avec un filtre INS, spécifié comme objet hérité de la classe abstraite positioning.INSMotionModel .

Filtre INS, spécifié comme objet insEKF .

Pas de temps de filtre, spécifié sous forme de scalaire positif.

Types de données : single | double

Entrées supplémentaires qui sont transmises en tant qu'entrées varargin de la fonction d'objet predict de l'objet insEKF .

Arguments de sortie

réduire tout

Dérivés des états, restitués sous forme de structure. Les noms de champs doivent être exactement les mêmes que ceux de la structure renvoyée par la méthode modelstates de model. Les valeurs de champ sont les dérivées temporelles correspondantes des états du capteur.

Historique des versions

Introduit dans R2022a