IMU Inertial Navigation Module - Product Introduction

High-Precision IMU Attitude Sensor - High Performance Inertial Measurement Unit for Robotics, Drones, and IoT Applications
Language

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.