tune
Ajustez les paramètres insEKF pour réduire l'erreur d'estimation
Depuis R2022a
Syntaxe
Description
ajuste la propriété tunedMeasureNoise = tune(filter,measureNoise,sensorData,groundTruth)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.
spécifie la configuration de réglage à l'aide d'un objet tunedMeasureNoise = tune(___,config)tunerconfig config, en plus de tous les arguments d'entrée de la syntaxe précédente.
Exemples
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")

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
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 domaine | Description |
|---|---|
AccelerometerNoise | Variance du bruit de l'accéléromètre, spécifiée sous forme de scalaire en (m2/s). |
GyroscopeNoise | Variance 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
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
Voir aussi
tunerconfig | tunernoise | predict | fuse | residual | correct | stateparts | statecovparts | stateinfo | estimateStates | createTunerCostTemplate | tunerCostFcnParam
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)