IMU惯性导航模块 - 产品介绍

高精度IMU姿态传感器 - 机器人、无人机和物联网应用高性能惯性测量单元
语言

我们的高精度IMU(惯性测量单元)姿态传感器内置了72MHz高性能32位处理器,可实现实时姿态计算和动态补偿。数据更新频率高达100Hz,结合了快速响应和稳定输出。支持I2C和串口通信模式,兼容微控制器和Linux主控制器,并可与ROS系统无缝集成。

该模块非常适用于以下高性能应用场景:

  • 机器人运动控制
  • 无人机姿态稳定
  • 智能导航与定位
  • 运动跟踪系统
  • 工业自动化

主要特点

多种版本选择

功能 6轴 9轴 10轴
高性能32位处理器
三轴陀螺仪
三轴加速度计
三轴磁力计
气压计
AHRS姿态数据融合算法
Mahony滤波算法
应用场景描述 专为成本敏感型需求设计,满足高动态响应应用标准。 基于6轴硬件,集成磁力计和AHRS算法,显著提升数据稳定性和测量精度。 在9轴基础上增加气压计,提供精确高度数据,适用于需要高精度3D姿态和位置传感的应用。

技术规格

参数
串口波特率 115200bps
输出频率 默认25Hz,支持10Hz至100Hz可调范围
I2C时钟频率 100KHz
输出内容 3轴加速度、3轴角速度、3轴欧拉角、四元数、温度、(9/10轴带磁力计,10轴带气压计/高度)
启动时间 5000ms
工作温度 -40°C ~ +85°C
存储温度 -40°C ~ +100°C
抗冲击性 20kg (裸板)
支持设备 Linux主控(PC、树莓派、Jetson系列、RDK系列等)和微控制器(STM32、MSPM0、ESP32、Pico、Arduino等)
工作电压 5V 或 3.3V
工作电流 11mA
产品尺寸 27.4mm × 22.6mm × 12mm
产品重量 3.8g
ROS支持 ROS1 / ROS2

传感器性能参数

传感器 量程 分辨率 RMS噪声 (100Hz带宽) 温度漂移 带宽
加速度计 ±16g 0.0005g/LSB 1.0mg RMS ±0.15mg/°C 12.5~1600Hz
陀螺仪 ±2000°/s 0.061°/s/LSB 0.07°/s RMS 0.015°/s/°C 12.5~1600Hz
磁力计 ±8Gauss 0.244mGauss/LSB - - -
气压计 (10轴) 300~2000hPa - 1Pa RMS - -

导航数据性能

测量项 典型值
俯仰/横滚角度范围 (水平放置) X: ±180°, Y: ±90°
俯仰/横滚精度 0.0055°
航向/偏航角度范围 (水平放置) Z: ±180°
航向/偏航精度 0.0055°

引脚功能描述

引脚 功能
SDA I2C串行数据线
SCL I2C串行时钟线
GND
3V3 3.3V电源输入
RX 串口接收
TX 串口发送
5V 5V电源输入

快速入门指南

1. 硬件连接

该模块支持I2C和串口通信接口。请参考上方的引脚描述表进行接线。

注意:请确保正确的电源电压(3.3V或5V),避免反接,否则可能对模块造成永久性损坏。

2. 软件安装

首先,安装所需的Python库:

pip install pyserial
pip install smbus2

安装IMU库:

# 克隆并进入库目录
git clone https://github.com/Juxi-Technology/ICM42670P-High-Precision-IMU-Module.git
cd ../IMU_ROS2/IMU_Library

# 安装库
pip install -e .

3. 端口映射配置(仅限Linux)

为防止设备重新连接后端口号变化,请配置持久化端口映射:

# 创建并编辑udev规则文件
sudo gedit /etc/udev/rules.d/99-serial-imu.rules

# 如果找不到gedit命令,请先安装
sudo apt install gedit

# 添加以下映射内容
KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777", SYMLINK+="imu-serial"

# 保存并退出编辑器,然后运行这些命令以激活规则
sudo udevadm trigger
sudo service udev reload
sudo service udev restart

# 验证配置
ll /dev/imu-serial

# 预期输出示例:
lrwxrwxrwx 1 root root 7 Jan 22 10:00 /dev/imu-serial -> ttyUSB0

基本使用示例

串口通信示例

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 通信示例

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

运行官方库示例

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

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

资源与支持

如需更详细的文档、示例代码和技术支持,请访问我们的官方资源:

我们的 IMU 模块由聚星科技设计和制造,为机器人和物联网应用提供可靠的高性能惯性测量解决方案。

本文为概述。请阅读维基上的完整技术文档。

阅读维基百科上的完整文章 →

在飞书知识库中打开