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.

