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)