Our high-precision IMU (Inertial Measurement Unit) attitude sensor is built with a 72MHz high-performance 32-bit processor that enables real-time attitude calculation and dynamic compensation. With data update frequencies up to 100Hz, it combines rapid response with stable output. Supporting both I2C and serial communication modes, it is compatible with microcontrollers and Linux main controllers, and seamlessly integrates with ROS systems.
This module is ideal for high-performance application scenarios including:
- Robot motion control
- UAV attitude stabilization
- Intelligent navigation and positioning
- Motion tracking systems
- Industrial automation
Key Features
Multiple Version Options
| Feature | 6-axis | 9-axis | 10-axis |
|---|---|---|---|
| High-performance 32-bit processor | ✅ | ✅ | ✅ |
| Triaxial gyroscope | ✅ | ✅ | ✅ |
| Triaxial accelerometer | ✅ | ✅ | ✅ |
| Three-axis magnetometer | ❌ | ✅ | ✅ |
| Barometer | ❌ | ❌ | ✅ |
| AHRS attitude data fusion algorithm | ❌ | ✅ | ✅ |
| Mahony filtering algorithm | ✅ | ✅ | ✅ |
| Application Scenario Description | Designed for cost-sensitive requirements, meets high dynamic response application standards. | Based on 6-axis hardware, integrates magnetometer and AHRS algorithm, significantly improves data stability and measurement accuracy. | Adds barometer on 9-axis basis, provides accurate altitude data, suitable for applications requiring high-precision 3D attitude and position sensing. |
Technical Specifications
| Parameter | Value |
|---|---|
| Serial Port Baud Rate | 115200bps |
| Output Frequency | Default 25Hz, supports adjustable range from 10Hz to 100Hz |
| I2C Clock Rate | 100KHz |
| Output Content | 3-axis acceleration, 3-axis angular velocity, 3-axis Euler angles, quaternion, temperature, (magnetometer for 9/10-axis, barometer/altitude for 10-axis) |
| Startup Time | 5000ms |
| Operating Temperature | -40°C ~ +85°C |
| Storage Temperature | -40°C ~ +100°C |
| Shock Resistance | 20kg (bare board) |
| Supported Devices | Linux main controllers (PC, Raspberry Pi, Jetson series, RDK series, etc.) and microcontrollers (STM32, MSPM0, ESP32, Pico, Arduino, etc.) |
| Operating Voltage | 5V or 3.3V |
| Operating Current | 11mA |
| Product Dimensions | 27.4mm × 22.6mm × 12mm |
| Product Weight | 3.8g |
| ROS Support | ROS1 / ROS2 |
Sensor Performance Parameters
| Sensor | Range | Resolution | RMS Noise (100Hz bandwidth) | Temperature Drift | Bandwidth |
|---|---|---|---|---|---|
| Accelerometer | ±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 |
| Magnetometer | ±8Gauss | 0.244mGauss/LSB | - | - | - |
| Barometer (10-axis) | 300~2000hPa | - | 1Pa RMS | - | - |
Navigation Data Performance
| Measurement | Typical Value |
|---|---|
| Pitch/Roll Angle Range (horizontal placement) | X: ±180°, Y: ±90° |
| Pitch/Roll Accuracy | 0.0055° |
| Heading/Yaw Angle Range (horizontal placement) | Z: ±180° |
| Heading/Yaw Accuracy | 0.0055° |
Pin Function Description
| Pin | Function |
|---|---|
| SDA | I2C Serial Data Line |
| SCL | I2C Serial Clock Line |
| GND | Ground |
| 3V3 | 3.3V Power Input |
| RX | Serial Port Receive |
| TX | Serial Port Transmit |
| 5V | 5V Power Input |
Quick Start Guide
1. Hardware Connection
The module supports both I2C and serial communication interfaces. Refer to the pin description table above for wiring.
Caution: Ensure correct power supply voltage (3.3V or 5V) and avoid reverse connection, which may cause permanent damage to the module.
2. Software Installation
First, install the required Python libraries:
pip install pyserial
pip install smbus2
Install the IMU library:
# 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. Port Mapping Configuration (Linux only)
To prevent port number changes after device reconnection, configure a persistent port mapping:
# 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
Basic Usage Examples
Serial Communication Example
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")
I2C Communication Example
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")
Running Official Library Examples
# Serial communication example
python3 IMU_Serial_Library.py --port /dev/ttyUSB0 --rate 50
# I2C communication example
python3 IMU_I2C_Library.py --port 1 --debug
Resources & Support
For more detailed documentation, example codes, and technical support, visit our official resources:
- JuxiTechnology GitHub - Open-source libraries, example codes, and hardware design files
- Lark Wiki - Complete product documentation, user guides, and FAQs
Our IMU modules are designed and manufactured by Juxi Technology, providing reliable high-performance inertial measurement solutions for robotics and IoT applications.

