adding imu test

This commit is contained in:
2026-10-03 13:18:04 +00:00
commit 5ffcb922ec
+67
View File
@@ -0,0 +1,67 @@
#!/usr/bin/env python3
"""
imu_test.py - raw MPU-6500 / MPU-9250 readout (GY-6500, GY-9250 boards).
No filtering, no calibration, no sign flips.
Just shows what each axis does so we can map them to the robot.
Ctrl-C to quit.
"""
import time
from smbus2 import SMBus
BUS = 1
# MPU-6500 / MPU-9250 registers
CONFIG = 0x1A # gyro low-pass filter
GYRO_CONFIG = 0x1B # gyro range
ACCEL_CONFIG = 0x1C # accel range
ACCEL_CONFIG2 = 0x1D # accel low-pass filter
ACCEL_XOUT_H = 0x3B # accel x/y/z, temp, gyro x/y/z = 14 bytes
PWR_MGMT_1 = 0x6B
WHO_AM_I = 0x75
KNOWN = {0x70: "MPU-6500", 0x71: "MPU-9250", 0x73: "MPU-9255", 0x68: "MPU-6050"}
def s16(h, l):
v = (h << 8) | l
return v - 65536 if v & 0x8000 else v
bus = SMBus(BUS)
addr = None
for a in (0x68, 0x69):
try:
who = bus.read_byte_data(a, WHO_AM_I)
name = KNOWN.get(who, "unknown")
print(f"0x{a:02X}: WHO_AM_I = 0x{who:02X} ({name})")
if who in KNOWN and addr is None:
addr = a
except OSError:
print(f"0x{a:02X}: no response")
if addr is None:
raise SystemExit("No MPU found. Check wiring / run i2cdetect -y 1")
w = lambda reg, val: bus.write_byte_data(addr, reg, val)
w(PWR_MGMT_1, 0x80); time.sleep(0.1) # reset
w(PWR_MGMT_1, 0x01); time.sleep(0.05) # wake up, PLL clock
w(CONFIG, 0x03) # gyro low-pass ~41 Hz
w(GYRO_CONFIG, 0x08) # +-500 deg/s
w(ACCEL_CONFIG, 0x00) # +-2 g
w(ACCEL_CONFIG2, 0x03) # accel low-pass ~41 Hz
time.sleep(0.05)
print("\n ax ay az |a| | gx gy gz (g, deg/s)")
try:
while True:
d = bus.read_i2c_block_data(addr, ACCEL_XOUT_H, 14)
ax, ay, az = (s16(d[i], d[i + 1]) / 16384.0 for i in (0, 2, 4))
gx, gy, gz = (s16(d[i], d[i + 1]) / 65.5 for i in (8, 10, 12)) # skip temp at 6-7
mag = (ax * ax + ay * ay + az * az) ** 0.5
print(f"{ax:+6.2f} {ay:+6.2f} {az:+6.2f} {mag:4.2f} | {gx:+7.1f} {gy:+7.1f} {gz:+7.1f}")
time.sleep(0.2)
except KeyboardInterrupt:
print()
finally:
bus.close()