Как собрать собственный радарный трекер для гольфа на Raspberry Pi

19 авг 2026
897
101
40
4 недели

OpenFlight Logo

Коммерческие гольф-мониторы вроде TrackMan или Bushnell стоят от двух до двадцати тысяч долларов. Для любительских тренировок в гараже или во дворе это безумные деньги. Проект OpenFlight предлагает альтернативу: собрать функциональный измеритель параметров удара своими руками на базе доступных доплеровских радаров и «малинки». Базовый сетап обходится примерно в $400, а расширенная версия с контролем угла запуска укладывается в $560.

Проект написан преимущественно на Python с веб-интерфейсом на React. Разработчик jewbetcha выложил исходники под лицензией AGPL-3.0 и активно развивает кодовую базу вместе с сообществом.

Как устроена система

Главная сложность при отслеживании удара по мячу в том, что события происходят за доли миллисекунды. Если считывать данные со стандартного датчика по таймеру, момент контакта клюшки с мячом легко пропустить.

OpenFlight решает эту задачу с помощью связки аппаратного акустического триггера и кольцевого буфера радара.

Реклама

Архитектура системы состоит из четырех основных компонентов:

  1. Акустический датчик SparkFun SEN-14262 улавливает звук соударения клюшки с мячом. Он выдает аппаратное прерывание с задержкой около 10 микросекунд.
  2. 24-гигагерцевый радар OmniPreSense OPS243-A непрерывно пишет «сырые» квадратурные I/Q данные в кольцевой буфер с частотой дискретизации 30 kSPS. По сигналу триггера он выгружает 4096 сэмплов (примерно 136 мс вокруг момента удара).
  3. Дополнительный миллиметровый радар TI IWR6843 с кастомной прошивкой замеряет вертикальный угол вылета мяча и траекторию движения головки клюшки.
  4. Raspberry Pi 5 под управлением Linux рассчитывает физические параметры, запускает баллистическую модель полета и отдает данные через веб-сокеты на локальный React-дашборд.

Что умеет измерять OpenFlight

Радарный блок OPS243-A ловит сдвиг частоты отраженного радиосигнала. На базовой частоте 24.125 ГГц каждый 1 миль/ч скорости дает доплеровский сдвиг примерно 71.7 Гц. Проект фильтрует спектр и вычисляет несколько параметров:

  • Скорость мяча в диапазоне от 35 до 200 миль/ч с точностью около ±0.5%.
  • Скорость клюшки, которую софт вычисляет по спектру сигнала за несколько миллисекунд до акустического пика.
  • Smash Factor, то есть коэффициент передачи энергии (отношение скорости мяча к скорости клюшки).
  • Расчетную дистанцию переноса (carry distance) на базе математической баллистической модели.

Угол вылета мяча (Launch Angle) в базовой конфигурации вычисляется приближенно. Если подключить плату TI IWR6843, система считывает честный геометрический угол и экспериментальный угол атаки клюшки (Club Path).

Кстати, для тренировок махов без мяча предусмотрен отдельный режим swing-speed. В нем акустический триггер отключается, а софт считывает пиковые скорости непрерывным потоком.

Железо и особенности сборки

Собрать устройство можно на макетке без сложной пайки. В репозитории есть подробная таблица компонентов со ссылками.

Базовый комплект оборудования:

  • Доплеровский радар OPS243-A ($249)
  • Одноплатник Raspberry Pi 5 ($130)
  • Сенсор звука SparkFun SEN-14262 ($18)
  • Семидюймовый сенсорный дисплей для автономной работы ($46)
  • Блок питания и вспомогательные провода ($27)

Если нужен угол вылета, придется докупить модуль TI IWR6843LEVM ($156). Раньше автор использовал модули K-LD7, но сейчас они объявлены устаревшими из-за ограничения по максимальной измеряемой скорости в 62 мили/ч.

Есть важный нюанс по питанию. Raspberry Pi не вытягивает одновременную работу двух радаров по USB. Поэтому OPS243-A подключают через пины GPIO UART (/dev/ttyAMA0), а плата TI занимает порт USB. Готовая прошивка для TI IWR6843 уже лежит в папке firmware/releases/, поэтому собирать ее в среде Texas Instruments не придется.

Быстрый старт

Установка на свежую Raspberry Pi OS 64-bit сведена к интерактивному скрипту:

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

Скрипт настроит права доступа к портам, обновит зависимости и сконфигурирует автозапуск. После этого трекер запускается в режиме киоска:

# Базовый запуск со звуковым триггером
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, получится удобный экран для тренировочной зоны.

Для разработчиков есть простой Python API. Получать метрики в собственных скриптах можно буквально в десять строк:

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 метрах позади мяча на линии прицеливания.

Во-вторых, измерение вращения мяча (spin rate) пока остается экспериментальным. В замкнутых помещениях короткая траектория полета и паразитные переотражения сигнала дают шум, поэтому live-мультитейпер сейчас не используется в расчете дистанции. Команда проекта как раз работает над новым алгоритмом дечирпинга боковых полос Доплера (scripts/analysis/replay_spin_dechirp.py).

Кому проект будет полезен

OpenFlight — отличный пример прикладной цифровой обработки сигналов на доступном железе.

Проект понравится:

  • Любителям гольфа, которые хотят симулятор для тренировок дома без переплаты за проприетарные брендовые коробки с закрытыми подписками.
  • Разработчикам embedded-систем и энтузиастам DSP, желающим покопаться в реальных I/Q радиоданных, БПФ и алгоритмах подавления шумов.
  • Создателям собственных спортивных симуляторов (в проекте уже есть коннекторы к GSPro и OpenGolfSim).

Кодовая база хорошо структурирована, тесты гоняются через pytest с виртуальным окружением на uv, а документация по геометрии установки и калибровке расписана до мелочей. Попробовать точно стоит.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.