Modulo di navigazione inerziale IMU – Introduzione al prodotto

Sensore di assetto IMU ad alta precisione - Unità di misura inerziale ad alte prestazioni per robotica, droni e applicazioni IoT
Language

Il nostro sensore di assetto IMU ad alta precisione (Inertial Measurement Unit) è dotato di un processore 32 bit ad alte prestazioni a 72MHz in grado di eseguire il calcolo dell’assetto in tempo reale e la compensazione dinamica. Con frequenze di aggiornamento fino a 100Hz, combina risposta rapida e output stabile. Supporta sia la comunicazione I2C che seriale, è compatibile con microcontrollori e controller Linux e si integra perfettamente con i sistemi ROS.

Questo modulo è ideale per scenari applicativi ad alte prestazioni, tra cui:

  • Controllo del movimento dei robot
  • Stabilizzazione dell'assetto UAV
  • Navigazione e posizionamento intelligenti
  • Sistemi di motion tracking
  • Automazione industriale

Caratteristiche principali

Più opzioni di versione

Caratteristica 6 assi 9 assi 10 assi
Processore 32 bit ad alte prestazioni
Giroscopio triassiale
Accelerometro triassiale
Magnetometro a tre assi
Barometro
Algoritmo di fusione dati di assetto AHRS
Algoritmo di filtraggio Mahony
Descrizione degli scenari applicativi Progettato per esigenze sensibili ai costi, soddisfa gli standard applicativi ad alta risposta dinamica. Basato su hardware a 6 assi, integra magnetometro e algoritmo AHRS, migliorando sensibilmente la stabilità dei dati e la precisione di misura. Aggiunge il barometro alla base a 9 assi, fornendo dati di altitudine accurati, adatto ad applicazioni che richiedono rilevamento 3D ad alta precisione di assetto e posizione.

Specifiche tecniche

Parametro Valore
Baud rate porta seriale 115200bps
Frequenza di uscita Default 25Hz, intervallo regolabile da 10Hz a 100Hz
Clock rate I2C 100KHz
Contenuto in uscita Accelerazione 3 assi, velocità angolare 3 assi, angoli di Eulero 3 assi, quaternione, temperatura (magnetometro per 9/10 assi, barometro/altitudine per 10 assi)
Tempo di avvio 5000ms
Temperatura di esercizio -40°C ~ +85°C
Temperatura di stoccaggio -40°C ~ +100°C
Resistenza agli urti 20kg (scheda nuda)
Dispositivi supportati Controller Linux (PC, Raspberry Pi, serie Jetson, serie RDK, ecc.) e microcontrollori (STM32, MSPM0, ESP32, Pico, Arduino, ecc.)
Tensione di esercizio 5V or 3.3V
Corrente di esercizio 11mA
Dimensioni del prodotto 27.4mm × 22.6mm × 12mm
Peso del prodotto 3.8g
Supporto ROS ROS1 / ROS2

Parametri di prestazione del sensore

Sensore Range Risoluzione Rumore RMS (larghezza di banda 100Hz) Deriva termica Larghezza di banda
Accelerometro ±16g 0.0005g/LSB 1.0mg RMS ±0.15mg/°C 12.5~1600Hz
Giroscopio ±2000°/s 0.061°/s/LSB 0.07°/s RMS 0.015°/s/°C 12.5~1600Hz
Magnetometro ±8Gauss 0.244mGauss/LSB - - -
Barometro (10 assi) 300~2000hPa - 1Pa RMS - -

Prestazioni dei dati di navigazione

Misura Valore tipico
Range angolo pitch/roll (posizionamento orizzontale) X: ±180°, Y: ±90°
Precisione pitch/roll 0.0055°
Range angolo heading/yaw (posizionamento orizzontale) Z: ±180°
Precisione heading/yaw 0.0055°

Descrizione delle funzioni dei pin

Pin Funzione
SDA Linea dati seriale I2C
SCL Linea di clock seriale I2C
GND Terra
3V3 Ingresso alimentazione 3.3V
RX Ricezione porta seriale
TX Trasmissione porta seriale
5V Ingresso alimentazione 5V

Guida rapida

1. Collegamento hardware

Il modulo supporta sia interfacce di comunicazione I2C che seriali. Per il cablaggio fare riferimento alla tabella di descrizione dei pin qui sopra.

Attenzione: assicurare la corretta tensione di alimentazione (3.3V o 5V) ed evitare l’inversione di polarità, che può danneggiare in modo permanente il modulo.

2. Installazione del software

Per prima cosa, installa le librerie Python richieste:

pip install pyserial
pip install smbus2

Installa la libreria 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. Configurazione del port mapping (solo Linux)

Per evitare cambi di numero di porta dopo la riconnessione del dispositivo, configurare un port mapping 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

Esempi di utilizzo di base

Esempio di comunicazione seriale

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

Esempio di comunicazione 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")

Esecuzione degli esempi della libreria ufficiale

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

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

Risorse e supporto

Per documentazione più dettagliata, codici di esempio e supporto tecnico, visita le nostre risorse ufficiali:

  • JuxiTechnology GitHub – Librerie open source, codici di esempio e file di progettazione hardware
  • Lark Wiki – Documentazione completa del prodotto, guide utente e FAQ

I nostri moduli IMU sono progettati e prodotti da Juxi Technology, offrendo soluzioni di misura inerziale affidabili e ad alte prestazioni per robotica e applicazioni IoT.

Questo articolo è un riassunto. Leggi la documentazione tecnica completa sul Wiki.

Leggi l'articolo completo sul Wiki →

Apri nel Wiki Feishu