tune
Ajustez les paramètres insfilterAsync
pour réduire l'erreur d'estimation
Depuis R2020b
Syntaxe
Description
ajuste les propriétés de l'objet filtre tunedMeasureNoise
= tune(filter
,measureNoise
,sensorData
,groundTruth
)insfilterAsync
, 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.
spécifie la configuration de réglage basée sur un objet tunedMeasureNoise
= tune(___,config
)tunerconfig
, config
.
Exemples
Ajustez insfilterAsync
pour optimiser l'estimation de la pose
Chargez les données de capteur enregistrées et les données de vérité terrain.
load('insfilterAsyncTuneData.mat');
Créez des calendriers pour les données des capteurs et les données de vérité.
sensorData = timetable(Accelerometer, Gyroscope, ... Magnetometer, GPSPosition, GPSVelocity, 'SampleRate', 100); groundTruth = timetable(Orientation, Position, ... 'SampleRate', 100);
Créez un objet filtre insfilterAsync
qui possède quelques propriétés de bruit.
filter = insfilterAsync('State', initialState, ... 'StateCovariance', initialStateCovariance, ... 'AccelerometerBiasNoise', 1e-7, ... 'GyroscopeBiasNoise', 1e-7, ... 'MagnetometerBiasNoise', 1e-7, ... 'GeomagneticVectorNoise', 1e-7);
Créez un objet de configuration de tuner pour le filtre. Définissez le nombre maximum d'itérations sur deux. Définissez également les paramètres réglables en tant que propriétés non spécifiées.
config = tunerconfig('insfilterAsync','MaxIterations',8); config.TunableParameters = setdiff(config.TunableParameters, ... {'GeomagneticVectorNoise', 'AccelerometerBiasNoise', ... 'GyroscopeBiasNoise', 'MagnetometerBiasNoise'}); config.TunableParameters
ans = 1×10 string
"AccelerationNoise" "AccelerometerNoise" "AngularVelocityNoise" "GPSPositionNoise" "GPSVelocityNoise" "GyroscopeNoise" "MagnetometerNoise" "PositionNoise" "QuaternionNoise" "VelocityNoise"
Utilisez la fonction de bruit du tuner pour obtenir un ensemble de bruits de capteur initiaux utilisés dans le filtre.
measNoise = tunernoise('insfilterAsync')
measNoise = struct with fields:
AccelerometerNoise: 1
GyroscopeNoise: 1
MagnetometerNoise: 1
GPSPositionNoise: 1
GPSVelocityNoise: 1
Ajustez le filtre et obtenez les paramètres réglés.
tunedParams = tune(filter,measNoise,sensorData,groundTruth,config);
Iteration Parameter Metric _________ _________ ______ 1 AccelerationNoise 2.1345 1 AccelerometerNoise 2.1264 1 AngularVelocityNoise 1.9659 1 GPSPositionNoise 1.9341 1 GPSVelocityNoise 1.8420 1 GyroscopeNoise 1.7589 1 MagnetometerNoise 1.7362 1 PositionNoise 1.7362 1 QuaternionNoise 1.7218 1 VelocityNoise 1.7218 2 AccelerationNoise 1.7190 2 AccelerometerNoise 1.7170 2 AngularVelocityNoise 1.6045 2 GPSPositionNoise 1.5948 2 GPSVelocityNoise 1.5323 2 GyroscopeNoise 1.4803 2 MagnetometerNoise 1.4703 2 PositionNoise 1.4703 2 QuaternionNoise 1.4632 2 VelocityNoise 1.4632 3 AccelerationNoise 1.4596 3 AccelerometerNoise 1.4548 3 AngularVelocityNoise 1.3923 3 GPSPositionNoise 1.3810 3 GPSVelocityNoise 1.3322 3 GyroscopeNoise 1.2998 3 MagnetometerNoise 1.2976 3 PositionNoise 1.2976 3 QuaternionNoise 1.2943 3 VelocityNoise 1.2943 4 AccelerationNoise 1.2906 4 AccelerometerNoise 1.2836 4 AngularVelocityNoise 1.2491 4 GPSPositionNoise 1.2258 4 GPSVelocityNoise 1.1880 4 GyroscopeNoise 1.1701 4 MagnetometerNoise 1.1698 4 PositionNoise 1.1698 4 QuaternionNoise 1.1688 4 VelocityNoise 1.1688 5 AccelerationNoise 1.1650 5 AccelerometerNoise 1.1569 5 AngularVelocityNoise 1.1454 5 GPSPositionNoise 1.1100 5 GPSVelocityNoise 1.0778 5 GyroscopeNoise 1.0709 5 MagnetometerNoise 1.0675 5 PositionNoise 1.0675 5 QuaternionNoise 1.0669 5 VelocityNoise 1.0669 6 AccelerationNoise 1.0634 6 AccelerometerNoise 1.0549 6 AngularVelocityNoise 1.0549 6 GPSPositionNoise 1.0180 6 GPSVelocityNoise 0.9866 6 GyroscopeNoise 0.9810 6 MagnetometerNoise 0.9775 6 PositionNoise 0.9775 6 QuaternionNoise 0.9768 6 VelocityNoise 0.9768 7 AccelerationNoise 0.9735 7 AccelerometerNoise 0.9652 7 AngularVelocityNoise 0.9652 7 GPSPositionNoise 0.9283 7 GPSVelocityNoise 0.8997 7 GyroscopeNoise 0.8947 7 MagnetometerNoise 0.8920 7 PositionNoise 0.8920 7 QuaternionNoise 0.8912 7 VelocityNoise 0.8912 8 AccelerationNoise 0.8885 8 AccelerometerNoise 0.8811 8 AngularVelocityNoise 0.8807 8 GPSPositionNoise 0.8479 8 GPSVelocityNoise 0.8238 8 GyroscopeNoise 0.8165 8 MagnetometerNoise 0.8165 8 PositionNoise 0.8165 8 QuaternionNoise 0.8159 8 VelocityNoise 0.8159
Fusionnez les données du capteur à l’aide du filtre optimisé.
dt = seconds(diff(groundTruth.Time)); N = size(sensorData,1); qEst = quaternion.zeros(N,1); posEst = zeros(N,3); % Iterate the filter for prediction and correction using sensor data. for ii=1:N if ii ~= 1 predict(filter, dt(ii-1)); end if all(~isnan(Accelerometer(ii,:))) fuseaccel(filter,Accelerometer(ii,:), ... tunedParams.AccelerometerNoise); end if all(~isnan(Gyroscope(ii,:))) fusegyro(filter, Gyroscope(ii,:), ... tunedParams.GyroscopeNoise); end if all(~isnan(Magnetometer(ii,1))) fusemag(filter, Magnetometer(ii,:), ... tunedParams.MagnetometerNoise); end if all(~isnan(GPSPosition(ii,1))) fusegps(filter, GPSPosition(ii,:), ... tunedParams.GPSPositionNoise, GPSVelocity(ii,:), ... tunedParams.GPSVelocityNoise); end [posEst(ii,:), qEst(ii,:)] = pose(filter); end
Calculez les erreurs RMS.
orientationError = rad2deg(dist(qEst, Orientation)); rmsorientationError = sqrt(mean(orientationError.^2))
rmsorientationError = 2.7801
positionError = sqrt(sum((posEst - Position).^2, 2)); rmspositionError = sqrt(mean( positionError.^2))
rmspositionError = 0.5966
Visualisez les résultats.
figure(); t = (0:N-1)./ groundTruth.Properties.SampleRate; subplot(2,1,1) plot(t, positionError, 'b'); title("Tuned insfilterAsync" + newline + "Euclidean Distance Position Error") xlabel('Time (s)'); ylabel('Position Error (meters)') subplot(2,1,2) plot(t, orientationError, 'b'); title("Orientation Error") xlabel('Time (s)'); ylabel('Orientation Error (degrees)');
Arguments d'entrée
filter
— Filtrer l'objet
Objet infilterAsync
Objet filtre, spécifié comme objet insfilterAsync
.
measureNoise
— Bruit de mesure
structure
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 domaine | Description |
---|---|
AccelerometerNoise | Variance du bruit de l'accéléromètre, spécifiée sous forme de scalaire en (m2/s) |
GyroscopeNoise | Variation du bruit du gyroscope, spécifiée sous forme de scalaire en (rad/s) 2 |
MagnetometerNoise | Variance du bruit du magnétomètre, spécifiée sous forme de scalaire en (μT) 2 |
GPSPositionNoise | Variation du bruit de position GPS, spécifiée sous forme de scalaire en m2 |
GPSVelocityNoise | Variation du bruit de vitesse GPS, spécifiée sous forme de scalaire en (m/s) 2 |
sensorData
— Données du capteur
duration
Données du capteur, spécifiées sous la forme timetable
. Dans chaque ligne, l'heure et les données du capteur sont spécifiées comme suit :
Time
— Heure à laquelle les données sont obtenues, spécifiée sous forme de scalaire en secondes.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.GPSPosition
— Données de position GPS, spécifiées sous la forme d'un vecteur 1 x 3 de latitude en degrés, de longitude en degrés et d'altitude en mètres.GPSVelocity
— Données de vitesse GPS, spécifiées sous la forme d'un vecteur 1 sur 3 de scalaires en m/s.
Si un capteur 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.
groundTruth
— Données de vérité terrain
duration
Données de vérité terrain, spécifiées sous la forme timetable
. 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'unquaternion
ou d'une matrice de rotation 3 x 3.AngularVelocity
— Vitesse angulaire dans le cadre du corps, spécifiée comme un vecteur 1 sur 3 de scalaires en rad/s.Position
— Position dans le cadre de navigation, spécifiée sous la forme d'un vecteur 1 sur 3 de scalaires en mètres.Velocity
— Vitesse dans le cadre de navigation, spécifiée comme un vecteur 1 sur 3 de scalaires en m/s.Acceleration
— Accélération dans le cadre de navigation, spécifiée comme un vecteur 1 sur 3 de scalaires en m2/s.AccelerometerBias
— Biais d'angle delta de l'accéléromètre dans le cadre du corps, spécifié comme un vecteur 1 sur 3 de scalaires en m2/s.GyroscopeBias
— Biais d'angle delta du gyroscope dans le cadre du corps, spécifié comme un vecteur 1 sur 3 de scalaires en rad/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 les mêmes pas de temps.
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.
config
— Configuration du tuner
Objet tunerconfig
Configuration du tuner, spécifiée comme objet tunerconfig
.
Arguments de sortie
tunedMeasureNoise
— Bruit de mesure réglé
structure
Bruit de mesure réglé, renvoyé sous forme de structure. La structure contient ces champs.
Nom de domaine | Description |
---|---|
AccelerometerNoise | Variation du bruit de l'accéléromètre, spécifiée sous forme de scalaire en (m2/s) 2 |
GyroscopeNoise | Variation du bruit du gyroscope, spécifiée sous forme de scalaire en (rad/s) 2 |
MagnetometerNoise | Variance du bruit du magnétomètre, spécifiée sous forme de scalaire en (μT) 2 |
GPSPositionNoise | Variation du bruit de position GPS, spécifiée sous forme de scalaire en m2 |
GPSVelocityNoise | Variation du bruit de vitesse GPS, spécifiée sous forme de scalaire en (m/s) 2 |
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 R2020b
Voir aussi
Commande MATLAB
Vous avez cliqué sur un lien qui correspond à cette commande MATLAB :
Pour exécuter la commande, saisissez-la dans la fenêtre de commande de MATLAB. Les navigateurs web ne supportent pas les commandes MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- 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)