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.

