tune
Ajuste los parámetros insEKF para reducir el error de estimación
Desde R2022a
Sintaxis
Descripción
ajusta la propiedad tunedMeasureNoise = tune(filter,measureNoise,sensorData,groundTruth)AdditiveProcessNoise del objeto de filtro insEKF filter y el ruido de medición, para reducir el error de estimación de estado de raíz cuadrada media (RMS) entre los datos del sensor fusionado y la ground-truth. La función también devuelve el ruido de medición sintonizado tunedMeasureNoise. La función utiliza los valores de propiedad en el filtro y el ruido de medición proporcionado en la estructura measureNoise como estimación inicial para el algoritmo de optimización.
especifica la configuración de ajuste utilizando un objeto tunedMeasureNoise = tune(___,config)tunerconfig config, además de todos los argumentos de entrada de la sintaxis anterior.
Ejemplos
Cargue los datos registrados del sensor y los datos ground-truth.
load("accelGyroINSEKFData.mat");Crea un objeto de filtro insEKF. Especifique la parte de orientación del estado en el filtro utilizando la orientación inicial de los datos de medición. Especifique los elementos diagonales de la matriz de covarianza de error de estimación de estado correspondiente al estado de orientación como 0.01.
filt = insEKF; stateparts(filt,"Orientation",compact(initOrient)); statecovparts(filt,"Orientation",1e-2);
Obtenga una estructura de ruido de medición representativa y utilícela para estimar los estados antes de realizar la sintonización.
mnoise = tunernoise(filt); untunedEst = estimateStates(filt,sensorData,mnoise);
Reinicialice el filtro, configure un objeto tunerconfig y ajuste el filtro.
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
Estime los estados nuevamente, esta vez usando el filtro ajustado.
tunedEst = estimateStates(filt,sensorData,tunedmn);
Compare las estimaciones ajustadas y no ajustadas con los datos ground-truth.
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")

Imprima el error cuadrático medio (RMS) de los filtros ajustados y no ajustados.
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
Argumentos de entrada
Filtro INS, especificado como un objeto insEKF.
Ruido de medición, especificado como estructura. La función utiliza la entrada de ruido de medición como estimación inicial para ajustar el ruido de medición. La estructura debe contener el ruido de medición para los modelos de sensores especificados en la propiedad Sensors del filtro INS. Por ejemplo, si el objeto de filtro insEKF solo contiene un objeto insAccelerometer y un objeto insGyroscope, debe especificar la estructura de la siguiente manera:
| Nombre del campo | Descripción |
|---|---|
AccelerometerNoise | Varianza del ruido del acelerómetro, especificada como un escalar en (m/s2)2. |
GyroscopeNoise | Varianza del ruido del giroscopio, especificada como un escalar en (rad/s)2. |
Sugerencia
Utilice la función tunernoise para obtener una estructura representativa para la estructura measureNoise. Por ejemplo:
filter = insEKF; mNoise = tunerNoise(filter)
Datos del sensor, especificados como timetable. Cada nombre de variable (como columna) en la tabla de tiempo debe coincidir con uno de los nombres de sensores especificados en la propiedad SensorNames de filter. Cada entrada en la tabla es la medición del sensor en el momento de la fila correspondiente.
Si un sensor no produce mediciones en el tiempo de fila, especifique la entrada correspondiente como NaN.
Si establece la propiedad Cost de la entrada de configuración del sintonizador, config, en Custom, podrá usar otros tipos de datos para la entrada sensorData según su elección.
Datos de verdad fundamental, especificados como timetable. En cada fila, la tabla contiene los datos verdaderos para el tiempo de la fila. Cada nombre de variable (como columna) en la tabla debe ser uno de los nombres de estado de filtro que puede obtener utilizando la función de objeto stateinfo.
La función procesa cada fila de las tablas sensorData y groundTruth secuencialmente para calcular la estimación del estado y el error RMS a partir de la ground-truth. Las variables de estado que no están presentes en la entrada groundTruth se ignoran para la comparación. Las tablas sensorData y groundTruth deben tener los mismos tiempos de fila.
Si establece la propiedad Cost de la entrada de configuración del sintonizador, config, en Custom, podrá usar otros tipos de datos para la entrada groundTruth según su elección.
Configuración del sintonizador, especificada como un objeto tunerconfig.
Argumentos de salida
Ruido de medición ajustado, devuelto como una estructura. La estructura contiene los mismos campos que la estructura especificada en la entrada measureNoise.
Referencias
[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.
Historial de versiones
Introducido en R2022a
Consulte también
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.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- 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)