Language
고정밀 IMU(관성 측정 장치) 자세 센서는 72MHz 고성능 32비트 프로세서 장착되어 실시간 자세 계산과 동적 보정을 지원합니다. 최대 100Hz의 데이터 업데이트 주파수로 빠른 응답과 안정적인 출력을 결합합니다. I2C와 시리얼 통신 모드를 모두 지원하며 마이크로컨트롤러와 Linux 메인 컨트롤러와 호환되고 ROS 시스템과 원활하게 통합됩니다.
이 모듈은 다음 고성능 응용 시나리오에 적합합니다:
- 로봇 동작 제어
- UAV 자세 안정화
- 지능형 내비게이션 및 위치 측정
- 모션 트래킹 시스템
- 산업 자동화
주요 기능
다중 버전 옵션
| 기능 | 6축 | 9축 | 10축 |
|---|---|---|---|
| 고성능 32비트 프로세서 | ✅ | ✅ | ✅ |
| 3축 자이로스코프 | ✅ | ✅ | ✅ |
| 3축 가속도계 | ✅ | ✅ | ✅ |
| 3축 자력계 | ❌ | ✅ | ✅ |
| 기압계 | ❌ | ❌ | ✅ |
| 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, Raspberry Pi, Jetson 시리즈, RDK 시리즈 등) 및 마이크로컨트롤러(STM32, MSPM0, ESP32, Pico, Arduino 등) |
| 동작 전압 | 5V or 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 라이브러리를 설치하세요:
# 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. 포트 매핑 설정(Linux 전용)
기기 재연결 후 포트 번호 변경을 방지하려면 영구 포트 매핑을 구성하세요:
# 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
기본 사용 예제
시리얼 통신 예제
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
리소스 & 지원
더 자세한 문서, 예제 코드, 기술 지원은 공식 리소스를 방문하세요:
- JuxiTechnology GitHub – 오픈소스 라이브러리, 예제 코드, 하드웨어 설계 파일
- Lark Wiki – 완전한 제품 문서, 사용자 가이드, FAQ
당사의 IMU 모듈은 Juxi Technology가 설계 및 제조하여 로보틱스와 IoT 애플리케이션을 위한 안정적인 고성능 관성 측정 솔루션을 제공합니다.

