commit 5ffcb922ecd98356cf0298a3ea0b7b948d7ff544 Author: Akesa-24 Date: Sat Oct 3 13:18:04 2026 +0000 adding imu test diff --git a/imu_test.py b/imu_test.py new file mode 100644 index 0000000..b3a2078 --- /dev/null +++ b/imu_test.py @@ -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() \ No newline at end of file