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 Reduzca el error de estimación del estado de raíz cuadrática media (RMS) entre los datos del sensor fusionado y ground-truth. La función también devuelve el ruido de medición ajustado 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
Ajuste insEKF
para optimizar la estimación de orientación
Cargue los datos registrados del sensor y los datos ground-truth.
load("accelGyroINSEKFData.mat");
Cree 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 del error de estimación del 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
filter
— filtro INS
insEKF
objeto
Filtro INS, especificado como un objeto insEKF
.
measureNoise
— Ruido de medición
estructura
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
, debes especificar la estructura de esta manera:
Nombre del campo | Descripción |
---|---|
AccelerometerNoise | Variación del ruido del acelerómetro, especificada como un escalar en (m2/s). |
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 de la estructura measureNoise
. Por ejemplo:
filter = insEKF; mNoise = tunerNoise(filter)
sensorData
— Datos del sensor
timetable
Datos del sensor, especificados como timetable
. Cada nombre de variable (como columna) en la tabla de tiempos debe coincidir con uno de los nombres de sensor especificados en la propiedad SensorNames
del 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 momento de la fila, especifique la entrada correspondiente como NaN
.
Si establece la propiedad Cost
de la entrada de configuración del ajustador, config
, en Custom
, entonces puede usar otros tipos de datos para la sensorData
entrada según su elección.
groundTruth
— Datos ground-truth
timetable
Datos ground-truth, 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 usando 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 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 ajustador, config
, en Custom
, entonces puede usar otros tipos de datos para la groundTruth
entrada según su elección.
config
— Configuración del ajustador
tunerconfig
objeto
Configuración del ajustador, especificada como un objeto tunerconfig
.
Argumentos de salida
tunedMeasureNoise
— Ruido de medición ajustado
estructura
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
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de 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)