Saltar al contenido principal

Uso de la IMU integrada de reCamera Pro para la detección de inclinación y sacudidas

Introducción

Este artículo explica cómo utilizar la unidad de medición inercial (IMU) de seis ejes integrada en la reCamera Pro — el giroscopio ICM-42670-P — para implementar la detección de inclinación y sacudidas del dispositivo. Cuando el dispositivo se inclina o se sacude, el sistema reproducirá avisos de voz correspondientes a través del altavoz integrado. A través de este tutorial, aprenderás cómo leer datos brutos del giroscopio mediante el controlador IIO de Linux, reproducir sonidos de advertencia usando el controlador de audio ALSA y, en última instancia, integrar un programa completo de detección y alerta.

Preparación de hardware

  • una reCamera Pro
reCamera Pro

Principio de implementación

Al recopilar datos brutos de velocidad angular del giroscopio integrado (ICM-42670-P), el sistema determina si el dispositivo se ha inclinado o se ha sacudido. La implementación actual utiliza un sencillo juicio basado en umbrales, que puede optimizarse más adelante según los requisitos reales.

Detección de sacudidas

Cuando el valor absoluto de los datos de velocidad angular en cualquier eje supera un umbral preestablecido, se determina como una sacudida.

Detección de inclinación

Cuando el valor absoluto de los datos de velocidad angular en cualquier eje supera un umbral preestablecido, se determina como una inclinación.

Adquisición de datos del giroscopio integrado

El entorno Linux de la reCamera Pro utiliza el controlador IIO (Industrial I/O), que expone los datos y la configuración del sensor a través de la interfaz sysfs, lo que permite que las aplicaciones en espacio de usuario accedan a ellos. La ruta de los datos del sensor es:

/sys/bus/iio/devices/iio:device1

Los archivos de datos brutos del giroscopio se exponen en este directorio, como se muestra en la imagen siguiente:

Para obtener los datos brutos del giroscopio, simplemente lee el archivo correspondiente. Por ejemplo, para obtener los datos del eje X del giroscopio, lee el archivo in_anglvel_x_raw:

cat /sys/bus/iio/devices/iio:device1/in_anglvel_x_raw

El resultado de la ejecución se muestra a continuación:

Uso del altavoz integrado

El altavoz integrado de la reCamera Pro se controla mediante el controlador estándar ALSA de Linux. Puedes ver los dispositivos de tarjeta de sonido actuales con el siguiente comando:

aplay -l

Utiliza el siguiente comando para reproducir un archivo de audio:

aplay test.wav
nota

aplay es un reproductor ALSA PCM. Solo puede reproducir datos en formato PCM/WAV y no puede decodificar MP3. Puedes usar el siguiente comando para convertir MP3 a formato WAV:

ffmpeg -i test.mp3 test.wav

Código de implementación básica

Ahora que entendemos cómo leer datos brutos del giroscopio y reproducir audio, escribamos el código para implementar toda la funcionalidad.

Adquisición de datos del giroscopio

A continuación se muestra un ejemplo de función mínima que demuestra cómo recopilar datos del giroscopio en el eje X. Puedes ampliar esta función para obtener datos de otros ejes.

#!/usr/bin/env python3

DEVICE = "/sys/bus/iio/devices/iio:device1"

with open(f"{DEVICE}/in_anglvel_scale", "r") as f:
scale = float(f.read().strip())

with open(f"{DEVICE}/in_anglvel_x_raw", "r") as f:
raw = int(f.read().strip())

gyro_x = raw * scale

print(f"Gyroscope X: {gyro_x:.6f} rad/s")

Reproducción de audio

Cuando el dispositivo detecta una inclinación o una sacudida, es necesario reproducir un aviso de voz correspondiente. El siguiente código muestra cómo reproducir audio usando Python:

#!/usr/bin/env python3

import subprocess

AUDIO = "test.wav"

subprocess.run([
"aplay",
AUDIO
])

Código de implementación final

  • Cuando el dispositivo se sacude, reproducirá "Warning: Do not shake the device".
  • Cuando el dispositivo se inclina, reproducirá "Warning: The equipment has toppled over. Please immediately check the equipment status to prevent any accidents".

El código correspondiente se puede descargar desde reCamera_PRO_IMU_Detect.

Despliegue del código

Los siguientes pasos describen cómo desplegar el código en la reCamera Pro y ejecutarlo:

  1. Sube la carpeta completa a la reCamera Pro mediante SSH:
scp -r ./icm42670_project root@deviceIP:/userdata
  1. Ejecuta el programa principal:
./main.py
nota
  1. El programa realizará una operación de calibración en la primera ejecución. Asegúrate de que el dispositivo esté colocado de forma estable antes de ejecutar main.py. Si es necesario recalibrar (la duración de calibración predeterminada es de 3 segundos), ejecuta:
./main.py --force-calib
  1. Ver la ayuda de uso del código:
./main.py --help

Solución de problemas

  • No se pueden leer los datos del giroscopio: Verifica que la ruta /sys/bus/iio/devices/iio:device1 exista y que el archivo in_anglvel_x_raw sea legible. Si la ruta no existe, es posible que el controlador IIO no esté cargado; comprueba los módulos del kernel.
  • Fallo en la reproducción de audio: Confirma que el archivo de audio esté en formato WAV y que el comando aplay esté disponible. Si el altavoz no emite sonido, revisa la configuración de volumen de ALSA.
  • Fallo en la calibración: Asegúrate de que el dispositivo esté inmóvil y nivelado durante la calibración. Si el tiempo de calibración no es suficiente, utiliza --force-calib para recalibrar.

Soporte técnico y debate sobre el producto

Gracias por elegir nuestros productos. Estamos aquí para ofrecerte diferentes tipos de soporte y garantizar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos múltiples canales de comunicación para adaptarnos a distintas preferencias y necesidades.

Loading Comments...