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 Feishu