Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

estimateStates

Fusión por lotes y suavizado de datos de sensores

Desde R2022a

Descripción

estimates = estimateStates(filter,sensorData,measurementNoise) devuelve las estimaciones de estado basadas en el modelo de movimiento utilizado en el filtro, los datos del sensor y el ruido de medición. La función predice las estimaciones del estado del filtro hacia adelante en el tiempo basándose en los tiempos de fila en sensorData y fusiona los datos de cada columna de la tabla uno por uno.

ejemplo

[estimates,smoothEstimates] = estimateStates(___) además devuelve las estimaciones de estado suavizadas mediante el suavizador de Kalman no lineal Rauch-Tung-Striebel (RTS). Para obtener detalles del algoritmo, consulte Algoritmos y [1].

Sugerencia

El suavizado suele requerir considerablemente más memoria y tiempo de cálculo. Utilice esta sintaxis sólo cuando necesite los estados estimados suavizados.

ejemplo

Ejemplos

contraer todo

Cargue datos de medición desde un acelerómetro y un giroscopio.

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);

Especifique el ruido de medición y el ruido del proceso aditivo. Puede obtener estos valores utilizando la función de objeto tune del objeto de filtro.

measureNoise = struct("AccelerometerNoise", 0.1739, ...
    "GyroscopeNoise", 1.1129);
processNoise = diag([ ...
    2.8586 1.3718 0.8956 3.2148 4.3574 2.5411 3.2148 0.5465 0.2811 ...
    1.7149 0.1739 0.7752 0.1739]);
filt.AdditiveProcessNoise = processNoise;

Estime por lotes los estados utilizando la función de objeto estimateStates. Además, obtenga las estimaciones después del suavizado.

[estimates,smoothEstimates] = estimateStates(filt,sensorData,measureNoise);

Visualice la orientación estimada en ángulos de Euler.

figure
t = estimates.Properties.RowTimes;
plot(t,eulerd(estimates.Orientation,"ZYX","frame"));
title("Estimated Orientation");
ylabel("Degrees")

Figure contains an axes object. The axes object with title Estimated Orientation, ylabel Degrees contains 3 objects of type line.

Visualice la orientación estimada después del suavizado en ángulos de Euler.

figure
plot(t,eulerd(smoothEstimates.Orientation,"ZYX","frame"));
title("Smoothed Orientation");
ylabel("Degrees")

Figure contains an axes object. The axes object with title Smoothed Orientation, ylabel Degrees contains 3 objects of type line.

Visualice el error de estimación, en distancia de cuaternión, utilizando la función de objeto dist del objeto quaternion.

trueOrient = groundTruth.Orientation;
plot(t,rad2deg(dist(estimates.Orientation, trueOrient)), ...
     t,rad2deg(dist(smoothEstimates.Orientation, trueOrient)));
title("Estimated and Smoother Error");
legend("Estimation Error","Smoothed Error")
xlabel("Time");
ylabel("Degrees")

Figure contains an axes object. The axes object with title Estimated and Smoother Error, xlabel Time, ylabel Degrees contains 2 objects of type line. These objects represent Estimation Error, Smoothed Error.

Argumentos de entrada

contraer todo

Filtro INS, especificado como un objeto insEKF.

Datos del sensor, especificados como timetable. Cada nombre de variable (como columna) en el horario 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 un momento dado, especifique la entrada correspondiente como NaN.

Ruido de medición de los sensores, especificado como estructura. Cada nombre de campo debe coincidir con uno de los nombres de sensores especificados en la propiedad SensorNames de filter. El valor del campo es la matriz de covarianza del ruido de medición correspondiente. Si especifica un valor de campo como escalar, la función extiende el escalar a la diagonal de la matriz.

Tipos de datos: struct

Argumentos de salida

contraer todo

Estimaciones estatales, devueltas como timetable. El nombre de cada variable en la tabla representa un estado. Puede obtener los nombres de las variables utilizando la función de objeto stateinfo del filtro. La última columna de la tabla es la matriz de covarianza del error de estimación de estado para el vector de estado completo del filtro en cada uno de los tiempos de fila.

Estimaciones de estado suavizadas, devueltas como timetable. El nombre de cada variable en la tabla representa un estado. Puede obtener los nombres de las variables utilizando la función de objeto stateinfo del filtro. La última columna de la tabla es la matriz de covarianza del error de estimación de estado para el vector de estado completo del filtro en cada uno de los tiempos de fila.

Algoritmos

contraer todo

Referencias

[1] Crassidis, John L., and John L. Junkins. "Optimal Estimation of Dynamic Systems". 2nd ed, CRC Press, pp. 349- 352, 2012.

Capacidades ampliadas

expandir todo

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Historial de versiones

Introducido en R2022a

expandir todo