Main Content

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

complementaryFilter

Estimer l'orientation à l'aide d'un filtre complémentaire

Depuis R2019b

Description

Le complementaryFilter System object™ fusionne les données des capteurs de l'accéléromètre, du gyroscope et du magnétomètre pour estimer l'orientation et la vitesse angulaire de l'appareil.

Pour estimer l'orientation à l'aide de cet objet :

  1. Créez l'objet complementaryFilter et définissez ses propriétés.

  2. Appelez l'objet avec des arguments, comme s'il s'agissait d'une fonction.

Pour en savoir plus sur le fonctionnement des objets système, voir What Are System Objects?

Création

Description

FUSE = complementaryFilter renvoie un complementaryFilter System object, FUSE, pour la fusion de capteurs d'accéléromètre, de gyroscope et de magnétomètre données pour estimer l’orientation et la vitesse angulaire de l’appareil.

FUSE = complementaryFilter('ReferenceFrame',RF) renvoie un complementaryFilter System object qui fusionne les données de l'accéléromètre, du gyroscope et du magnétomètre pour estimer l'orientation de l'appareil par rapport au cadre de référence RF. Spécifiez RF comme 'NED' (Nord-Est-Bas) ou 'ENU' (Est-Nord-Haut). La valeur par défaut est 'NED'.

exemple

FUSE = complementaryFilter(___,Name,Value) définit chaque propriété Name sur le Value spécifié. Les propriétés non spécifiées ont des valeurs par défaut.

Propriétés

développer tout

Sauf indication contraire, les propriétés sont non réglables , ce qui signifie que vous ne pouvez pas modifier leurs valeurs après avoir appelé l'objet. Les objets se verrouillent lorsque vous les appelez et la fonction release les déverrouille.

Si une propriété est ajustable , vous pouvez modifier sa valeur à tout moment.

Pour plus d'informations sur la modification des valeurs des propriétés, voir System Design in MATLAB Using System Objects.

Fréquence d'échantillonnage d'entrée des données du capteur en Hz, spécifiée sous forme de scalaire positif.

Ajustable : No

Types de données : single | double

Gain de l'accéléromètre, spécifié comme un scalaire réel dans la plage [0, 1]. Le gain détermine dans quelle mesure la mesure de l'accéléromètre est fiable par rapport à la mesure du gyroscope pour l'estimation de l'orientation. Cette propriété est réglable.

Types de données : single | double

Gain du magnétomètre, spécifié comme un scalaire réel dans la plage de [0, 1]. Le gain détermine dans quelle mesure la mesure du magnétomètre est fiable par rapport à la mesure du gyroscope pour l'estimation de l'orientation. Cette propriété est réglable.

Types de données : single | double

Activer l'entrée du magnétomètre, spécifiée comme true ou false.

Types de données : logical

Format d'orientation de sortie, spécifié comme 'quaternion' ou 'Rotation matrix'. La taille de la sortie dépend du format d'orientation de la sortie :

  • 'quaternion' –– La sortie est un N-by-1 quaternion.

  • 'Rotation matrix' –– La sortie est une matrice de rotation 3 par 3 par N .

N est le nombre d’échantillons.

Types de données : char | string

Utilisation

Description

exemple

[orientation,angularVelocity] = FUSE(accelReadings,gyroReadings,magReadings) fusionne les données de l'accéléromètre, du gyroscope et du magnétomètre pour calculer l'orientation et la vitesse angulaire. Pour utiliser cette syntaxe, définissez la propriété HasMagnetometer sur true.

[orientation,angularVelocity] = FUSE(accelReadings,gyroReadings) fusionne les données de l'accéléromètre et du gyroscope pour calculer l'orientation et la vitesse angulaire. Pour utiliser cette syntaxe, définissez la propriété HasMagnetometer sur false.

Arguments en entrée

développer tout

Lectures de l'accéléromètre dans le système de coordonnées du corps du capteur en m/s2, spécifié sous la forme d'une matrice N-by-3. N est le nombre d'échantillons, et les trois colonnes de accelReadings représentent le [x y z] mesures. Les lectures de l'accéléromètre sont supposées correspondre à la fréquence d'échantillonnage spécifiée par la propriété SampleRate . Dans le filtre, la constante de gravité g est supposée être 9.81 m/s2.

Types de données : single | double

Lectures du gyroscope dans le système de coordonnées du corps du capteur en rad/s, spécifiées sous la forme d'une matrice N-by-3. N est le nombre d'échantillons, et les trois colonnes de gyroReadings représentent le [x y z] mesures. Les lectures du gyroscope sont supposées correspondre à la fréquence d'échantillonnage spécifiée par la propriété SampleRate .

Types de données : single | double

Lectures du magnétomètre dans le système de coordonnées du corps du capteur en µT, spécifiées sous la forme d'une matrice N-by-3. N est le nombre d'échantillons, et les trois colonnes de magReadings représentent le [x y z] mesures. Les lectures du magnétomètre sont supposées correspondre à la fréquence d'échantillonnage spécifiée par la propriété SampleRate .

Types de données : single | double

Arguments de sortie

développer tout

Orientation qui fait pivoter les quantités du système de coordonnées de navigation local vers le système de coordonnées du corps, renvoyé sous forme de quaternions ou de tableau. La taille et le type de orientation dépendent du fait que la propriété OrienationFormat soit définie sur 'quaternion' ou 'Rotation matrix'.:

  • 'quaternion' –– la sortie est un vecteur N-par 1 de quaternions, où N est le nombre d'échantillons.

  • 'Rotation matrix' –– la sortie est un tableau de matrices de rotation 3 par 3 par N , où N est le nombre d'échantillons.

Types de données : quaternion | single | double

Vitesse angulaire exprimée dans le système de coordonnées du corps du capteur en rad/s, renvoyée sous la forme d'un tableau N-par 3, où N est le nombre d'échantillons.

Types de données : single | double

Fonctions d'objet

Pour utiliser une fonction objet, spécifiez le System object comme premier argument d'entrée. Par exemple, pour libérer les ressources système d'un System object nommé obj, utilisez cette syntaxe :

release(obj)

développer tout

stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object
cloneCreate duplicate System object
isLockedDetermine if System object is in use

Exemples

réduire tout

Chargez le fichier rpy_9axis , qui contient les données enregistrées des capteurs d'accéléromètre, de gyroscope et de magnétomètre à partir d'un appareil oscillant en tangage (autour de l'axe y), puis en lacet (autour de l'axe z), puis roulez (autour de l'axe  x ). Le fichier contient également la fréquence d'échantillonnage de l'enregistrement.

ld = load('rpy_9axis.mat');
accel = ld.sensorData.Acceleration;
gyro = ld.sensorData.AngularVelocity;
mag = ld.sensorData.MagneticField;

Créez un objet filtre complémentaire avec une fréquence d'échantillonnage égale à la fréquence des données.

Fs  = ld.Fs;  % Hz
fuse = complementaryFilter('SampleRate', Fs);

Fusionnez les données de l'accéléromètre, du gyroscope et du magnétomètre à l'aide du filtre.

q = fuse(accel, gyro, mag);

Visualisez les résultats.

plot(eulerd( q, 'ZYX', 'frame'));
title('Orientation Estimate');
legend('Z-rotation', 'Y-rotation', 'X-rotation');
ylabel('Degrees');

Figure contains an axes object. The axes object with title Orientation Estimate, ylabel Degrees contains 3 objects of type line. These objects represent Z-rotation, Y-rotation, X-rotation.

Références

[1] Valenti, R., I. Dryanovski, and J. Xiao. "Keeping a good attitude: A quaternion-based orientation filter for IMUs and MARGs." Sensors. Vol. 15, Number 8, 2015, pp. 19302-19330.

Capacités étendues

Génération de code C/C++
Générez du code C et C++ avec MATLAB® Coder™.

Historique des versions

Introduit dans R2019b

Voir aussi

|