>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
Python

Comment construire votre propre tracker radar de golf avec Raspberry Pi

OpenFlight Logo

Les moniteurs de golf commerciaux comme TrackMan ou Bushnell coûtent entre deux et vingt mille dollars. Pour les séances d'entraînement amateur dans un garage ou un jardin, c'est un montant excessif. Le projet OpenFlight offre une alternative : construisez vous-même un analyseur de coups fonctionnel en utilisant des radars Doppler abordables et un Raspberry Pi. La configuration de base coûte environ 400 $, et la version étendue avec contrôle de l'angle de décollage reste en dessous de 560 $.

Le projet est écrit principalement en Python avec une interface web React. Le développeur jewbetcha a publié le code source sous licence AGPL-3.0 et développe activement la base de code avec la communauté.

Comment fonctionne le système

Le principal défi dans le suivi d'un impact de balle est que les événements se produisent en fractions de millisecondes. Si vous lisez les données d'un capteur standard sur un minuteur, il est facile de manquer le moment où le club touche la balle.

OpenFlight résout ce problème avec une combinaison d'un déclencheur acoustique matériel et d'un tampon circulaire radar.

L'architecture du système se compose de quatre composants principaux :

  1. Le capteur acoustique SparkFun SEN-14262 capte le son de l'impact club-balle. Il génère une interruption matérielle avec un délai d'environ 10 microsecondes.
  2. Le radar 24 GHz OmniPreSense OPS243-A écrit en continu des données brutes en quadrature I/Q dans un tampon circulaire à un taux d'échantillonnage de 30 kSPS. Sur signal de déclenchement, il décharge 4096 échantillons (environ 136 ms autour du moment de l'impact).
  3. Un radar additionnel à ondes millimétriques TI IWR6843 avec micrologiciel personnalisé mesure l'angle de décollage vertical de la balle et la trajectoire de la tête de club.
  4. Le Raspberry Pi 5 exécutant Linux calcule les paramètres physiques, exécute un modèle de vol balistique et livre les données via WebSockets à un tableau de bord React local.

Ce qu'OpenFlight peut mesurer

L'unité radar OPS243-A détecte le décalage de fréquence du signal radio réfléchi. À la fréquence de base de 24,125 GHz, chaque 1 mph de vitesse produit un décalage Doppler d'environ 71,7 Hz. Le projet filtre le spectre et calcule plusieurs paramètres :

  • Vitesse de la balle dans la plage de 35 à 200 mph avec une précision d'environ ±0,5%.
  • Vitesse du club, que le logiciel calcule à partir du spectre du signal quelques millisecondes avant le pic acoustique.
  • Facteur de smash, ou ratio de transfert d'énergie (vitesse de la balle divisée par la vitesse du club).
  • Distance de portée estimée basée sur un modèle balistique mathématique.

L'angle de décollage dans la configuration de base est calculé de manière approximative. Si vous connectez la carte TI IWR6843, le système lit l'angle géométrique réel et le chemin expérimental du club.

En passant, il existe un mode séparé swing-speed pour l'entraînement au swing sans balle. Dans ce mode, le déclencheur acoustique est désactivé et le logiciel lit les vitesses maximales dans un flux continu.

Matériel et détails d'assemblage

L'appareil peut être assemblé sur une platine d'expérimentation sans soudure complexe. Le dépôt contient un tableau détaillé des composants avec des liens.

Kit d'équipement de base :

  • Radar Doppler OPS243-A (249 $)
  • Ordinateur monocarte Raspberry Pi 5 (130 $)
  • Capteur sonore SparkFun SEN-14262 (18 $)
  • Écran tactile de sept pouces pour un fonctionnement autonome (46 $)
  • Alimentation et câblage auxiliaire (27 $)

Si vous avez besoin de l'angle de décollage, vous devrez ajouter le module TI IWR6843LEVM (156 $). Auparavant, l'auteur utilisait les modules K-LD7, mais ils sont maintenant obsolètes en raison de la limitation de vitesse mesurable maximale de 62 mph.

Il y a une considération importante concernant l'alimentation. Le Raspberry Pi ne peut pas gérer les deux radars fonctionnant simultanément via USB. Donc l'OPS243-A se connecte via les broches UART GPIO (/dev/ttyAMA0), et la carte TI prend le port USB. Le micrologiciel prêt à l'emploi pour TI IWR6843 est déjà dans le dossier firmware/releases/, vous n'aurez donc pas besoin de le construire dans l'environnement Texas Instruments.

Démarrage rapide

L'installation sur un Raspberry Pi OS 64 bits frais se réduit à un script interactif :

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

Le script configurera les permissions d'accès aux ports, mettra à jour les dépendances et configurera le démarrage automatique. Après cela, le tracker se lance en mode kiosk :

# Базовый запуск со звуковым триггером
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

Si le radar n'est pas encore arrivé mais que vous voulez explorer le code, l'exécution avec le flag --mock génère des données de coup synthétiques pour le débogage de l'interface utilisateur.

L'interface web s'ouvre localement sur le port 80. Si vous la déployez sur une TV ou une tablette via http://openflight.local:8080/display, vous obtenez un écran pratique pour la zone d'entraînement.

Il y a une API Python simple pour les développeurs. Obtenir des métriques dans vos propres scripts prend littéralement dix lignes :

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()

Limitations actuelles et points faibles

L'auteur documente honnêtement les limitations physiques de l'approche choisie.

Premièrement, l'erreur cosinus : si la balle ne vole pas exactement le long de la ligne de visée du radar, la vitesse mesurée sera légèrement inférieure à la vitesse réelle. Le radar doit être positionné exactement à 1-1,5 mètre derrière la balle sur la ligne cible.

Deuxièmement, la mesure du taux de rotation de la balle est encore expérimentale. Dans les espaces clos, la trajectoire de vol courte et les réflexions parasites du signal créent du bruit, donc le multi-tap en direct n'est actuellement pas utilisé dans les calculs de distance. L'équipe du projet travaille actuellement sur un nouvel algorithme de déschirpage des bandes latérales Doppler (scripts/analysis/replay_spin_dechirp.py).

À qui ce projet sera utile

OpenFlight est un excellent exemple de traitement numérique du signal appliqué sur du matériel abordable.

Le projet plaira à :

  • Les passionnés de golf qui veulent un simulateur pour l'entraînement à domicile sans payer trop cher pour des boîtes de marque propriétaires avec des abonnements fermés.
  • Les développeurs de systèmes embarqués et les passionnés de DSP qui veulent creuser dans les vraies données radio I/Q, la FFT et les algorithmes de suppression du bruit.
  • Les créateurs de leurs propres simulateurs sportifs (le projet a déjà des connecteurs vers GSPro et OpenGolfSim).

La base de code est bien structurée, les tests passent via pytest avec un environnement virtuel sur uv, et la documentation sur la géométrie d'installation et l'étalonnage est détaillée. Vaut vraiment la peine d'essayer.

Projets similaires