>_ DevTrendsde

Sprache

Start

Sprachen

Bereiche

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicherheit
Python

So baust du deinen eigenen Golf-Radar-Tracker mit Raspberry Pi

OpenFlight Logo

Kommerzielle Golfmonitore wie TrackMan oder Bushnell kosten zwischen zwei- und zwanzigtausend Dollar. Für Amateur-Übungseinheiten in der Garage oder im Hinterhof ist das verrücktes Geld. Das OpenFlight-Projekt bietet eine Alternative: Baue dir einen funktionalen Schlag-Analysator selbst mit erschwinglichen Doppler-Radaren und einem Raspberry Pi. Das Basis-Setup kostet rund 400 $, und die erweiterte Version mit Startwinkel-Steuerung liegt unter 560 $.

Das Projekt ist hauptsächlich in Python mit einer React-Weboberfläche geschrieben. Entwickler jewbetcha hat den Quellcode unter der AGPL-3.0-Lizenz veröffentlicht und entwickelt die Codebasis aktiv zusammen mit der Community.

So funktioniert das System

Die größte Herausforderung beim Verfolgen eines Balltreffers ist, dass Ereignisse in Bruchteilen einer Millisekunde stattfinden. Wenn du Daten von einem Standardsensor per Timer ausliest, ist es leicht, den Moment zu verpassen, in dem der Schläger den Ball trifft.

OpenFlight löst dies durch eine Kombination aus einem Hardware-Akustiktrigger und einem Radar-Ringpuffer.

Die Systemarchitektur besteht aus vier Hauptkomponenten:

  1. Der SparkFun SEN-14262 Akustiksensor nimmt den Sound des Schläger-Ball-Aufpralls auf. Er erzeugt einen Hardware-Interrupt mit einer Verzögerung von ungefähr 10 Mikrosekunden.
  2. Das 24 GHz OmniPreSense OPS243-A Radar schreibt kontinuierlich rohe Quadratur-I/Q-Daten mit einer Abtastrate von 30 kSPS in einen Ringpuffer. Bei einem Triggersignal gibt es 4096 Samples aus (ca. 136 ms um den Aufprallmoment herum).
  3. Ein zusätzliches Millimeterwellen-Radar TI IWR6843 mit Custom-Firmware misst den vertikalen Startwinkel des Balls und die Schlägerkopf-Bahn.
  4. Der Raspberry Pi 5 mit Linux berechnet physikalische Parameter, führt ein ballistisches Flugmodell aus und liefert Daten über WebSockets an ein lokales React-Dashboard.

Was OpenFlight messen kann

Die OPS243-A Radareinheit erkennt die Frequenzverschiebung des reflektierten Funksignals. Bei der Basisfrequenz von 24,125 GHz erzeugt jede Geschwindigkeit von 1 mph eine Doppler-Verschiebung von ungefähr 71,7 Hz. Das Projekt filtert das Spektrum und berechnet mehrere Parameter:

  • Ballgeschwindigkeit im Bereich von 35 bis 200 mph mit einer Genauigkeit von ungefähr ±0,5%.
  • Schlägergeschwindigkeit, die die Software aus dem Signalspektrum einige Millisekunden vor dem Akustikpeak berechnet.
  • Smash Factor, also das Energieübertragungsverhältnis (Ballgeschwindigkeit geteilt durch Schlägergeschwindigkeit).
  • Geschätzte Carry-Weite basierend auf einem mathematischen ballistischen Modell.

Der Startwinkel wird in der Basiskonfiguration näherungsweise berechnet. Wenn du das TI IWR6843-Board anschließt, liest das System den wahren geometrischen Winkel und die experimentelle Schlägerbahn aus.

Übrigens gibt es einen separaten Modus swing-speed für Schwungtraining ohne Ball. Darin ist der Akustiktrigger deaktiviert und die Software liest Spitzengeschwindigkeiten in einem kontinuierlichen Stream aus.

Hardware und Montage-Details

Das Gerät kann auf einem Breadboard zusammengebaut werden, ohne komplex zu löten. Das Repository enthält eine detaillierte Komponententabelle mit Links.

Basis-Ausrüstungskit:

  • Doppler-Radar OPS243-A (249 $)
  • Raspberry Pi 5 Einplatinencomputer (130 $)
  • SparkFun SEN-14262 Sound-Sensor (18 $)
  • Siebenzoll-Touchscreen-Display für den Standalone-Betrieb (46 $)
  • Netzteil und Hilfsverkabelung (27 $)

Wenn du den Startwinkel benötigst, musst du das TI IWR6843LEVM-Modul (156 $) hinzufügen. Zuvor verwendete der Autor K-LD7-Module, diese sind jedoch aufgrund der maximal messbaren Geschwindigkeitsbegrenzung von 62 mph veraltet.

Es gibt eine wichtige Überlegung zur Stromversorgung. Der Raspberry Pi kann nicht beide Radar gleichzeitig über USB betreiben. Also wird das OPS243-A über GPIO UART-Pins angeschlossen (/dev/ttyAMA0), und das TI-Board nimmt den USB-Port. Die fertige Firmware für TI IWR6843 befindet sich bereits im Ordner firmware/releases/, sodass du sie nicht in der Texas Instruments-Umgebung erstellen musst.

Schnellstart

Die Installation auf einem frischen Raspberry Pi OS 64-bit wird auf ein interaktives Skript reduziert:

git clone https://github.com/jewbetcha/openflight.git
cd openflight
./scripts/setup/setup.sh

Das Skript konfiguriert Port-Zugriffsrechte, aktualisiert Abhängigkeiten und richtet Autostart ein. Danach startet der Tracker im Kiosk-Modus:

# Базовый запуск со звуковым триггером
scripts/start-kiosk.sh

# Запуск с угловым радаром IWR6843 (значения геометрии замеряются по месту)
scripts/start-kiosk.sh --iwr6843 \
  --ops-port /dev/ttyAMA0 \
  --iwr6843-tee-m 1.372 --iwr6843-net-m 4.064 \
  --iwr6843-tilt-deg 5.5 --iwr6843-radar-height-m 0.229 \
  --iwr6843-ball-height-m 0.021

Wenn das Radar noch nicht angekommen ist, du aber den Code erkunden möchtest, generiert das Ausführen mit dem Flag --mock synthetische Schlagdaten für das UI-Debugging.

Die Weboberfläche öffnet sich lokal auf Port 8080. Wenn du sie über http://openflight.local:8080/display auf einem Fernseher oder Tablet bereitstellst, erhältst du eine praktische Anzeige für den Übungsbereich.

Es gibt eine einfache Python-API für Entwickler. Das Abrufen von Metriken in eigenen Skripten erfordert buchstäblich zehn Zeilen:

from openflight.rolling_buffer import RollingBufferMonitor

monitor = RollingBufferMonitor()
monitor.connect()
monitor.start()

print("Готов к удару...")
shot = monitor.wait_for_shot(timeout=60)
if shot:
    print(f"Скорость мяча: {shot.ball_speed_mph:.1f} mph")
    print(f"Дистанция: {shot.estimated_carry_yards:.0f} yd")

monitor.stop()
monitor.disconnect()

Aktuelle Einschränkungen und Schwachstellen

Der Autor dokumentiert ehrlich die physikalischen Einschränkungen des gewählten Ansatzes.

Erstens der Cosinusfehler: Wenn der Ball nicht genau entlang der Radar-Sichtlinie fliegt, wird die gemessene Geschwindigkeit etwas niedriger sein als die tatsächliche Geschwindigkeit. Das Radar sollte genau 1-1,5 Meter hinter dem Ball auf der Ziellinie positioniert werden.

Zweitens ist die Ballspinrate-Messung noch experimentell. In geschlossenen Räumen erzeugen die kurze Flugbahn und parasitäre Signalreflexionen Rauschen, daher wird der Live-Multitepper derzeit nicht in Entfernungsberechnungen verwendet. Das Projektteam arbeitet derzeit an einem neuen Algorithmus für Doppler-Seitenband-Dechirping (scripts/analysis/replay_spin_dechirp.py).

Wem das Projekt nützen wird

OpenFlight ist ein großartiges Beispiel für angewandte digitale Signalverarbeitung auf erschwinglicher Hardware.

Das Projekt wird ansprechen:

  • Golf-Enthusiasten, die einen Simulator für das Heimtraining wollen, ohne zu viel für proprietäre Markenboxen mit geschlossenen Abonnements zu bezahlen.
  • Embedded-Systems-Entwickler und DSP-Enthusiasten, die sich in echte I/Q-Funkdaten, FFT und Rauschunterdrückungsalgorithmen vertiefen wollen.
  • Ersteller eigener Sport-Simulatoren (das Projekt hat bereits Konnektoren zu GSPro und OpenGolfSim).

Die Codebasis ist gut strukturiert, Tests laufen über pytest mit einer virtuellen Umgebung auf uv, und die Dokumentation zu Installationsgeometrie und Kalibrierung ist detailliert ausgearbeitet. Auf jeden Fall einen Versuch wert.

Ähnliche Projekte