stateTransition
Description
Exemples
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.mclassdef 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
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
Arguments de sortie
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
Voir aussi
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Sélectionner un site web
Choisissez un site web pour accéder au contenu traduit dans votre langue (lorsqu'il est disponible) et voir les événements et les offres locales. D’après votre position, nous vous recommandons de sélectionner la région suivante : .
Vous pouvez également sélectionner un site web dans la liste suivante :
Comment optimiser les performances du site
Pour optimiser les performances du site, sélectionnez la région Chine (en chinois ou en anglais). Les sites de MathWorks pour les autres pays ne sont pas optimisés pour les visites provenant de votre région.
Amériques
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)