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.

