Main Content

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

tune

Ajustez les paramètres ahrs10filter pour réduire l'erreur d'estimation

Depuis R2021a

Description

tunedMeasureNoise = tune(filter,measureNoise,sensorData,groundTruth) ajuste les propriétés de l'objet filtre ahrs10filter , filter et les bruits de mesure pour réduire la moyenne quadratique (RMS) erreur d'estimation d'état entre les données du capteur fusionnées et la vérité terrain. La fonction renvoie également le bruit de mesure réglé, tunedMeasureNoise. La fonction utilise les valeurs des propriétés du filtre et le bruit de mesure fourni dans la structure measureNoise comme estimation initiale pour l'algorithme d'optimisation.

exemple

tunedMeasureNoise = tune(___,config) spécifie la configuration de réglage basée sur un objet tunerconfig , config.

Exemples

réduire tout

Chargez les données de capteur enregistrées et les données de vérité terrain.

load('ahrs10filterTuneData.mat');

Créez des tableaux pour les données des capteurs et les données de vérité.

sensorData = table(Accelerometer,Gyroscope,...
    Magnetometer,Altimeter);
groundTruth = table(Orientation, Altitude);

Créez un objet filtre ahrs10filter .

filter = ahrs10filter('State', initialState, ...
    'StateCovariance', initialStateCovariance);      

Créez un objet de configuration de tuner pour le filtre. Définissez le nombre maximum d'itérations sur dix et définissez la limite d'objectif sur 0,001.

cfg = tunerconfig('ahrs10filter','MaxIterations',10,...
          'ObjectiveLimit',1e-3);

Utilisez la fonction de bruit du tuner pour obtenir un ensemble de bruits de capteur initiaux utilisés dans le filtre.

measNoise = tunernoise('ahrs10filter')
measNoise = struct with fields:
    MagnetometerNoise: 1
       AltimeterNoise: 1

Ajustez le filtre et obtenez les paramètres réglés.

tunedNoise = tune(filter, measNoise, sensorData, ...
    groundTruth, cfg);
    Iteration    Parameter                 Metric
    _________    _________                 ______
    1            AccelerometerNoise        0.0526
    1            GyroscopeNoise            0.0526
    1            MagnetometerNoise         0.0523
    1            AltimeterNoise            0.0515
    1            AccelerometerBiasNoise    0.0510
    1            GyroscopeBiasNoise        0.0510
    1            GeomagneticVectorNoise    0.0510
    1            MagnetometerBiasNoise     0.0508
    2            AccelerometerNoise        0.0508
    2            GyroscopeNoise            0.0508
    2            MagnetometerNoise         0.0504
    2            AltimeterNoise            0.0494
    2            AccelerometerBiasNoise    0.0490
    2            GyroscopeBiasNoise        0.0490
    2            GeomagneticVectorNoise    0.0490
    2            MagnetometerBiasNoise     0.0487
    3            AccelerometerNoise        0.0487
    3            GyroscopeNoise            0.0487
    3            MagnetometerNoise         0.0482
    3            AltimeterNoise            0.0472
    3            AccelerometerBiasNoise    0.0467
    3            GyroscopeBiasNoise        0.0467
    3            GeomagneticVectorNoise    0.0467
    3            MagnetometerBiasNoise     0.0463
    4            AccelerometerNoise        0.0463
    4            GyroscopeNoise            0.0463
    4            MagnetometerNoise         0.0456
    4            AltimeterNoise            0.0446
    4            AccelerometerBiasNoise    0.0442
    4            GyroscopeBiasNoise        0.0442
    4            GeomagneticVectorNoise    0.0442
    4            MagnetometerBiasNoise     0.0437
    5            AccelerometerNoise        0.0437
    5            GyroscopeNoise            0.0437
    5            MagnetometerNoise         0.0428
    5            AltimeterNoise            0.0417
    5            AccelerometerBiasNoise    0.0413
    5            GyroscopeBiasNoise        0.0413
    5            GeomagneticVectorNoise    0.0413
    5            MagnetometerBiasNoise     0.0408
    6            AccelerometerNoise        0.0408
    6            GyroscopeNoise            0.0408
    6            MagnetometerNoise         0.0397
    6            AltimeterNoise            0.0385
    6            AccelerometerBiasNoise    0.0381
    6            GyroscopeBiasNoise        0.0381
    6            GeomagneticVectorNoise    0.0381
    6            MagnetometerBiasNoise     0.0375
    7            AccelerometerNoise        0.0375
    7            GyroscopeNoise            0.0375
    7            MagnetometerNoise         0.0363
    7            AltimeterNoise            0.0351
    7            AccelerometerBiasNoise    0.0347
    7            GyroscopeBiasNoise        0.0347
    7            GeomagneticVectorNoise    0.0347
    7            MagnetometerBiasNoise     0.0342
    8            AccelerometerNoise        0.0342
    8            GyroscopeNoise            0.0342
    8            MagnetometerNoise         0.0331
    8            AltimeterNoise            0.0319
    8            AccelerometerBiasNoise    0.0316
    8            GyroscopeBiasNoise        0.0316
    8            GeomagneticVectorNoise    0.0316
    8            MagnetometerBiasNoise     0.0313
    9            AccelerometerNoise        0.0313
    9            GyroscopeNoise            0.0313
    9            MagnetometerNoise         0.0313
    9            AltimeterNoise            0.0301
    9            AccelerometerBiasNoise    0.0298
    9            GyroscopeBiasNoise        0.0298
    9            GeomagneticVectorNoise    0.0298
    9            MagnetometerBiasNoise     0.0296
    10           AccelerometerNoise        0.0296
    10           GyroscopeNoise            0.0296
    10           MagnetometerNoise         0.0296
    10           AltimeterNoise            0.0285
    10           AccelerometerBiasNoise    0.0283
    10           GyroscopeBiasNoise        0.0283
    10           GeomagneticVectorNoise    0.0283
    10           MagnetometerBiasNoise     0.0282

Fusionnez les données du capteur à l’aide du filtre optimisé.

N = size(sensorData,1);
qEstTuned = quaternion.zeros(N,1);
altEstTuned = zeros(N,1);
for ii=1:N
    predict(filter,Accelerometer(ii,:),Gyroscope(ii,:));
    if all(~isnan(Magnetometer(ii,1)))
        fusemag(filter, Magnetometer(ii,:),tunedNoise.MagnetometerNoise);
    end
    if ~isnan(Altimeter(ii))
        fusealtimeter(filter, Altimeter(ii),tunedNoise.AltimeterNoise);
    end
    [altEstTuned(ii), qEstTuned(ii)] = pose(filter);
end

Calculez les erreurs RMS.

orientationErrorTuned = rad2deg(dist(qEstTuned, Orientation));
rmsOrientationErrorTuned = sqrt(mean(orientationErrorTuned.^2))
rmsOrientationErrorTuned = 2.2899
positionErrorTuned = altEstTuned - Altitude;
rmsPositionErrorTuned = sqrt(mean( positionErrorTuned.^2))
rmsPositionErrorTuned = 0.0199

Visualisez les résultats.

figure;
t = (0:N-1)./ filter.IMUSampleRate;
subplot(2,1,1)
plot(t, positionErrorTuned, 'b');
title("Tuned ahrs10filter" + newline + ...
    "Altitude Error")
xlabel('Time (s)');
ylabel('Position Error (meters)')
subplot(2,1,2)
plot(t, orientationErrorTuned, 'b');
title("Orientation Error")
xlabel('Time (s)');
ylabel('Orientation Error (degrees)');

Figure contains 2 axes objects. Axes object 1 with title Tuned ahrs10filter Altitude Error, xlabel Time (s), ylabel Position Error (meters) contains an object of type line. Axes object 2 with title Orientation Error, xlabel Time (s), ylabel Orientation Error (degrees) contains an object of type line.

Arguments d'entrée

réduire tout

Objet filtre, spécifié comme objet ahrs10filter .

Bruit de mesure, spécifié comme structure. La fonction utilise l'entrée de bruit de mesure comme estimation initiale pour régler le bruit de mesure. La structure doit contenir ces champs :

Nom de domaineDescription
MagnetometerNoiseVariance du bruit du magnétomètre, spécifiée sous forme de scalaire en (μT) 2
AltimeterNoiseVariance du bruit de l'altimètre, spécifiée sous forme de scalaire en m2

Données du capteur, spécifiées sous la forme table. Dans chaque ligne, les données du capteur sont spécifiées comme suit :

  • Accelerometer — Données de l'accéléromètre, spécifiées sous la forme d'un vecteur 1 sur 3 de scalaires en m2/s.

  • Gyroscope— Données du gyroscope, spécifiées sous la forme d'un vecteur 1 sur 3 de scalaires en rad/s.

  • Magnetometer — Données du magnétomètre, spécifiées comme un vecteur 1 sur 3 de scalaires en μT.

  • Altimeter — Données altimétriques, spécifiées sous forme de scalaire en mètres.

Si le magnétomètre ne produit pas de mesures, spécifiez l'entrée correspondante comme NaN. Si vous définissez la propriété Cost de l'entrée de configuration du tuner, config, sur Custom, vous pouvez utiliser d'autres types de données pour le sensorData entrée en fonction de votre choix.

Données de vérité terrain, spécifiées sous la forme table. Dans chaque ligne, le tableau peut éventuellement contenir l'une de ces variables :

  • Orientation — Orientation du cadre de navigation vers le cadre de carrosserie, spécifiée sous la forme d'un quaternion ou d'une matrice de rotation 3 x 3.

  • Altitude — Altitude, spécifiée sous forme de scalaire en mètres.

  • VertialVelocity — Vitesse dans la direction verticale, spécifiée sous forme scalaire en m/s.

  • DeltaAngleBias — Biais d'angle delta, spécifié comme un vecteur 1 sur 3 de scalaires en radians.

  • DeltaVelocityBias — Biais de vitesse delta, spécifié comme un vecteur 1 sur 3 de scalaires en m/s.

  • GeomagneticFieldVector — Vecteur de champ géomagnétique dans le cadre de navigation, spécifié comme un vecteur 1 par 3 de scalaires.

  • MagnetometerBias — Biais du magnétomètre dans le cadre du corps, spécifié comme un vecteur 1 sur 3 de scalaires en μT.

La fonction traite chaque ligne des tables sensorData et groundTruth séquentiellement pour calculer l'estimation de l'état et l'erreur RMS à partir de la vérité terrain. Les variables d'état non présentes dans l'entrée groundTruth sont ignorées pour la comparaison. Les tables sensorData et groundTruth doivent avoir le même nombre de lignes.

Si vous définissez la propriété Cost de l'entrée de configuration du tuner, config, sur Custom, vous pouvez utiliser d'autres types de données pour le groundTruth entrée en fonction de votre choix.

Configuration du tuner, spécifiée comme objet tunerconfig .

Arguments de sortie

réduire tout

Bruit de mesure réglé, renvoyé sous forme de structure. La structure contient ces champs.

Nom de domaineDescription
MagnetometerNoiseVariance du bruit du magnétomètre, spécifiée sous forme de scalaire en (μT) 2
AltimeterNoiseVariance du bruit de l'altimètre, spécifiée sous forme de scalaire en m2

Références

[1] Abbeel, P., Coates, A., Montemerlo, M., Ng, A.Y. and Thrun, S. Discriminative Training of Kalman Filters. In Robotics: Science and systems, Vol. 2, pp. 1, 2005.

Historique des versions

Introduit dans R2021a