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
輸出內容 三軸加速度、三軸角速度、三軸歐拉角、四元數、溫度、(9/10軸有磁力計,10軸有氣壓計/高度)
啟動時間 5000ms
工作溫度 -40°C ~ +85°C
儲存溫度 -40°C ~ +100°C
抗震性 20kg (裸板)
支援設備 Linux主控制器(PC、Raspberry Pi、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 模組由聚熙科技設計和製造,為機器人技術和物聯網應用提供可靠的高性能慣性測量解決方案。

這篇文章是摘要。請在維基上閱讀完整的技術文件。

在維基百科上閱讀全文 →

在飛書知識庫中開啟