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.

complementaryFilter

Estimar la orientación mediante filtro complementario.

Descripción

complementaryFilter System object™ fusiona datos del sensor acelerómetro, giroscopio y magnetómetro para estimar la orientación y la velocidad angular del dispositivo.

Para estimar la orientación usando este objeto:

  1. Cree el objeto complementaryFilter y configure sus propiedades.

  2. Llame al objeto con argumentos, como si fuera una función.

Para más información sobre el funcionamiento de los System objects, consulte ¿Qué son los System Objects?

Creación

Descripción

FUSE = complementaryFilter devuelve un complementaryFilter System object, FUSE, para la fusión de datos del sensor del acelerómetro, giroscopio y magnetómetro para estimar la orientación y la velocidad angular del dispositivo.

FUSE = complementaryFilter('ReferenceFrame',RF) devuelve un complementaryFilter System object que fusiona datos del acelerómetro, giroscopio y magnetómetro para estimar la orientación del dispositivo en relación con el marco de referencia RF.

FUSE = complementaryFilter(___,Name=Value) establece una o más propiedades utilizando argumentos de nombre-valor además de cualquiera de los argumentos de entrada anteriores.

ejemplo

Argumentos de entrada

expandir todo

Sistema de coordenadas de navegación local, especificado como 'NED' (Noreste-Abajo) o 'ENU' (Este-Norte-Arriba).

Tipos de datos: char | string

Propiedades

expandir todo

A menos que se indique lo contrario, las propiedades son no ajustables, lo que significa que no puede modificar sus valores después de llamar al objeto. Los objetos se bloquean cuando llama a ellos, y la función release los desbloquea.

Si una propiedad es ajustable, puede modificar su valor en cualquier momento.

Para obtener más información sobre cómo modificar los valores de las propiedades, consulte Diseñar sistemas en MATLAB utilizando System objects.

Frecuencia de muestreo de entrada de los datos del sensor en Hz, especificada como un escalar positivo.

Ajustable: No

Tipos de datos: single | double

Ganancia del acelerómetro, especificada como un escalar real en el rango de [0, 1]. La ganancia determina en qué medida se confía en la medición del acelerómetro sobre la medición del giroscopio para la estimación de la orientación. Esta propiedad es ajustable.

Tipos de datos: single | double

Ganancia del magnetómetro, especificada como un escalar real en el rango de [0, 1]. La ganancia determina en qué medida se confía más en la medición del magnetómetro que en la medición del giroscopio para estimar la orientación. Esta propiedad es ajustable.

Tipos de datos: single | double

Habilitar la entrada del magnetómetro, especificada como true o false.

Tipos de datos: logical

Formato de orientación de salida, especificado como 'quaternion' o 'Rotation matrix'. El tamaño de la salida depende del formato de orientación de salida:

  • 'quaternion' –– La salida es un N por 1 quaternion.

  • 'Rotation matrix' –– La salida es una matriz de rotación de 3 por 3 por N.

N es el número de muestras.

Tipos de datos: char | string

Uso

Descripción

[orientation,angularVelocity] = FUSE(accelReadings,gyroReadings,magReadings) fusiona datos del acelerómetro, giroscopio y magnetómetro para calcular la orientación y la velocidad angular. Para utilizar esta sintaxis, establezca la propiedad HasMagnetometer como true.

ejemplo

[orientation,angularVelocity] = FUSE(accelReadings,gyroReadings) fusiona datos del acelerómetro y del giroscopio para calcular la orientación y la velocidad angular. Para utilizar esta sintaxis, establezca la propiedad HasMagnetometer como false.

Argumentos de entrada

expandir todo

Lecturas del acelerómetro en el sistema de coordenadas del cuerpo del sensor en m/s2, especificadas como una matriz N por 3. N es el número de muestras y las tres columnas de accelReadings representan las [x y z] mediciones. Se supone que las lecturas del acelerómetro corresponden a la frecuencia de muestreo especificada por la propiedad SampleRate. En el filtro, se supone que la constante de gravedad g es 9.81 m/s2.

Tipos de datos: single | double

Lecturas del giroscopio en el sistema de coordenadas del cuerpo del sensor en rad/s, especificadas como una matriz de N por 3. N es el número de muestras y las tres columnas de gyroReadings representan las [x y z] mediciones. Se supone que las lecturas del giroscopio corresponden a la frecuencia de muestreo especificada por la propiedad SampleRate.

Tipos de datos: single | double

Lecturas del magnetómetro en el sistema de coordenadas del cuerpo del sensor en µT, especificadas como una matriz de N por 3. N es el número de muestras y las tres columnas de magReadings representan las [x y z] mediciones. Se supone que las lecturas del magnetómetro corresponden a la frecuencia de muestreo especificada por la propiedad SampleRate.

Tipos de datos: single | double

Argumentos de salida

expandir todo

Orientación que rota cantidades del sistema de coordenadas de navegación local al sistema de coordenadas del cuerpo, devuelta como cuaterniones o un arreglo. El tamaño y el tipo de orientation dependen de si la propiedad OrienationFormat está establecida en 'quaternion' o 'Rotation matrix':

  • 'quaternion' –– la salida es un vector de cuaterniones N por 1, donde N es el número de muestras.

  • 'Rotation matrix' –– la salida es un arreglo de matrices de rotación de 3 por 3 por N, donde N es el número de muestras.

Tipos de datos: quaternion | single | double

Velocidad angular expresada en el sistema de coordenadas del cuerpo del sensor en rad/s, devuelta como una matriz N por 3, donde N es el número de muestras.

Tipos de datos: single | double

Funciones del objeto

Para usar una función de objeto, especifique el System object como el primer argumento de entrada. Por ejemplo, para liberar recursos de sistema de un System object llamado obj, utilice la siguiente sintaxis:

release(obj)

expandir todo

stepEjecutar el algoritmo System object
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object
cloneCreate duplicate System object
isLockedDetermine if System object is in use

Ejemplos

contraer todo

Cargue el archivo rpy_9axis, que contiene datos registrados de los sensores acelerómetro, giroscopio y magnetómetro de un dispositivo que oscila en cabeceo (alrededor del eje y), luego en guiñada (alrededor del eje z) y luego en balanceo (alrededor del eje x). El archivo también contiene la frecuencia de muestreo de la grabación.

ld = load('rpy_9axis.mat');
accel = ld.sensorData.Acceleration;
gyro = ld.sensorData.AngularVelocity;
mag = ld.sensorData.MagneticField;

Cree un objeto de filtro complementario con una frecuencia de muestreo igual a la frecuencia de los datos.

Fs  = ld.Fs;  % Hz
fuse = complementaryFilter('SampleRate', Fs);

Fusione los datos del acelerómetro, giroscopio y magnetómetro utilizando el filtro.

q = fuse(accel, gyro, mag);

Visualiza los resultados.

plot(eulerd( q, 'ZYX', 'frame'));
title('Orientation Estimate');
legend('Z-rotation', 'Y-rotation', 'X-rotation');
ylabel('Degrees');

Figure contains an axes object. The axes object with title Orientation Estimate, ylabel Degrees contains 3 objects of type line. These objects represent Z-rotation, Y-rotation, X-rotation.

Referencias

[1] Valenti, R., I. Dryanovski, and J. Xiao. "Keeping a good attitude: A quaternion-based orientation filter for IMUs and MARGs." Sensors. Vol. 15, Number 8, 2015, pp. 19302-19330.

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 R2019b

Consulte también

|