Main Content

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.

Desde R2019b

Descripción

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

Para estimar la orientación usando este objeto:

  1. Cree el objeto complementaryFilter y establezca sus propiedades.

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

Para obtener más información sobre cómo funcionan los System objects, consulte What Are System Objects?

Creación

Descripción

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

FUSE = complementaryFilter('ReferenceFrame',RF) devuelve un complementaryFilter System object que fusiona datos de acelerómetro, giroscopio y magnetómetro para estimar la orientación del dispositivo en relación con el marco de referencia RF. Especifique RF como 'NED' (Noreste-Abajo) o 'ENU' (Este-Norte-Arriba). El valor predeterminado es 'NED'.

ejemplo

FUSE = complementaryFilter(___,Name,Value) establece cada propiedad Name en el Value especificado. Las propiedades no especificadas tienen valores predeterminados.

Propiedades

expandir todo

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

Si una propiedad es ajustable, puedes cambiar su valor en cualquier momento.

Para obtener más información sobre cómo cambiar los valores de las propiedades, consulte System Design in MATLAB Using 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

Habilite 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

ejemplo

[orientation,angularVelocity] = FUSE(accelReadings,gyroReadings,magReadings) fusiona datos de 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.

[orientation,angularVelocity] = FUSE(accelReadings,gyroReadings) fusiona datos de acelerómetro y 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 el [x y z] medidas. 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 N-por-3. N es el número de muestras, y las tres columnas de gyroReadings representan el [x y z] medidas. 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 N-por-3. N es el número de muestras, y las tres columnas de magReadings representan el [x y z] medidas. 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 tipo de orientation depende de si la propiedad OrienationFormat está establecida en 'quaternion' o 'Rotation matrix':

  • 'quaternion' –– la salida es un N-por 1 vector de cuaterniones, 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 un arreglo N por 3, donde N es el número de muestras.

Tipos de datos: single | double

Funciones del objeto

Para utilizar una función de objeto, especifique System object como primer argumento de entrada. Por ejemplo, para liberar recursos del sistema de un System object llamado obj, use esta 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 sensores de acelerómetro, giroscopio y magnetómetro de un dispositivo que oscila en tono (alrededor del eje y), luego guiñada (alrededor del eje z), y luego rodar (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

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

|