Contenu principal

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

tune

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

Depuis R2022a

Description

tunedMeasureNoise = tune(filter,measureNoise,sensorData,groundTruth) ajuste la propriété AdditiveProcessNoise de l'objet filtre insEKF filter et le bruit de mesure, pour réduire l'erreur d'estimation de l'état quadratique moyen (RMS) 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.

tunedMeasureNoise = tune(___,config) spécifie la configuration de réglage à l'aide d'un objet tunerconfig config, en plus de tous les arguments d'entrée de la syntaxe précédente.

exemple

Exemples

réduire tout

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

load("accelGyroINSEKFData.mat");

Créez un objet filtre insEKF . Spécifiez la partie orientation de l’état dans le filtre en utilisant l’orientation initiale des données de mesure. Spécifiez les éléments diagonaux de la matrice de covariance d'erreur d'estimation d'état correspondant à l'état d'orientation comme 0.01.

filt = insEKF;
stateparts(filt,"Orientation",compact(initOrient));
statecovparts(filt,"Orientation",1e-2);

Obtenez une structure de bruit de mesure représentative et utilisez-la pour estimer les états avant le réglage.

mnoise = tunernoise(filt);
untunedEst = estimateStates(filt,sensorData,mnoise);

Réinitialisez le filtre, configurez un objet tunerconfig et ajustez le filtre.

stateparts(filt,"Orientation",compact(initOrient));
statecovparts(filt,"Orientation",1e-2);
cfg = tunerconfig(filt,MaxIterations=10,ObjectiveLimit=1e-4);
tunedmn = tune(filt,mnoise,sensorData,groundTruth,cfg);
    Iteration    Parameter                    Metric
    _________    _________                    ______
    1            AdditiveProcessNoise(1)      0.3787
    1            AdditiveProcessNoise(15)     0.3761
    1            AdditiveProcessNoise(29)     0.3695
    1            AdditiveProcessNoise(43)     0.3655
    1            AdditiveProcessNoise(57)     0.3533
    1            AdditiveProcessNoise(71)     0.3446
    1            AdditiveProcessNoise(85)     0.3431
    1            AdditiveProcessNoise(99)     0.3428
    1            AdditiveProcessNoise(113)    0.3427
    1            AdditiveProcessNoise(127)    0.3426
    1            AdditiveProcessNoise(141)    0.3298
    1            AdditiveProcessNoise(155)    0.3206
    1            AdditiveProcessNoise(169)    0.3200
    1            AccelerometerNoise           0.3199
    1            GyroscopeNoise               0.3198
    2            AdditiveProcessNoise(1)      0.3126
    2            AdditiveProcessNoise(15)     0.3098
    2            AdditiveProcessNoise(29)     0.3018
    2            AdditiveProcessNoise(43)     0.2988
    2            AdditiveProcessNoise(57)     0.2851
    2            AdditiveProcessNoise(71)     0.2784
    2            AdditiveProcessNoise(85)     0.2760
    2            AdditiveProcessNoise(99)     0.2744
    2            AdditiveProcessNoise(113)    0.2744
    2            AdditiveProcessNoise(127)    0.2743
    2            AdditiveProcessNoise(141)    0.2602
    2            AdditiveProcessNoise(155)    0.2537
    2            AdditiveProcessNoise(169)    0.2527
    2            AccelerometerNoise           0.2524
    2            GyroscopeNoise               0.2524
    3            AdditiveProcessNoise(1)      0.2476
    3            AdditiveProcessNoise(15)     0.2432
    3            AdditiveProcessNoise(29)     0.2397
    3            AdditiveProcessNoise(43)     0.2381
    3            AdditiveProcessNoise(57)     0.2255
    3            AdditiveProcessNoise(71)     0.2226
    3            AdditiveProcessNoise(85)     0.2221
    3            AdditiveProcessNoise(99)     0.2202
    3            AdditiveProcessNoise(113)    0.2201
    3            AdditiveProcessNoise(127)    0.2201
    3            AdditiveProcessNoise(141)    0.2090
    3            AdditiveProcessNoise(155)    0.2070
    3            AdditiveProcessNoise(169)    0.2058
    3            AccelerometerNoise           0.2052
    3            GyroscopeNoise               0.2052
    4            AdditiveProcessNoise(1)      0.2051
    4            AdditiveProcessNoise(15)     0.2027
    4            AdditiveProcessNoise(29)     0.2019
    4            AdditiveProcessNoise(43)     0.2000
    4            AdditiveProcessNoise(57)     0.1909
    4            AdditiveProcessNoise(71)     0.1897
    4            AdditiveProcessNoise(85)     0.1882
    4            AdditiveProcessNoise(99)     0.1871
    4            AdditiveProcessNoise(113)    0.1870
    4            AdditiveProcessNoise(127)    0.1870
    4            AdditiveProcessNoise(141)    0.1791
    4            AdditiveProcessNoise(155)    0.1783
    4            AdditiveProcessNoise(169)    0.1751
    4            AccelerometerNoise           0.1748
    4            GyroscopeNoise               0.1747
    5            AdditiveProcessNoise(1)      0.1742
    5            AdditiveProcessNoise(15)     0.1732
    5            AdditiveProcessNoise(29)     0.1712
    5            AdditiveProcessNoise(43)     0.1712
    5            AdditiveProcessNoise(57)     0.1626
    5            AdditiveProcessNoise(71)     0.1615
    5            AdditiveProcessNoise(85)     0.1598
    5            AdditiveProcessNoise(99)     0.1590
    5            AdditiveProcessNoise(113)    0.1589
    5            AdditiveProcessNoise(127)    0.1589
    5            AdditiveProcessNoise(141)    0.1517
    5            AdditiveProcessNoise(155)    0.1508
    5            AdditiveProcessNoise(169)    0.1476
    5            AccelerometerNoise           0.1473
    5            GyroscopeNoise               0.1470
    6            AdditiveProcessNoise(1)      0.1470
    6            AdditiveProcessNoise(15)     0.1470
    6            AdditiveProcessNoise(29)     0.1463
    6            AdditiveProcessNoise(43)     0.1462
    6            AdditiveProcessNoise(57)     0.1367
    6            AdditiveProcessNoise(71)     0.1360
    6            AdditiveProcessNoise(85)     0.1360
    6            AdditiveProcessNoise(99)     0.1350
    6            AdditiveProcessNoise(113)    0.1350
    6            AdditiveProcessNoise(127)    0.1350
    6            AdditiveProcessNoise(141)    0.1289
    6            AdditiveProcessNoise(155)    0.1288
    6            AdditiveProcessNoise(169)    0.1262
    6            AccelerometerNoise           0.1253
    6            GyroscopeNoise               0.1246
    7            AdditiveProcessNoise(1)      0.1246
    7            AdditiveProcessNoise(15)     0.1244
    7            AdditiveProcessNoise(29)     0.1205
    7            AdditiveProcessNoise(43)     0.1203
    7            AdditiveProcessNoise(57)     0.1125
    7            AdditiveProcessNoise(71)     0.1122
    7            AdditiveProcessNoise(85)     0.1117
    7            AdditiveProcessNoise(99)     0.1106
    7            AdditiveProcessNoise(113)    0.1104
    7            AdditiveProcessNoise(127)    0.1104
    7            AdditiveProcessNoise(141)    0.1058
    7            AdditiveProcessNoise(155)    0.1052
    7            AdditiveProcessNoise(169)    0.1035
    7            AccelerometerNoise           0.1024
    7            GyroscopeNoise               0.1014
    8            AdditiveProcessNoise(1)      0.1014
    8            AdditiveProcessNoise(15)     0.1012
    8            AdditiveProcessNoise(29)     0.1012
    8            AdditiveProcessNoise(43)     0.1005
    8            AdditiveProcessNoise(57)     0.0948
    8            AdditiveProcessNoise(71)     0.0948
    8            AdditiveProcessNoise(85)     0.0938
    8            AdditiveProcessNoise(99)     0.0934
    8            AdditiveProcessNoise(113)    0.0931
    8            AdditiveProcessNoise(127)    0.0931
    8            AdditiveProcessNoise(141)    0.0896
    8            AdditiveProcessNoise(155)    0.0889
    8            AdditiveProcessNoise(169)    0.0867
    8            AccelerometerNoise           0.0859
    8            GyroscopeNoise               0.0851
    9            AdditiveProcessNoise(1)      0.0851
    9            AdditiveProcessNoise(15)     0.0850
    9            AdditiveProcessNoise(29)     0.0824
    9            AdditiveProcessNoise(43)     0.0819
    9            AdditiveProcessNoise(57)     0.0771
    9            AdditiveProcessNoise(71)     0.0771
    9            AdditiveProcessNoise(85)     0.0762
    9            AdditiveProcessNoise(99)     0.0759
    9            AdditiveProcessNoise(113)    0.0754
    9            AdditiveProcessNoise(127)    0.0754
    9            AdditiveProcessNoise(141)    0.0734
    9            AdditiveProcessNoise(155)    0.0724
    9            AdditiveProcessNoise(169)    0.0702
    9            AccelerometerNoise           0.0697
    9            GyroscopeNoise               0.0689
    10           AdditiveProcessNoise(1)      0.0689
    10           AdditiveProcessNoise(15)     0.0686
    10           AdditiveProcessNoise(29)     0.0658
    10           AdditiveProcessNoise(43)     0.0655
    10           AdditiveProcessNoise(57)     0.0622
    10           AdditiveProcessNoise(71)     0.0620
    10           AdditiveProcessNoise(85)     0.0616
    10           AdditiveProcessNoise(99)     0.0615
    10           AdditiveProcessNoise(113)    0.0607
    10           AdditiveProcessNoise(127)    0.0606
    10           AdditiveProcessNoise(141)    0.0590
    10           AdditiveProcessNoise(155)    0.0578
    10           AdditiveProcessNoise(169)    0.0565
    10           AccelerometerNoise           0.0562
    10           GyroscopeNoise               0.0557

Estimez à nouveau les états, cette fois en utilisant le filtre optimisé.

tunedEst = estimateStates(filt,sensorData,tunedmn);

Comparez les estimations ajustées et non ajustées avec les données de vérité terrain.

times = groundTruth.Properties.RowTimes;
duntuned = rad2deg(dist(untunedEst.Orientation,groundTruth.Orientation));
dtuned = rad2deg(dist(tunedEst.Orientation,groundTruth.Orientation));
plot(times,duntuned,times,dtuned);
xlabel("Time (sec)")
ylabel("Error (deg)")
legend("Untuned","Tuned")
title("Filter Orientation Error")

Figure contains an axes object. The axes object with title Filter Orientation Error, xlabel Time (sec), ylabel Error (deg) contains 2 objects of type line. These objects represent Untuned, Tuned.

Imprimez l'erreur quadratique moyenne (RMS) des filtres non réglés et réglés.

untunedRMSError = sqrt(mean(duntuned.^2));
tunedRMSError = sqrt(mean(dtuned.^2));
fprintf("Untuned RMS error: %.2f degrees\n", ...
    untunedRMSError);
Untuned RMS error: 39.47 degrees
fprintf("Tuned RMS error: %.2f degrees\n", ...
    tunedRMSError);
Tuned RMS error: 6.39 degrees

Arguments d'entrée

réduire tout

Filtre INS, spécifié comme objet insEKF .

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 le bruit de mesure pour les modèles de capteurs spécifiés dans la propriété Sensors du filtre INS. Par exemple, si l'objet filtre insEKF contient uniquement un objet insAccelerometer et un objet insGyroscope , vous devez spécifier la structure comme ceci :

Nom de domaineDescription
AccelerometerNoiseVariance du bruit de l'accéléromètre, spécifiée sous forme de scalaire en (m2/s).
GyroscopeNoiseVariance du bruit du gyroscope, spécifiée sous forme de scalaire en (rad/s) 2.

Conseil

Utilisez la fonction tunernoise pour obtenir une structure représentative de la structure measureNoise . Par exemple:

filter = insEKF;
mNoise = tunerNoise(filter)

Données du capteur, spécifiées sous la forme timetable. Chaque nom de variable (sous forme de colonne) dans la table horaire doit correspondre à l'un des noms de capteurs spécifiés dans la propriété SensorNames du filter. Chaque entrée du tableau correspond à la mesure du capteur au temps de ligne correspondant.

Si un capteur ne produit pas de mesures au moment de la ligne, 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 comme timetable. Dans chaque ligne, le tableau contient les données de vérité pour la durée de la ligne. Chaque nom de variable (sous forme de colonne) dans le tableau doit être l'un des noms d'état de filtre que vous pouvez obtenir à l'aide de la fonction objet stateinfo .

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 les mêmes temps de ligne.

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 les mêmes champs que la structure spécifiée dans l'entrée measureNoise .

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 R2022a