Módulo de navegación inercial IMU – Introducción al producto

Sensor de actitud IMU de alta precisión - Unidad de medición inercial de alto rendimiento para robótica, drones y aplicaciones IoT
Language

Nuestro sensor de actitud IMU de alta precisión (Unidad de medición inercial) está equipado con un procesador de 32 bits de alto rendimiento a 72 MHz que permite el cálculo de actitud en tiempo real y la compensación dinámica. Con frecuencias de actualización de datos de hasta 100 Hz, combina una respuesta rápida con una salida estable. Compatible con los modos de comunicación I2C y serie, funciona con microcontroladores y controladores principales Linux, y se integra perfectamente con los sistemas ROS.

Este módulo es ideal para escenarios de aplicación de alto rendimiento, entre ellos:

  • Control del movimiento de robots
  • Estabilización de actitud de UAV
  • Navegación y posicionamiento inteligentes
  • Sistemas de seguimiento de movimiento
  • Automatización industrial

Características principales

Múltiples opciones de versión

Característica 6 ejes 9 ejes 10 ejes
Procesador de 32 bits de alto rendimiento ✅ ✅ ✅
Giróscopo triaxial ✅ ✅ ✅
Acelerómetro triaxial ✅ ✅ ✅
Magnetómetro de tres ejes ❌ ✅ ✅
Barómetro ❌ ❌ ✅
Algoritmo de fusión de datos de actitud AHRS ❌ ✅ ✅
Algoritmo de filtrado de Mahony ✅ ✅ ✅
Descripción de los escenarios de aplicación Diseñado para requisitos sensibles al costo, cumple los estándares de aplicaciones de alta respuesta dinámica. Basado en hardware de 6 ejes, integra magnetómetro y algoritmo AHRS, lo que mejora significativamente la estabilidad de los datos y la precisión de medición. Añade barómetro sobre la base de 9 ejes, proporciona datos de altitud precisos, adecuado para aplicaciones que requieren detección 3D de alta precisión de actitud y posición.

Especificaciones técnicas

Parámetro Valor
Velocidad en baudios del puerto serie 115200bps
Frecuencia de salida 25 Hz por defecto, rango ajustable de 10 Hz a 100 Hz
Velocidad de reloj I2C 100KHz
Contenido de salida Aceleración de 3 ejes, velocidad angular de 3 ejes, ángulos de Euler de 3 ejes, cuaternión, temperatura (magnetómetro para versiones de 9/10 ejes, barómetro/altitud para la de 10 ejes)
Tiempo de arranque 5000ms
Temperatura de funcionamiento -40°C ~ +85°C
Temperatura de almacenamiento -40°C ~ +100°C
Resistencia a los golpes 20 kg (placa desnuda)
Dispositivos compatibles Controladores principales Linux (PC, Raspberry Pi, serie Jetson, serie RDK, etc.) y microcontroladores (STM32, MSPM0, ESP32, Pico, Arduino, etc.)
Tensión de funcionamiento 5V or 3.3V
Corriente de funcionamiento 11mA
Dimensiones del producto 27.4mm × 22.6mm × 12mm
Peso del producto 3.8g
Compatibilidad con ROS ROS1 / ROS2

Parámetros de rendimiento del sensor

Sensor Rango Resolución Ruido RMS (ancho de banda de 100 Hz) Deriva térmica Ancho de banda
Acelerómetro ±16g 0.0005g/LSB 1.0mg RMS ±0.15mg/°C 12.5~1600Hz
Giróscopo ±2000°/s 0.061°/s/LSB 0.07°/s RMS 0.015°/s/°C 12.5~1600Hz
Magnetómetro ±8Gauss 0.244mGauss/LSB - - -
Barómetro (10 ejes) 300~2000hPa - 1Pa RMS - -

Rendimiento de los datos de navegación

Medición Valor típico
Rango del ángulo de cabeceo/balanceo (colocación horizontal) X: ±180°, Y: ±90°
Precisión de cabeceo/balanceo 0.0055°
Rango del ángulo de rumbo/guiñada (colocación horizontal) Z: ±180°
Precisión de rumbo/guiñada 0.0055°

Descripción de las funciones de los pines

Pin Función
SDA Línea de datos serie I2C
SCL Línea de reloj serie I2C
GND Tierra
3V3 Entrada de alimentación de 3,3 V
RX Recepción del puerto serie
TX Transmisión del puerto serie
5V Entrada de alimentación de 5 V

Guía de inicio rápido

1. Conexión de hardware

El módulo admite interfaces de comunicación I2C y serie. Consulta la tabla de descripción de pines anterior para el cableado.

Precaución: asegúrate de usar la tensión de alimentación correcta (3,3 V o 5 V) y evita la conexión inversa, que puede dañar el módulo de forma permanente.

2. Instalación del software

Primero, instala las bibliotecas de Python necesarias:

pip install pyserial
pip install smbus2

Instala la biblioteca IMU:

# Clone and enter the library directory
git clone https://github.com/Juxi-Technology/ICM42670P-High-Precision-IMU-Module.git
cd ../IMU_ROS2/IMU_Library

# Install the library
pip install -e .

3. Configuración de asignación de puerto (solo Linux)

Para evitar cambios de número de puerto tras reconectar el dispositivo, configura una asignación de puerto persistente:

# Create and edit the udev rules file
sudo gedit /etc/udev/rules.d/99-serial-imu.rules

# If gedit command is not found, install it first
sudo apt install gedit

# Add the following mapping content
KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777", SYMLINK+="imu-serial"

# Save and exit the editor, then run these commands to activate the rules
sudo udevadm trigger
sudo service udev reload
sudo service udev restart

# Verify the configuration
ll /dev/imu-serial

# Expected output example:
lrwxrwxrwx 1 root root 7 Jan 22 10:00 /dev/imu-serial -> ttyUSB0

Ejemplos de uso básico

Ejemplo de comunicación serie

import serial
import json

# Configure serial port
ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=1)

try:
    while True:
        line = ser.readline().decode('utf-8').strip()
        if line:
            # Parse IMU data
            data = json.loads(line)
            print(f"Acceleration: X={data['acc_x']:.2f}g, Y={data['acc_y']:.2f}g, Z={data['acc_z']:.2f}g")
            print(f"Gyroscope: X={data['gyro_x']:.2f}°/s, Y={data['gyro_y']:.2f}°/s, Z={data['gyro_z']:.2f}°/s")
            print(f"Euler Angles: Roll={data['roll']:.2f}°, Pitch={data['pitch']:.2f}°, Yaw={data['yaw']:.2f}°")
            print("-" * 50)
            
except KeyboardInterrupt:
    ser.close()
    print("Serial connection closed")

Ejemplo de comunicación I2C

import smbus2
import time

# I2C configuration
I2C_BUS = 1
IMU_ADDR = 0x68

bus = smbus2.SMBus(I2C_BUS)

def read_imu_data():
    # Read 14 bytes of data from IMU
    data = bus.read_i2c_block_data(IMU_ADDR, 0x3B, 14)
    
    # Convert raw data to meaningful values
    acc_x = (data[0] << 8 | data[1]) / 16384.0
    acc_y = (data[2] << 8 | data[3]) / 16384.0
    acc_z = (data[4] << 8 | data[5]) / 16384.0
    gyro_x = (data[8] << 8 | data[9]) / 131.0
    gyro_y = (data[10] << 8 | data[11]) / 131.0
    gyro_z = (data[12] << 8 | data[13]) / 131.0
    
    return acc_x, acc_y, acc_z, gyro_x, gyro_y, gyro_z

try:
    while True:
        acc_x, acc_y, acc_z, gyro_x, gyro_y, gyro_z = read_imu_data()
        print(f"Acc: X={acc_x:.2f}g, Y={acc_y:.2f}g, Z={acc_z:.2f}g")
        print(f"Gyro: X={gyro_x:.2f}°/s, Y={gyro_y:.2f}°/s, Z={gyro_z:.2f}°/s")
        time.sleep(0.1)
        
except KeyboardInterrupt:
    bus.close()
    print("I2C connection closed")

Ejecutar los ejemplos de la biblioteca oficial

# Serial communication example
python3 IMU_Serial_Library.py --port /dev/ttyUSB0 --rate 50

# I2C communication example
python3 IMU_I2C_Library.py --port 1 --debug

Recursos y soporte

Para documentación más detallada, códigos de ejemplo y soporte técnico, visita nuestros recursos oficiales:

  • JuxiTechnology GitHub – Bibliotecas de código abierto, códigos de ejemplo y archivos de diseño de hardware
  • Lark Wiki – Documentación completa del producto, guías de usuario y preguntas frecuentes

Nuestros módulos IMU están diseñados y fabricados por Juxi Technology, y ofrecen soluciones fiables de medición inercial de alto rendimiento para robótica y aplicaciones IoT.

Este artículo es un resumen. Lee la documentación técnica completa en el Wiki.

Leer el artículo completo en el Wiki →

Abrir en el Wiki de JuxiTech