AHRS
Orientación a partir de lecturas de acelerómetro, giroscopio y magnetómetro

Bibliotecas:
Navigation Toolbox /
Multisensor Positioning /
Navigation Filters
Sensor Fusion and Tracking Toolbox /
Multisensor Positioning /
Navigation Filters
Descripción
El bloque AHRS
Simulink® fusiona datos del sensor acelerómetro, magnetómetro y giroscopio para estimar la orientación del dispositivo.
Ejemplos
Fusión de sensores IMU con Simulink
Este ejemplo muestra cómo generar y fusionar datos del sensor IMU utilizando Simulink®. Puede modelar con precisión el comportamiento de un acelerómetro, un giroscopio y un magnetómetro y fusionar sus salidas para calcular la orientación.
Puertos
Entrada
Lecturas del acelerómetro en el sistema de coordenadas del cuerpo del sensor en m/s2, especificadas como una matriz N por 3 de escalares reales. N es el número de muestras y las tres columnas de Accel
representan las [x y z] mediciones, respectivamente.
Tipos de datos: single
| double
Lecturas del giroscopio en el sistema de coordenadas del cuerpo del sensor en rad/s, especificadas como una matriz N por 3 de escalares reales. N es el número de muestras y las tres columnas de Gyro
representan las [x y z] mediciones, respectivamente.
Tipos de datos: single
| double
Lecturas del magnetómetro en el sistema de coordenadas del cuerpo del sensor en µT, especificadas como una matriz N por 3 de escalares reales. N es el número de muestras y las tres columnas de magReadings
representan las [x y z] mediciones, respectivamente.
Tipos de datos: single
| double
Salida
Orientación del marco del cuerpo del sensor con respecto al marco de navegación, devuelto como un arreglo de escalares de M por 4 o un arreglo de matrices de rotación de 3 por 3 por M. Se supone que cada fila de la matriz N por 4 son los cuatro elementos de un quaternion
. El número de muestras de entrada, N, y el parámetro Decimation Factor determinan el tamaño de salida M.
Tipos de datos: single
| double
Velocidad angular con el sesgo del giroscopio eliminado en el sistema de coordenadas del cuerpo del sensor en rad/s, devuelta como un arreglo M por 3 de escalares reales. El número de muestras de entrada, N, y el parámetro Decimation Factor determinan el tamaño de salida M.
Tipos de datos: single
| double
Parámetros
Principal
Marco de referencia de navegación, especificado como NED
(Noreste-Abajo) o ENU
(Este-Norte-Arriba).
Factor de diezmado mediante el cual se reduce la velocidad de datos del sensor de entrada, especificado como un número entero positivo.
El número de filas de las entradas –– Accel, Gyro y Mag –– debe ser un múltiplo del factor de diezmado.
Tipos de datos: single
| double
Ruido del proceso inicial, especificado como una matriz de escalares reales de 12 por 12. El valor predeterminado, ahrsfilter.defaultProcessNoise
, es una matriz diagonal de 12 por 12 como:
Columns 1 through 6 0.000006092348396 0 0 0 0 0 0 0.000006092348396 0 0 0 0 0 0 0.000006092348396 0 0 0 0 0 0 0.000076154354947 0 0 0 0 0 0 0.000076154354947 0 0 0 0 0 0 0.000076154354947 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Columns 7 through 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.009623610000000 0 0 0 0 0 0 0.009623610000000 0 0 0 0 0 0 0.009623610000000 0 0 0 0 0 0 0.600000000000000 0 0 0 0 0 0 0.600000000000000 0 0 0 0 0 0 0.600000000000000
Tipos de datos: single
| double
Formato de orientación de salida, especificado como 'quaternion'
o 'Rotation matrix'
:
'quaternion'
–– La salida es un arreglo M por 4 de escalares reales. Cada fila del arreglo representa los cuatro componentes de unquaternion
.'Rotation matrix'
–– La salida es una matriz de rotación de 3 por 3 por M.
El tamaño de salida M depende de la dimensión de entrada N y del parámetro Decimation Factor.
Tipos de datos: char
| string
Interpreted execution
— Simular el modelo utilizando el intérprete MATLAB®. Esta opción acorta el tiempo de inicio. En el modoInterpreted execution
, puede depurar el código fuente del bloque.Code generation
— Simular el modelo utilizando el código C generado. La primera vez que ejecuta una simulación, Simulink genera código C para el bloque. El código C se reutiliza para simulaciones posteriores siempre que el modelo no cambie. Esta opción requiere tiempo de inicio adicional.
Ruido de medición
Varianza del ruido de la señal del acelerómetro en (m/s2)2, especificada como un escalar real positivo.
Tipos de datos: single
| double
Varianza del ruido de la señal del giroscopio en (rad/s)2, especificada como un escalar real positivo.
Tipos de datos: single
| double
Varianza del ruido de la señal del magnetómetro en μT2, especificada como un escalar real positivo.
Tipos de datos: single
| double
Varianza de la deriva del giroscopio en (rad/s)2, especificada como un escalar real positivo.
Tipos de datos: single
| double
Ruido ambiental
Varianza del ruido de aceleración lineal en (m/s2)2, especificada como un escalar real positivo. La aceleración lineal se modela como un proceso de ruido blanco filtrado por paso bajo.
Tipos de datos: single
| double
Varianza del ruido de perturbación magnética en μT2, especificado como un escalar positivo finito real.
Tipos de datos: single
| double
Factor de caída para la deriva de aceleración lineal, especificado como un escalar en el rango [0,1). Si la aceleración lineal cambia rápidamente, establezca este parámetro en un valor más bajo. Si la aceleración lineal cambia lentamente, establezca este parámetro en un valor más alto. La deriva de la aceleración lineal se modela como un proceso de ruido blanco filtrado por paso bajo.
Tipos de datos: single
| double
Factor de decaimiento para perturbaciones magnéticas, especificado como un escalar positivo en el rango [0,1]. La perturbación magnética se modela como un proceso de Markov de primer orden.
Tipos de datos: single
| double
Intensidad del campo magnético en μT, especificada como un escalar positivo real. La intensidad del campo magnético es una estimación de la intensidad del campo magnético de la Tierra en la ubicación actual.
Tipos de datos: single
| double
Algoritmos
Nota: El siguiente algoritmo sólo se aplica a un marco de referencia NED.
El bloque AHRS utiliza la estructura de filtro Kalman de nueve ejes descrita en [1]. El algoritmo intenta rastrear los errores de orientación, desplazamiento del giroscopio, aceleración lineal y perturbación magnética para generar la orientación final y la velocidad angular. En lugar de rastrear la orientación directamente, el filtro Kalman indirecto modela el proceso de error, x, con una actualización recursiva:
donde xk es un vector de 12 por 1 que consta de:
θk –– Vector de error de orientación de 3 por 1, en grados, en el tiempo k
bk –– Vector de sesgo de velocidad angular cero del giroscopio 3 por 1, en grados/s, en el momento k
ak –– Vector de error de aceleración de 3 por 1 medido en el marco del sensor, en g, en el tiempo k
dk –– Vector de error de perturbación magnética de 3 por 1 medido en el marco del sensor, en µT, en el tiempo k
y donde wk es un vector de ruido aditivo de 12 por 1, y Fk es el modelo de transición de estado.
Dado que xk se define como el proceso de error, la estimación a priori siempre es cero y, por lo tanto, el modelo de transición de estado, Fk, es cero. Esta idea da como resultado la siguiente reducción de las ecuaciones estándar de Kalman:
Ecuaciones de Kalman estándar:
Ecuaciones de Kalman utilizadas en este algoritmo:
donde:
xk− –– estimación del estado predicho (a priori); el proceso de error
Pk− –– estimación de covarianza prevista (a priori)
yk –– innovación
Sk –– covarianza de la innovación
Kk –– Ganancia de Kalman
xk+ –– estimación de estado actualizada (a posteriori)
Pk+ –– estimación de covarianza actualizada (a posteriori)
k representa la iteración, el superíndice + representa una estimación a posteriori y el superíndice − representa una estimación a priori.
El gráfico y los siguientes pasos describen una iteración basada en un solo cuadro a través del algoritmo.
Antes de la primera iteración, las entradas accelReadings
, gyroReadings
y magReadings
se dividen en cuadros DecimationFactor
por 3. Para cada fragmento, el algoritmo utiliza las lecturas más actuales del acelerómetro y magnetómetro correspondientes al fragmento de lecturas del giroscopio.
Lea el algoritmo para obtener una explicación de cada etapa de la descripción detallada.
El algoritmo modela la aceleración y el cambio angular como procesos lineales.
La orientación del cuadro actual se predice estimando primero el cambio angular respecto del cuadro anterior:
donde N es el factor de diezmado especificado por el factor de diezmado y fs es la frecuencia de muestreo.
El cambio angular se convierte en cuaterniones utilizando la sintaxis de construcción rotvec
quaternion
:
La estimación de orientación anterior se actualiza girándola por Δ Q:
Durante la primera iteración, la estimación de orientación, q−, se inicializa mediante ecompass
.
El vector de gravedad se interpreta como la tercera columna del cuaternión, q−, en forma de matriz de rotación:
Se realiza una segunda estimación del vector de gravedad restando la estimación de aceleración lineal decaida de la iteración anterior de las lecturas del acelerómetro:
El vector magnético de la Tierra se estima rotando la estimación del vector magnético de la iteración anterior por la estimación de orientación a priori, en forma de matriz de rotación:
El modelo de error combina dos diferencias:
La diferencia entre la estimación de la gravedad a partir de las lecturas del acelerómetro y la estimación de la gravedad a partir de las lecturas del giroscopio:
La diferencia entre la estimación del vector magnético a partir de las lecturas del giroscopio y la estimación del vector magnético a partir del magnetómetro:
El magnetómetro calcula correctamente el error en la estimación del vector magnético y detecta interferencias magnéticas.
El error de perturbación magnética se calcula multiplicando la matriz de la ganancia de Kalman asociada al vector magnético con la señal de error:
La ganancia de Kalman, K, es la ganancia de Kalman calculada en la iteración actual.
La interferencia magnética se determina verificando que la potencia de la perturbación magnética detectada sea menor o igual a cuatro veces la potencia de la intensidad del campo magnético esperado:
ExpectedMagneticFieldStrength es una propiedad de ahrsfilter
.
Las ecuaciones de Kalman utilizan la estimación de gravedad derivada de las lecturas del giroscopio, g, la estimación del vector magnético derivada de las lecturas del giroscopio, mGyro, y la observación del proceso de error, z, para actualizar las matrices de ganancia de Kalman y de covarianza intermedia. La ganancia de Kalman se aplica a la señal de error, z, para generar una estimación de error a posteriori, x+.
El modelo de observación asigna los estados observados de 1 por 3, g y mGyro, al estado real de 6 por 12, H.
El modelo de observación se construye como:
donde gx, gy y gz son los elementos x, y y z del vector de gravedad estimado a partir de la orientación a priori, respectivamente. mx, my y mz son los elementos x, y y z del vector magnético estimado a partir de la orientación a priori, respectivamente. κ es una constante determinada por las propiedades de frecuencia de muestreo y factor de diezmado: κ = Decimation factor
/Sample rate
.
La covarianza de innovación es una matriz de 6 por 6 que se utiliza para rastrear la variabilidad en las mediciones. La matriz de covarianza de innovación se calcula como:
donde
H es la matriz del modelo de observación
P− es la estimación predicha (a priori) de la covarianza del modelo de observación calculado en la iteración anterior
R es la covarianza del ruido del modelo de observación, calculada como:
donde
y
La covarianza de la estimación del error es una matriz de 12 por 12 que se utiliza para rastrear la variabilidad en el estado.
La matriz de covarianza de estimación de error se actualiza como:
donde K es la ganancia de Kalman, H es la matriz de medición y P− es la covarianza de estimación de error calculada durante la iteración anterior.
La covarianza de la estimación del error es una matriz de 12 por 12 que se utiliza para rastrear la variabilidad en el estado. La covarianza de estimación de error a priori, P−, se establece en la covarianza de ruido del proceso, Q, determinada durante la iteración anterior. Q se calcula como una función de la covarianza de estimación de error a posteriori, P+. Al calcular Q, se supone que los términos de correlación cruzada son insignificantes en comparación con los términos de autocorrelación y se establecen en cero:
dónde
P+ –– es la covarianza de estimación de error actualizada (a posteriori)
κ –– Factor de diezmado dividido por la frecuencia de muestreo.
β –– Ruido de deriva del giroscopio.
η –– Ruido del giroscopio.
ν –– Factor de disminución de la aceleración lineal.
ξ –– Ruido de aceleración lineal.
σ –– Factor de decaimiento por perturbación magnética.
γ –– Ruido de perturbación magnética.
La matriz de ganancia de Kalman es una matriz de 12 por 6 que se utiliza para ponderar la innovación. En este algoritmo, la innovación se interpreta como el proceso de error, z.
La matriz de ganancia de Kalman se construye como:
donde
P− –– covarianza del error previsto
H –– modelo de observación
S –– covarianza de la innovación
La estimación del error a posterior se determina combinando la matriz de ganancia de Kalman con el error en las estimaciones del vector de gravedad y del vector magnético:
Si se detecta interferencia magnética en la iteración actual, se ignora la señal de error del vector magnético y la estimación del error a posterior se calcula como:
La estimación de orientación se actualiza multiplicando la estimación anterior por el error:
La estimación de la aceleración lineal se actualiza decayendo la estimación de la aceleración lineal de la iteración anterior y restando el error:
donde
ν –– Factor de decaimiento de la aceleración lineal
La estimación del desplazamiento del giroscopio se actualiza restando el error de desplazamiento del giroscopio del desplazamiento del giroscopio de la iteración anterior:
Para estimar la velocidad angular, se promedia el marco de gyroReadings
y se resta el desplazamiento del giroscopio calculado en la iteración anterior:
donde N es el factor de diezmado especificado por la propiedad DecimationFactor
.
La estimación de compensación del giroscopio se inicializa en ceros para la primera iteración.
Si no se detectó interferencia magnética en la iteración actual, la estimación del vector magnético, m, se actualiza utilizando el error de perturbación magnética a posteriori y la orientación a posteriori.
El error de perturbación magnética se convierte al marco de navegación:
El error de perturbación magnética en el marco de navegación se resta de la estimación del vector magnético anterior y luego se interpreta como inclinación:
La inclinación se convierte en una estimación de vector magnético restringido para la siguiente iteración:
Referencias
[1] Open Source Sensor Fusion. https://github.com/memsindustrygroup/Open-Source-Sensor-Fusion/tree/master/docs
[2] Roetenberg, D., H.J. Luinge, C.T.M. Baten, and P.H. Veltink. "Compensation of Magnetic Disturbances Improves Inertial and Magnetic Sensing of Human Body Segment Orientation." IEEE Transactions on Neural Systems and Rehabilitation Engineering. Vol. 13. Issue 3, 2005, pp. 395-405.
Capacidades ampliadas
Indicaciones y limitaciones de uso:
Este bloque también admite la generación estricta de código de precisión simple.
Historial de versiones
Introducido en R2020a
Consulte también
ahrsfilter
| ecompass
| imufilter
| imuSensor
| gpsSensor
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)