Qué es Sensor Fusion: cómo funciona y sus aplicaciones

Actualmente, los sensores se utilizan en una amplia gama de aplicaciones que van desde teléfonos inteligentes, control industrial, sistemas automotrices, monitoreo climático, atención médica y exploración petrolera. Generalmente, un sensor individual tiene tanto ventajas como desventajas. Para superar las limitaciones de los sensores individuales mediante la recopilación de información de diferentes sensores para generar datos más consistentes con menos dudas, se utiliza la fusión de sensores. Por lo tanto, estos datos robustos se pueden utilizar para tomar ciertas acciones y tomar decisiones. vamos a discutir fusión de sensores y sus tipos con el trabajo.


Índice de Contenido
  1. ¿Qué es Sensor Fusion?
    1. ¿Cómo funciona la fusión de sensores?
    2. Tipos de fusión de sensores
    3. Algoritmos de fusión de sensores
    4. Interfaz del sensor MPU6050 con Arduino Uno
    5. Ventajas
    6. Aplicaciones

¿Qué es Sensor Fusion?

Definición de fusión de sensores: El proceso de fusionar datos de diferentes sensores para hacer una conceptualización más precisa del objeto u objetivo se conoce como fusión de sensores. Por lo tanto, este proceso simplemente le permite fusionar entradas de múltiples sensores para obtener una comprensión más precisa y completa de la dirección, el entorno y la ubicación del objetivo.

Fusión de sensores

La fusión de sensores se necesita principalmente para resolver desafíos entre diferentes sensores, sincronización de sensores, expectativa de posiciones de objetos futuros, utilización de fuerzas heterogéneas de sensores, detección de mal funcionamiento de sensores y cumplimiento de requisitos de seguridad de conducción automatizada.

¿Cómo funciona la fusión de sensores?

La fusión de sensores funciona al reunir todas las entradas de muchos sensores para formar una sola imagen o modelo del entorno alrededor de una plataforma. Por lo tanto, la salida es muy precisa ya que equilibra las fuerzas de los diferentes sensores. El proceso de fusión de sensores utiliza algoritmos de software para proporcionar un modelo ambiental más completo y preciso. Es un método complejo de recopilar, filtrar y agregar información de sensores para mantener la conciencia ambiental necesaria para la toma de decisiones inteligente:

Tipos de fusión de sensores

Hay tres tipos de sensores de fusión competitivos, complementarios y cooperativos, donde cada tipo se analiza a continuación.

Tipos de fusión de sensores
Tipos de fusión de sensores

En una fusión de sensores complementarios, si los sensores no dependen directamente unos de otros, pueden fusionarse para proporcionar una imagen completa del fenómeno observado. Esto decide la incompletitud de la información del sensor.

El mejor ejemplo de esta configuración es el uso de múltiples cámaras donde cada una monitorea partes separadas de una habitación. Por lo general, la fusión de datos complementarios es muy simple, mientras que los datos de los sensores se pueden agregar entre sí.

En los sensores de fusión de la competencia, cada tipo de sensor proporciona mediciones independientes de una propiedad similar. Estos tipos de sensores de fusión se utilizan principalmente para sistemas robustos y tolerantes a fallas. El mejor ejemplo de esto es la reducción de ruido mediante la fusión de dos imágenes de cámara superpuestas.

Una red cooperativa de sensores de fusión utiliza datos proporcionados por dos sensores separados para derivar información que no se podría obtener solo de los sensores. El mejor ejemplo de esto es la visión estereoscópica que mezcla imágenes bidimensionales usando dos cámaras. En puntos de vista ligeramente diferentes, se puede derivar una imagen tridimensional de la escena observada.

Algoritmos de fusión de sensores

Los científicos de datos utilizan principalmente los algoritmos de fusión de sensores para combinar datos en aplicaciones de fusión de sensores. Por lo tanto, estos algoritmos procesarán todas las entradas de los sensores y generarán resultados con alta confiabilidad y precisión, incluso cuando las mediciones individuales sean defectuosas. Hay diferentes tipos de algoritmos de fusión de sensores que se describen a continuación.

Teorema del límite central

El CLT o Teorema del Límite Central es un concepto aritmético que establece que en matemáticas y estadística, la distribución muestral de la media es un concepto importante. En general, una media se refiere al valor promedio o más común en un conjunto de enfoques de una distribución normal a medida que aumenta el tamaño de la muestra, fuera de la forma de la distribución de población original.

Teorema del límite central
Teorema del límite central

Por ejemplo: si tenemos dos tipos de sensores como el sensor ultrasónico y el sensor infrarrojo. Una vez que obtengamos más muestras de sus lecturas, la distribución de las medias de las muestras se parecerá más a una curva de campana y, por lo tanto, se acercará al valor medio preciso del conjunto. Una vez que nos acerquemos a un valor medio preciso, el ruido bajo dará como resultado algoritmos de fusión de sensores.

filtro Kalman

Un filtro de Kalman es un tipo de algoritmo de fusión de sensores que utiliza entradas de datos de diferentes fuentes para estimar valores desconocidos que se utilizan con frecuencia en la tecnología de navegación y control. Estos filtros pueden calcular valores desconocidos con mucha precisión frente a predicciones individuales con técnicas de medición únicas.

filtro Kalman
filtro Kalman

Los algoritmos de filtro de Kalman son la aplicación de fusión de sensores más utilizada y proporcionan la base para comprender la teoría en sí. Las aplicaciones más comunes de los filtros de Kalman son, es aplicable en tecnología de posicionamiento y navegación. Dado que el filtrado de Kalman es repetitivo, necesitamos conocer la última posición reconocida de un automóvil y su velocidad es capaz de anticipar su estado presente y futuro.

Redes neuronales convolucionales

Este tipo de algoritmo de fusión puede procesar simultáneamente múltiples canales de datos de sensores. Al combinar estos datos, pueden producir resultados de clasificación basados ​​en el reconocimiento de imágenes. Por ejemplo, un robot utiliza datos de sensores para informar señales de tráfico a una distancia que depende de algoritmos basados ​​en redes neuronales convolucionales. Se utiliza un sistema de fusión de sensores con una red neuronal convolucional (CNN) para monitorear los movimientos de transición en aplicaciones de atención médica.

Redes neuronales convolucionales
Redes neuronales convolucionales

red bayesiana

En la fusión de sensores, un algoritmo de red bayesiano es un modelo gráfico que representa un conjunto de variables y sus dependencias condicionales a través de un gráfico acíclico dirigido. Por ejemplo, una red bayesiana representa las principales relaciones probabilísticas entre enfermedades y síntomas. Así, la red puede utilizarse simplemente para calcular las probabilidades de existencia de diferentes enfermedades.

red bayesiana
red bayesiana

Los algoritmos eficientes pueden realizar inferencias y aprender dentro de las redes bayesianas. Estas redes que forman una serie de variables como secuencias de proteínas o señales de voz se denominan redes bayesianas dinámicas. Las simplificaciones de estas redes pueden significar y resolver problemas de decisión bajo incertidumbre se conocen como diagramas de influencia.

Interfaz del sensor MPU6050 con Arduino Uno

Aquí, la interfaz del sensor MPU6050 con la placa Arduino UNO se analiza a continuación.

Interfaz del sensor MPU6050 con Arduino Uno
Interfaz del sensor MPU6050 con Arduino Uno

El MPU6050 es un sensor de unidad de medida inercial (IMU) que incluye un acelerómetro MEMS y un giroscopio MEMS en un chip. La IMU incluye tres sensores, como un acelerómetro, un giroscopio y magnetómetros. La función principal de un sensor IMU es medir la fuerza particular usando un acelerómetro, la velocidad angular con giroscopio y el campo magnético usando magnetómetros.

Estos sensores son aplicables en aviones, robots autoequilibrados, naves espaciales, satélites, drones, tabletas, teléfonos móviles, vehículos aéreos no tripulados (UAV) para detección de posición, guía, orientación de detección, control de vuelo y seguimiento de movimiento.

Los sensores IMU comunes son el acelerómetro MPU 6050 y ADXL 335. El sensor IMU ADXL 335 incluye un acelerómetro de 3 ejes, mientras que el sensor MPU-6050 es un dispositivo de seguimiento de movimiento de 6 ejes que combina un acelerómetro y un giroscopio en tres ejes en un chip .

Los componentes necesarios para conectar Arduino UNO con el sensor MPU6050 incluyen principalmente un sensor MPU 6050, cables de puente y una placa Arduino Uno. Las conexiones de esta interfaz siguen como;

  • Conecte el pin VCC del sensor MPU6050 al VCC de Arduino.
  • Conecte el pin SDA del sensor MPU6050 al pin IN (A4) de Arduino.
  • Conecte el pin SCL del sensor MPU6050 al pin Analog IN (A5) de Arduino.
  • Conecte el pin GND del sensor MPU6050 al pin GND de Arduino.
  • Conecte el pin INT del sensor MPU6050 al PWM digital (pin 2) de Arduino.

Después de eso, los datos del sensor MPU6050 se pueden obtener instalando la biblioteca wire.h. Ambas bibliotecas se pueden descargar de Internet.

A partir de este código de biblioteca, podemos obtener tres parámetros principales como balanceo, cabeceo y guiñada. Al viajar en automóvil, el movimiento se puede medir hacia la derecha, hacia la izquierda, hacia adelante y hacia atrás. Sin embargo, para vehículos voladores o drones, no se considerará lo mismo. Porque las terminologías de los tableros de control voladores son diferentes, como cabeceo, guiñada y balanceo.

El eje Pitch se puede definir como el eje que va del lado izquierdo al lado derecho del dron. Por lo tanto, la revolución alrededor de este eje se conoce como movimiento de cabeceo.

El eje de balanceo se puede definir como el eje que va desde la parte delantera hasta la trasera del dron. Por lo tanto, la revolución alrededor de este eje se conoce como movimiento de balanceo.

El eje de guiñada se puede definir como el eje que va desde la parte superior a la inferior del dron. Por lo tanto, la revolución alrededor de este eje se conoce como movimiento de guiñada.

Código de proyecto

#comprender

const entero MPU = 0x68; // Dirección I2C MPU6050

flotante AccX, AccY, AccZ;

flotar GyroX, GyroY, GyroZ;

float accAngleX, accAngleY, gyroAngleX, gyroAngleY, gyroAngleZ;
balanceo flotante, cabeceo, guiñada;

float AccErrorX, AccErrorY, GyroErrorX, GyroErrorY, GyroErrorZ;
float tiempo transcurrido, tiempo actual, tiempo anterior;

entero c = 0;

configuración vacía () {

Serie.begin(19200);

Alambre.begin(); // Inicializar la comunicación

Wire.beginTransmission(MPU); // Iniciar comunicación con MPU6050 // MPU=0x68

Alambre.escribir(0x6B); // Habla con el registro 6B

Alambre.escribir(0x00); // Hacer reinicio - poner un 0 en el registro 6B

Wire.endTransmission(verdadero); // finaliza la transmisión

/*

// Configurar la sensibilidad del acelerómetro: rango de escala completa (predeterminado +/- 2 g)

Wire.beginTransmission(MPU);

Alambre.escribir(0x1C); //Habla para registrar ACCEL_CONFIG (1C hex)

Alambre.escribir(0x10); // Establecer bits de registro en 00010000 (+/- rango de escala completa de 8 g)

Wire.endTransmission(verdadero);

// Configure la sensibilidad del giroscopio: rango de escala completa (predeterminado +/- 250 grados / s)

Wire.beginTransmission(MPU);

Alambre.escribir(0x1B); // Hablar para registrar GYRO_CONFIG (1B hex)

Alambre.escribir(0x10); // Establecer bits de registro en 00010000 (1000 grados/s de escala completa)

Wire.endTransmission(verdadero);

retraso (20);

*/

// Llame a esta función si necesita obtener los valores de error de IMU para su módulo

calcular_IMU_error();

retraso (20);

}

bucle vacío() {

// === Leer datos del acelerómetro === //

Wire.beginTransmission(MPU);

Alambre.escribir(0x3B); // Empezar con el registro 0x3B (ACCEL_XOUT_H)

Wire.endTransmission(falso);

Wire.requestFrom(MPU, 6, verdadero); // Leer 6 registros en total, cada valor de eje se almacena en 2 registros

//Para un rango de +-2g, divida los valores brutos por 16384, de acuerdo con la hoja de datos

AccX = (Cable.leer() << 8 | Cable.leer()) / 16384.0; // valor del eje X

AccY = (Cable.leer() << 8 | Cable.leer()) / 16384.0; // valor del eje Y

AccZ = (Cable.leer() << 8 | Cable.leer()) / 16384.0; // valor del eje Z

// Calcular balanceo y cabeceo a partir de datos del acelerómetro

accAngleX = (atan(AccY / sqrt(pow(AccX, 2) + pow(AccZ, 2))) * 180 / PI) – 0.58; // AccErrorX ~(0.58) Consulte la función personalizada compute_IMU_error() para obtener más detalles
accAngleY ​​= (atan(-1 * AccX / sqrt(pow(AccY, 2) + pow(AccZ, 2))) * 180 / PI) + 1.58; // ACCERROR ~(-1.58)

// === Leer datos del giroscopio === //

hora anterior = hora actual; // El tiempo anterior se almacena antes de la lectura en tiempo real

hora_actual = milisegundos(); // Lectura en tiempo real en tiempo actual

Tiempo transcurrido = (tiempo actual – tiempo anterior) / 1000; // Divide por 1000 para obtener los segundos

Wire.beginTransmission(MPU);

Alambre.escribir(0x43); // Datos del giroscopio primera dirección de registro 0x43

Wire.endTransmission(falso);

Wire.requestFrom(MPU, 6, verdadero); // Leer 4 registros en total, cada valor de eje se almacena en 2 registros

GyroX = (Cable.leer() << 8 | Cable.leer()) / 131.0; // Para un rango de 250 grados/s, primero debemos dividir el valor bruto por 131,0, según la hoja de datos

GyroY = (Cable.leer() << 8 | Cable.leer()) / 131.0;

GyroZ = (Cable.leer() << 8 | Cable.leer()) / 131.0;

// Corrija las salidas con los valores de error calculados

GyroX=GyroX+0,56; // Error GyroX~(-0.56)

GyroY = GyroY – 2; // ErrorGyroY ~(2)

GiroZ=GiroZ+0,79; // ErrorGyroZ~(-0.8)

// Actualmente los valores brutos están en grados por segundo, grados/s, por lo que debemos multiplicar por envío(s) para obtener el ángulo en grados

gyroAngleX = gyroAngleX + GyroX * tiempo transcurrido; // grado/s * s = grado

gyroAngleY ​​= gyroAngleY ​​+ GyroY * tiempo transcurrido;

guiñada = guiñada + GyroZ * tiempo transcurrido;

// Filtro complementario: combina valores de ángulo de acelerómetro y giroscopio

balanceo = 0.96 * gyroAngleX + 0.04 * accAngleX;

paso = 0.96 * gyroAngleY ​​​​+ 0.04 * accAngleY;

// Imprime los valores en el monitor serial

Serial.print(rollo);

Serial.print("/");

Serial.print(tono);

Serial.print("/");

Serial.println(guiñada);

}

anular calcular_IMU_error() {

// Podemos llamar a esta función en la sección de configuración para calcular el error de datos del acelerómetro y giroscopio. A partir de ahí obtendremos los valores de error utilizados en las ecuaciones anteriores impresas en el monitor serie.

// Tenga en cuenta que tenemos que colocar la IMU plana para obtener los valores correctos, de modo que podamos obtener los valores correctos

// Lee los valores del acelerómetro 200 veces

mientras (c < 200) {

Wire.beginTransmission(MPU);

Alambre.escribir(0x3B);

Wire.endTransmission(falso);

Wire.requestFrom(MPU, 6, verdadero);

AccX = (Cable.leer() << 8 | Cable.leer()) / 16384.0;

AccY = (Cable.leer() << 8 | Cable.leer()) / 16384.0;
AccZ = (Cable.leer() << 8 | Cable.leer()) / 16384.0;

// Suma de todas las lecturas

AccErrorX = AccErrorX + ((atan((AccY) / sqrt(pow((AccX), 2) + pow((AccZ), 2))) * 180 / PI));

AccErrorY = AccErrorY + ((atan(-1 * (AccX) / sqrt(pow((AccY), 2) + pow((AccZ), 2))) * 180 / PI));

c++;

}

// Divide la suma por 200 para obtener el valor del error

AccErrorX = AccErrorX / 200;

AccErrorY = AccErrorY / 200;

c=0;

// Lee los valores del giroscopio 200 veces

mientras que (c < 200) {

Wire.beginTransmission(MPU);

Alambre.escribir(0x43);

Wire.endTransmission(falso);

Wire.requestFrom(MPU, 6, verdadero);

GyroX = Alambre.leer() << 8 | Alambre.read();

GyroY = Alambre.leer() << 8 | Alambre.read();

GyroZ = Alambre.leer() << 8 | Alambre.read();

// Suma de todas las lecturas

GyroErrorX = GyroErrorX + (GyroX / 131.0);

GyroErrorY = GyroErrorY + (GyroY / 131.0);

GyroErrorZ = GyroErrorZ + (GyroZ / 131.0);

c++;

}

// Divide la suma por 200 para obtener el valor del error

GyroErrorX = GyroErrorX / 200;

GyroErrorY = GyroErrorY / 200;

GyroErrorZ = GyroErrorZ / 200;

// Imprime valores de error al Serial Monitor

Serial.print("AccErrorX: ");

Serial.println(AccErrorX);

Serial.print("AccErrorY: ");

Serial.println(AccErrorY);

Serial.print("Error GyroX: ");

Serial.println(GyroErrorX);

Serial.print("ErrorGyroY: ");

Serial.println(GyroErrorY);

Serial.print("Error GyroZ: ");

Serial.println(GyroErrorZ);

}

Producción

De la programación anterior, podemos obtener los datos de balanceo, cabeceo o guiñada. Estos son los datos manipulados obtenidos usando los ángulos del giroscopio MPU6050.

Las aplicaciones del sensor MPU6050 incluyen principalmente controlador de mouse 3D, control remoto 3D, control de brazo robótico, dispositivos de control de gestos con las manos, robots autoequilibrados, etc.

Ventajas

los beneficios de la fusión de sensores Incluya lo siguiente.

  • El sensor de fusión se utiliza para proporcionar precisión en una amplia gama de condiciones de funcionamiento.
  • Los datos sensoriales integrados proporcionan dispositivos de reconocimiento multilaterales, fiables y de alto nivel.
  • La fusión de sensores tiene la capacidad de reunir entradas de múltiples LIDAR, cámaras y radares para formar un solo modelo del entorno en la región de un vehículo. El modelo resultante es más preciso porque equilibra las fuerzas de los diferentes sensores.
  • La fusión de sensores proporciona datos más completos y fiables en comparación con los sensores individuales
    La fusión de sensores reducirá los costos operativos al expandir la gama de diferentes dispositivos, como drones (vehículos aéreos no tripulados) y robótica, incluida la funcionalidad autónoma.
  • La fusión de sensores tiene como objetivo principal superar las limitaciones de los sensores individuales.
  • Un sistema de fusión de sensores mejora la fuerza del sistema de detección de carril para que el sistema sea más consistente.

Aplicaciones

los Aplicaciones de la fusión de sensores. Incluya lo siguiente.

  • La fusión de sensores se utiliza en el Sistema de posicionamiento global (GPS) y el Sistema de navegación inercial (INS), donde los datos de estos sistemas se pueden fusionar con diferentes técnicas. Por ejemplo, el filtro Kalman ampliado se usa para determinar la actitud de la aeronave con sensores de bajo costo.
  • La fusión de sensores permite la conciencia del contexto, que tiene un enorme potencial para el IoT (Internet de las cosas).
  • Mejora significativamente el rendimiento de detección de carril cuando se utilizan varios sensores y se aumenta la capacidad de percepción.

Así, se trata de una descripción general de la fusión de sensores que incluye diferentes algoritmos, así como herramientas utilizadas para diseñar, probar y simular sistemas que combinan información de múltiples sensores para mantener la ubicación y el conocimiento de la situación, como radar activo y pasivo, LIDAR, EO/IR, sonar, GPS e IMU. Aquí hay una pregunta para usted, ¿cuáles son las desventajas de la fusión de sensores?

Si quieres conocer otros artículos parecidos a Qué es Sensor Fusion: cómo funciona y sus aplicaciones puedes visitar la categoría Generalidades.

¡Más Contenido!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir