Módulo de Navegação Inercial IMU — Introdução ao Produto

Sensor de Atitude IMU de Alta Precisão - Unidade de Medição Inercial de Alto Desempenho para Robótica, Drones e Aplicações de IoT
Idioma

Nosso sensor de atitude IMU (Unidade de Medição Inercial) de alta precisão é construído com um processador de 32 bits de alto desempenho a 72MHz que possibilita cálculo de atitude em tempo real e compensação dinâmica. Com frequências de atualização de dados de até 100Hz, ele combina resposta rápida com saída estável. Suporta os modos de comunicação I2C e serial, é compatível com microcontroladores e controladores principais Linux e se integra perfeitamente aos sistemas ROS.

Este módulo é ideal para cenários de aplicação de alto desempenho, incluindo:

  • Controle de movimento de robôs
  • Estabilização de atitude de UAVs
  • Navegação e posicionamento inteligentes
  • Sistemas de rastreamento de movimento
  • Automação industrial

Principais recursos

Opções de múltiplas versões

Recurso 6 eixos 9 eixos 10 eixos
Processador de 32 bits de alto desempenho ✅ ✅ ✅
Giroscópio triaxial ✅ ✅ ✅
Acelerômetro triaxial ✅ ✅ ✅
Magnetômetro de três eixos ❌ ✅ ✅
Barômetro ❌ ❌ ✅
Algoritmo de fusão de dados de atitude AHRS ❌ ✅ ✅
Algoritmo de filtragem Mahony ✅ ✅ ✅
Descrição do cenário de aplicação Projetado para requisitos sensíveis a custos, atende a padrões de aplicação de alta resposta dinâmica. Com base no hardware de 6 eixos, integra o magnetômetro e o algoritmo AHRS, melhorando significativamente a estabilidade dos dados e a precisão de medição. Adiciona barômetro à base de 9 eixos, fornece dados precisos de altitude; adequado para aplicações que exigem sensoriamento de atitude e posição em 3D de alta precisão.

Especificações técnicas

Parâmetro Valor
Taxa de transmissão da porta serial 115200bps
Frequência de saída Padrão 25Hz, suporta faixa ajustável de 10Hz a 100Hz
Taxa de clock I2C 100KHz
Conteúdo de saída Aceleração de 3 eixos, velocidade angular de 3 eixos, ângulos de Euler de 3 eixos, quatérnio, temperatura (magnetômetro para 9/10 eixos, barômetro/altitude para 10 eixos)
Tempo de inicialização 5000ms
Temperatura de operação -40°C ~ +85°C
Temperatura de armazenamento -40°C ~ +100°C
Resistência a impacto 20kg (placa nua)
Dispositivos compatíveis Controladores principais Linux (PC, Raspberry Pi, linha Jetson, linha RDK, etc.) e microcontroladores (STM32, MSPM0, ESP32, Pico, Arduino, etc.)
Tensão de operação 5V ou 3.3V
Corrente de operação 11mA
Dimensões do produto 27.4mm × 22.6mm × 12mm
Peso do produto 3.8g
Suporte a ROS ROS1 / ROS2

Parâmetros de desempenho dos sensores

Sensor Faixa Resolução Ruído RMS (largura de banda de 100Hz) Deriva de temperatura Largura de banda
Acelerômetro ±16g 0.0005g/LSB 1.0mg RMS ±0.15mg/°C 12.5~1600Hz
Giroscópio ±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 eixos) 300~2000hPa - 1Pa RMS - -

Desempenho dos dados de navegação

Medição Valor típico
Faixa do ângulo de arfagem/rolagem (posicionamento horizontal) X: ±180°, Y: ±90°
Precisão de arfagem/rolagem 0.0055°
Faixa do ângulo de proa/guinada (posicionamento horizontal) Z: ±180°
Precisão de proa/guinada 0.0055°

Descrição das funções dos pinos

Pino Função
SDA Linha de dados serial I2C
SCL Linha de clock serial I2C
GND Terra
3V3 Entrada de alimentação 3.3V
RX Recepção da porta serial
TX Transmissão da porta serial
5V Entrada de alimentação 5V

Guia de início rápido

1. Conexão de hardware

O módulo suporta as interfaces de comunicação I2C e serial. Consulte a tabela de descrição dos pinos acima para realizar as conexões.

Atenção: certifique-se de que a tensão de alimentação esteja correta (3.3V ou 5V) e evite conexões invertidas, que podem causar danos permanentes ao módulo.

2. Instalação de software

Primeiro, instale as bibliotecas Python necessárias:

pip install pyserial
pip install smbus2

Instale a biblioteca do 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. Configuração de mapeamento de porta (somente Linux)

Para evitar mudanças no número da porta após a reconexão do dispositivo, configure um mapeamento de porta 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

Exemplos básicos de uso

Exemplo de comunicação serial

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")

Exemplo de comunicação 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")

Executando exemplos oficiais da biblioteca

# 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 e suporte

Para obter documentação mais detalhada, códigos de exemplo e suporte técnico, visite nossos recursos oficiais:

  • JuxiTechnology GitHub - Bibliotecas de código aberto, códigos de exemplo e arquivos de design de hardware
  • Lark Wiki - Documentação completa do produto, guias do usuário e perguntas frequentes

Nossos módulos IMU são projetados e fabricados pela Juxi Technology, oferecendo soluções confiáveis de medição inercial de alto desempenho para aplicações de robótica e IoT.

Este artigo é um resumo. Leia a documentação técnica completa no Wiki.

Ler Artigo Completo no Wiki →

Abrir no JuxiTech Wiki