Module de navigation inertielle IMU – Introduction au produit

Capteur d’attitude IMU haute précision - Unité de mesure inertielle haute performance pour la robotique, les drones et les applications IoT
Language

Notre capteur d’attitude IMU haute précision (Inertial Measurement Unit) est équipé d’un processeur 32 bits haute performance de 72 MHz qui permet le calcul d’attitude en temps réel et la compensation dynamique. Avec des fréquences de mise à jour des données allant jusqu’à 100 Hz, il combine réactivité et sortie stable. Compatible avec les modes de communication I2C et série, il fonctionne avec les microcontrôleurs et les contrôleurs principaux Linux, et s’intègre parfaitement aux systèmes ROS.

Ce module est idéal pour les scénarios d’application haute performance, notamment :

  • Contrôle des mouvements de robots
  • Stabilisation d'attitude des drones (UAV)
  • Navigation et positionnement intelligents
  • Systèmes de suivi de mouvement
  • Automatisation industrielle

Principales caractéristiques

Plusieurs options de version

Caractéristique 6 axes 9 axes 10 axes
Processeur 32 bits haute performance
Gyroscope triaxial
Accéléromètre triaxial
Magnétomètre triaxial
Baromètre
Algorithme de fusion de données d’attitude AHRS
Algorithme de filtrage de Mahony
Description des scénarios d'application Conçu pour les exigences sensibles aux coûts, répond aux normes des applications à réponse dynamique élevée. Basé sur du matériel 6 axes, intègre un magnétomètre et l’algorithme AHRS, améliore nettement la stabilité des données et la précision des mesures. Ajoute un baromètre à la base 9 axes, fournit des données d’altitude précises, adapté aux applications nécessitant une détection 3D haute précision de l’attitude et de la position.

Spécifications techniques

Paramètre Valeur
Débit en bauds du port série 115200bps
Fréquence de sortie 25 Hz par défaut, plage réglable de 10 Hz à 100 Hz
Fréquence d'horloge I2C 100KHz
Contenu de sortie Accélération 3 axes, vitesse angulaire 3 axes, angles d’Euler 3 axes, quaternion, température (magnétomètre pour 9/10 axes, baromètre/altitude pour 10 axes)
Temps de démarrage 5000ms
Température de fonctionnement -40°C ~ +85°C
Température de stockage -40°C ~ +100°C
Résistance aux chocs 20 kg (carte nue)
Appareils pris en charge Contrôleurs principaux Linux (PC, Raspberry Pi, série Jetson, série RDK, etc.) et microcontrôleurs (STM32, MSPM0, ESP32, Pico, Arduino, etc.)
Tension de fonctionnement 5V or 3.3V
Courant de fonctionnement 11mA
Dimensions du produit 27.4mm × 22.6mm × 12mm
Poids du produit 3.8g
Prise en charge ROS ROS1 / ROS2

Paramètres de performance du capteur

Capteur Plage Résolution Bruit RMS (bande passante de 100 Hz) Dérive en température Bande passante
Accéléromètre ±16g 0.0005g/LSB 1.0mg RMS ±0.15mg/°C 12.5~1600Hz
Gyroscope ±2000°/s 0.061°/s/LSB 0.07°/s RMS 0.015°/s/°C 12.5~1600Hz
Magnétomètre ±8Gauss 0.244mGauss/LSB - - -
Baromètre (10 axes) 300~2000hPa - 1Pa RMS - -

Performance des données de navigation

Mesure Valeur typique
Plage d’angles de tangage/roulis (placement horizontal) X: ±180°, Y: ±90°
Précision de tangage/roulis 0.0055°
Plage d’angles de cap/lacet (placement horizontal) Z: ±180°
Précision de cap/lacet 0.0055°

Description des fonctions des broches

Broche Fonction
SDA Ligne de données série I2C
SCL Ligne d'horloge série I2C
GND Masse
3V3 Entrée d'alimentation 3,3 V
RX Réception du port série
TX Transmission du port série
5V Entrée d'alimentation 5 V

Guide de démarrage rapide

1. Connexion matérielle

Le module prend en charge les interfaces de communication I2C et série. Reportez-vous au tableau de description des broches ci-dessus pour le câblage.

Attention : assurez-vous d’utiliser la bonne tension d’alimentation (3,3 V ou 5 V) et évitez toute inversion de polarité, qui peut endommager définitivement le module.

2. Installation du logiciel

Installez d’abord les bibliothèques Python requises :

pip install pyserial
pip install smbus2

Installez la bibliothèque 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. Configuration du mappage de port (Linux uniquement)

Pour éviter les changements de numéro de port après reconnexion de l’appareil, configurez un mappage de port persistant :

# 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

Exemples d'utilisation de base

Exemple de communication série

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

Exemple de communication 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")

Exécution des exemples de la bibliothèque officielle

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

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

Ressources et support

Pour une documentation plus détaillée, des exemples de code et un support technique, consultez nos ressources officielles :

  • JuxiTechnology GitHub – Bibliothèques open source, exemples de code et fichiers de conception matérielle
  • Lark Wiki – Documentation produit complète, guides d’utilisation et FAQ

Nos modules IMU sont conçus et fabriqués par Juxi Technology, offrant des solutions de mesure inertielle haute performance fiables pour la robotique et les applications IoT.

Cet article est un résumé. Lisez la documentation technique complète sur le Wiki.

Lire l'article complet sur le Wiki →

Ouvrir dans le Wiki Feishu