19 """Collect gyroscope readings during zero-velocity period"""
20 print(
"Gyroscope Zero-Velocity Calibration")
22 print(f
"Keep sensor stationary for {duration} seconds...")
23 print(
"Collecting readings...")
31 while time.time() - start_time < duration:
34 raw = np.array([0.01, -0.02, 0.015]) + np.random.normal(0, 0.001, 3)
36 time.sleep(1.0 / sample_rate)
39 zero_ref = np.array([0.0, 0.0, 0.0])
44 reference_value=zero_ref,
48 calibrator.add_calibration_point(point)
50 print(f
"Collected {len(readings)} readings")
55 parser = argparse.ArgumentParser(description=
"Gyroscope Calibration")
56 parser.add_argument(
"--sensor-id", default=
"imu_0")
58 "--duration", type=float, default=60.0, help=
"Collection duration in seconds"
60 parser.add_argument(
"--output", default=
"gyro_calibration.json")
62 args = parser.parse_args()
68 params = calibrator.calibrate()
69 print(
"\nCalibration Results:")
70 print(f
" Bias: {params.bias}")
71 print(f
" Scale Matrix:\n{params.scale_matrix}")
72 print(f
" Quality: {params.calibration_quality:.3f}")
75 calibrator.save_calibration(args.output)
76 print(f
"\nSaved calibration to {args.output}")
77 except Exception
as e:
78 print(f
"Calibration failed: {e}")