OpenFlight uses the OPS243-A rolling buffer for production shot capture. Spin estimation from that capture remains experimental.
- The SEN-14262 detects impact and triggers the OPS243-A through
HOST_INT. - The radar freezes and returns 4,096 I samples and 4,096 Q samples.
RollingBufferProcessorextracts ball and club speed from short FFT windows.- An overlapping timeline separates the club, impact, and ball regions.
- An ungated multitaper estimator records an experimental spin candidate.
The normal kiosk command uses this pipeline:
scripts/start-kiosk.shThe OPS243-A firmware changes the HOST_INT behavior when rolling-buffer mode
is entered at runtime. Save the mode to flash once, then power-cycle the radar:
uv run python scripts/hardware-test/test_rolling_buffer_persist.py --setup
# Disconnect power from the radar for at least three seconds, then reconnect it.
uv run python scripts/hardware-test/test_rolling_buffer_persist.py --testThe runtime then starts in the persisted GC rolling-buffer mode without
re-entering it. See Sound Trigger Wiring for the
recommended direct hardware trigger.
| Setting | Value |
|---|---|
| OPS243-A mode | Persisted rolling buffer (GC) |
| Sample rate | 30,000 samples/s |
| Capture | 4,096 I + 4,096 Q samples |
| Capture duration | About 136.5 ms |
| Pre-trigger split | 16 of 32 blocks |
| Speed window | 128 samples |
| FFT size | 4,096 |
| Overlap step | 32 samples (937.5 windows/s) |
| Production trigger | SEN-14262 GATE to OPS243-A HOST_INT |
Use --buffer-split post-heavy when more post-impact data is needed, or
--buffer-split pre-heavy when the club approach matters more:
scripts/start-kiosk.sh --buffer-split post-heavyEvery valid capture runs the ungated multitaper estimator. Its candidate:
- is labeled EXPERIMENTAL in the UI;
- is logged as
spin_method: "multitaper_ungated"; - is constrained to 1,500–11,000 RPM; and
- does not drive spin-adjusted carry.
Treat individual values as evaluation data, not ground truth. Multipath and capture geometry can produce plausible but incorrect candidates, and current blind validation is not accurate enough for production carry calculations.
For offline comparison and estimator work, use Spin Replay and Diagnostics. Raw captures are stored in the session JSONL logs described in the observability guide.