Raspberry Piで自作ゴルフラダートラッカーを作る方法
TrackManやBushnellのような商用ゴルフラダーモニターは2万~2千ドルの価格帯です。ガレージや裏庭でのアマチュアの練習用途としては、法外な価格です。OpenFlightプロジェクトは、手頃な価格のドプラーレーダーとRaspberry Piを使って、自前で使えるショット解析装置を構築する代替手段を提供します。基本的な構成は約400ドルで、.launch angle制御対応の拡張バージョンは560ドル未満です。
このプロジェクトは主にPythonで書かれており、Reactウェブインターフェースを備えています。開発者のjewbetchaはソースコードをAGPL-3.0ライセンスで公開しており、コミュニティと協力して積極的にコードベースを開発しています。
システムの仕組み
ボールのインパクトを追跡する上での主な課題は、事象が数ミリ秒のFractionで発生することです。標準的なセンサーからのデータをタイマーで読み取ると、クラブがボールに接触した瞬間を見逃しやすくなります。
OpenFlightは、ハードウェアの音響トリガーとレーダーリングバッファの組み合わせでこの問題を解決しています。
システムアーキテクチャは4つの主要なコンポーネントで構成されています:
- SparkFun SEN-14262音響センサーがクラブとボールのインパクトの音を拾います。約10マイクロ秒の遅延でハードウェア割込みを生成します。
- 24 GHz OmniPreSense OPS243-Aレーダーは、30 kSPSのサンプリングレートで、生の直交I/Qデータをリングバッファに連続的に書き込みます。トリガー信号でインパクトの瞬間を中心に4096サンプル(約136 ms)をダンプします。
- 追加のミリ波レーダーであるTI IWR6843は、カスタムファームウェアでボールの垂直.launch angleとクラブヘッド軌道を測定します。
- Linuxを実行するRaspberry Pi 5が物理パラメータを計算し、弾道飛行モデルを実行し、WebSockets経由でローカルのReactダッシュボードにデータを送ります。
OpenFlightで測定できること
OPS243-Aレーダーユニットは反射した無線信号の周波数シフトを検出します。24.125 GHzの基本周波数で、速度1 mphごとに約71.7 Hzのドプラーシフトが生じます。プロジェクトではスペクトルをフィルタリングし、いくつかのパラメータを計算します:
- ボール速度:35~200 mphの範囲で精度は約±0.5%。
- クラブ速度:音響ピークの数ミリ前に信号スペクトラムからソフトウェアが計算。
- スミスファクター:エネルギー伝達比(ボール速度÷クラブ速度)。
- 数学的弾道モデルに基づく推定飛距離。
基本的な構成では.launch angleはおおよその計算です。TI IWR6843ボードを接続すると、システムは真的几何学的角度と実験的なクラブ軌道を読み取ります。
ちなみに、ボールなしのスウィング練習用の отдельныйモードがswing-speedにあります。このモードでは音響トリガーが無効になり、ソフトウェアは連続ストリームでピーク速度を読み取ります。
ハードウェアと組み立ての詳細
このデバイスは複雑な半田付けなしでブレッドボード上に組み立てることができます。リポジトリにはリンク付きの詳細な部品表が含まれています。
基本機材キット:
- ドプラーレーダーOPS243-A(249ドル)
- Raspberry Pi 5シングルボードコンピュータ(130ドル)
- SparkFun SEN-14262サウンドセンサー(18ドル)
- スタンドアロン操作用7インチタッチスクリーンdisplay(46ドル)
- 電源と補助配線(27ドル)
.launch angleが必要な場合は、TI IWR6843LEVMモジュール(156ドル)を追加する必要があります。以前は著者はK-LD7モジュールを使用していましたが、最大測定速度62 mphの制限により現在は非推奨となっています。
重要な電力の考慮事項があります。Raspberry PiはUSB経由で2つのレーダーを同時に駆動することはできません。そのため、OPS243-AはGPIO UARTピン(/dev/ttyAMA0)で接続し、TIボードはUSBポートを使用します。TI IWR6843用の готовыйファームウェアはすでにフォルダfirmware/releases/にあるため、Texas Instruments環境でビルドする必要はありません。
クイックスタート
新鮮なRaspberry Pi OS 64ビットへのインストールは、対話型スクリプトReduced to:
git clone https://github.com/jewbetcha/openflight.git
cd openflight
./scripts/setup/setup.sh
スクリプトはポートアクセス許可を設定し、依存関係を更新し、auto-startを設定します。その後、トラッカーはキオスクモードで起動します:
# Базовый запуск со звуковым триггером
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
レーダーがまだ到着していないがコードを確認したい場合は、--mockフラグで実行するとUIデバッグ用の合成ショットデータが生成されます。
ウェブインターフェースはローカルでポート8080に開きます。http://openflight.local:8080/displayでTVやタブレットにデプロイすると、練習場に便利な画面が得られます。
開発者向けのシンプルなPython APIがあります。自分のスクリプトでメトリクスを取得するには literally10行必要です:
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()
現在の制限事項と弱点
著者は選んだアプローチの物理的制限を正直に文書化しています。
第一に、コサインエラー:ボールがレーダーの視線に沿って正確に飛ばない場合、測定速度は実際の速度よりわずかに低くなります。レーダーはボールの後方、ターゲットライン上で正確に1~1.5メートルに配置する必要があります。
第二に、ボールのスピンレート測定はまだ実験的です。密閉空間では短い飛距離と寄生信号反射がノイズを引き起こすため、ライブマルチ-tepperは現在距離計算に使用されていません。プロジェクトチームは現在、ドプラーサイドバンドデチープィング(scripts/analysis/replay_spin_dechirp.py)用の新アルゴリズムに取り組んでいます。
このプロジェクトが役立つ人
OpenFlightは、手頃なハードウェアでの応用デジタル信号処理の良い例です。
このプロジェクトは次のような人々にアピールします:
- クローズドサブスクリプション付きの専用ブランドボックスに過払いせずに、家庭での練習用シミュレーターが欲しいゴルフレンジャー。
- 実際のI/Q、無線データ、FFT、ノイズ抑制アルゴリズムを掘り下げたい組込みシステム開発者やDSP愛好家。
- 独自のスポーツシミュレーターを作成したい人(プロジェクトにはすでにGSProとOpenGolfSimへのconnectorがあります)。
コードベースはよく構造化されており、テストはuv上の仮想環境でpytestを通じて実行され、設置geometryと較正に関するドキュメントは詳細に説明されています。試す価値ありです。
関連プロジェクト