Тест ГЛОНАСС/GPS LoRa трекеров на парапланерных гонках RusXFly

Автор: | 23 января, 2026

Всем привет! Представьте, что у вас есть маршрут на 250 километров в горах, где нет сотовой связи и дорог, а вам нужно обеспечить безопасность участников парапланерной гонки!

TL;DR: В этом рассказе я опишу, как запилил систему трекинга спортсменов для парапланерных гонок RusXFly из LoRa-трекеров, палок и пылесосных шлангов. А потом свозил то, что получилось, в Приэльбрусье. Было эмоционально, экстремально, местами — страшно, но всё получилось и закончилось хорошо.

Это сокращенная и адаптированная версия текста написанного мной для площадки vas3k. Оригинал: https://vas3k.club/post/30573/
Хабр: https://habr.com/ru/articles/987370/

Старт гонки RusXFly в Приэльбрусье
Старт гонки RusXFly в Приэльбрусье

Глава 1. Предыстория!

Всё началось с того, что весной мне написали из “Объединенной федерации спорта сверхлёгкой авиации” (ОФ СЛА России). Осенью планировалась сложная гонка в горах, связи там нет, а участники гонки очень ценны для Федерации, и с этим нужно что-то делать. Так я и познакомился с Анной! Анна — организатор гонки RusXFly, очень жизнерадостный человек, и она всю жизнь посвятила парапланеризму.

Парапланы — это такие большие красивые летающие штуки, есть много пилотов которые летают даже в нашей равнинной Мордовии. А один из участников гонки, кстати, был из Пензы.

Со мной же вы наверняка уже знакомы, я — Евгений Шлягин, директор НТЦ БИТЛАЙТ. Но в первую очередь я инженер. Поэтому, разумеется, мне было интересно попробовать запустить систему мониторинга там, где есть примерно ничего. Челлендж был в том, чтобы сделать это фактически на пустом месте и максимально бюджетно.

Я сам не летаю, но у меня была бурная молодость с мотоциклами, парусами и поглядываниями в сторону всего летающего… Всё говорило, что с этими ребятами мы явно сойдёмся по вайбу!

Организаторы RusFly вдохновлялись гонкой X-Alps в Альпах. У спортсменов есть параплан, и есть маршрут с контрольными точками. Можешь лететь — лети, не можешь — беги. И всем было бы неплохо понимать, где находится каждый из участников.

Следом за спортсменом двигается его группа поддержки — суппортеры. Они везут ему еду, дополнительную снарягу и всё такое. Суппортерам тоже неплохо понимать, где сейчас находится их атлет. Позвонить ему или включить трансляцию координат в телеграмчике скорее всего не получится. Максимум, что может помочь — рация, но по ней сложно передавать координаты. Если с человеком что-то случилось, он не всегда может в рацию ответить. Да и вообще, искать человека в горах — так себе развлечение.

Глава 2. Разве ничего ещё не изобретено?

Референсы, на которые можно опираться, разумеется были. Использовать технологию LoRa для трекинга в таких условиях логично, мы малой мощностью, разрешенной ГКРЧ “без регистраций и СМС” можем отправить сигнал за десятки километров.

Все мы делаем маленькие пет-проекты. Один из моих — это AGLoRa (Ардуино + GPS + LoRa), в котором я как раз захотел поэкспериментировать с простым прототипом GPS LoRa–трекера на Arduino, чтобы получить больше опыта в этой области.

Разумеется, каждый встречный-поперечный спрашивает, зачем изобретать велосипед, ведь есть Meshtastic.

Откровенно говоря, когда я начинал делать AGLoRa, я ничего про Meshtastic и не знал, тогда он еще не приобрел популярность. Это очень крутой проект, но везде есть свои плюсы и минусы. На мой взгляд Meshtastic — это всё-таки больше про “тактические чатики”.

Конечно, на его базе можно сделать трекинг. У индийских парапланеристов в Гималаях развернута сеть на его основе. Минус Meshtastic для трекинга — в очень больших размерах пакета, а LoRa — это всё–таки про максимальный минимализм. Каждый лишний байт реально снижает вероятность получения пакета с корректным CRC.

Второй недостаток длинных пакетов: если в одной точке будет много устройств, мы быстро засрём эфир, особенно с ретрансляциями. Это нехорошо и не приветствуется ни стандартами, ни другими пацанами с устройствами на 869 МГц в той же локации. Драка радиолюбителей на паяльниках в горах — это вообще самое неприятное, во что можно попасть в этой жизни.

Один из моих знакомых по AGLoRa-чатику — Павел — сделал полностью оффлайн– систему трекинга для спортивного ориентирования (https://habr.com/ru/companies/yoomoney/articles/922328/). Получилось круто, но для RusXFly его наработки использовать не получилось бы, из-за очень длинного маршрута гонки и мобильности организаторов.

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

А еще у нас были зрители!!! Они следили за своими фаворитами на карте и активно комментировали в чате гонки их успехи! И возмущались когда от спортсмена долго не поступало актуальных координат! Так что без онлайна — никуда.

Из других теоретически существующих альтернатив, есть полётные приборы работающие в сети Fanet (это тоже 868 МГц как LoRa, только изначально про авиацию), но они не умеют в ретрансляцию.

Глава 3. Придумываем концепцию

Итак, для того, чтобы видеть спортсменов, нам необходимо повесить на них какие-нибудь устройства, и любыми способами заполучить с них координаты. Для этого около сотовых вышек (их критически мало по маршруту, но они есть) я поставлю приемники с 2G–модемами.

2G работает практически везде, где хоть как-то добивает сотовая связь. А еще эти модули просты в программировании и недороги. Назовем эти устройства для простоты “шлюзами”. С их помощью организаторы и зрители смогут видеть через сайт, где находятся спортсмены.

Кроме того, эти “шлюзы” можно поставить на машины групп поддержки, ведь чаще всего суппортеры стоят где-то на пригорочке с хорошими видами на своего спортсмена и иногда даже с интернетиком. Без него им скучно, да и связь с организаторами нужна, так что пригорочки будут подбирать поближе к сотовым вышкам.

Иногда суппортеры могут летать вместе со спортсменом, показывая ему потоки, это допускается правилами. Кроме этого, есть группа организаторов, которые сопровождают гонку, в том числе, и с воздуха. Они занимаются видеосъемкой, разведкой погоды, организацией медпомощи — и за их безопасностью тоже нужно следить. Все они не менее ценны команде, чем спортсмены. Используем их и для своих целей: нечего болтаться в воздухе просто так — пусть заодно поработают ретрансляторами!

Глава 4. Список нужного оборудования

Прикинем. Для того чтобы всё получилось нам нужно:

  1. Трекеры как маяки для спортсменов. Желательно, чтобы жили от батарейки максимально долго, мало ли что.
  2. Трекеры–ретрансляторы. Для летающей части команды организаторов и суппортеров. Время работы на одной зарядке уже не так важно, лишь бы день держались. Суппортеры и организаторы — на машинах, они точно найдут где подзарядиться.
  3. “Шлюзы”. По сути — просто приемники, которые будут отправлять всё, что услышали в эфире, на бэкенд, через GSM–связь. Они тоже будут работать автономно,но им можно прицепить большие повербанки или аккумуляторы, вес не важен. Даже наоборот, не сдует и сложнее утащить сусликам, если те вдруг заинтересуются!
  4. Софт: какой–то бэкенд, какой–то сайтик, какие–то приложения для мобилок, чтобы можно было видеть спортсменов там, где нет интернета.

Глава 5. Пилим железо

Нам нужен трекер! Максимально экономичный и надежный. Никаких экранов, но с Bluetooth, чтобы можно было подключиться с телефончика и посмотреть, кто там у нас есть рядом. Аккумулятора должно хватать минимум на сутки, желательно, с внешней антенной и минимальным весом (им же летать!).

Паять сам такое количество трекеров я бы просто не осилил. Конечно, можно взять готовые платы, например от Heltec — T114 (https://heltec.org/project/mesh-node-t114/) или ESP32 LoRa–модуль со встроенным GPS (https://heltec.org/project/wireless-tracker/) или популярный LILYGO TTGO T-Beam. Есть и готовые трекеры типа T1000, уже в корпусе. Но! Как минимум, их все где-то “надо взять”, а для 40 штук “взятие” может быть не таким простым, например, из-за таможни.

Поэтому я предложил поучаствовать в проекте своим знакомым из ООО “БУН” в Иннополисе. Это разработчики, которые плотно в теме изготовления LoRaWAN–устройств. Я регулярно пишу про этот проект, прототип ГЛОНАСС LoRa/LoRaWAN трекера в разработке которого непосредственно участвую.

У меня уже было на руках несколько работающих прототипов, и я предложил протестировать всё в реальных условиях, а они взяли и согласились. Так что за следующие пару месяцев мне изготовили и прислали 40 LoRa–трекеров на базе STM32. Это уже почти серийное устройство, сделанное инженерами, которые собаку съели на энергосберегающих устройствах для ЖКХ и IoT.

Готовые прототипчики
Готовые прототипчики

Для своих “шлюзов” я использовал популярные Heltec LoRa Wireless Stick Lite V3 (https://heltec.org/project/wireless-stick-lite-v2/). Они дешевые и хорошо работают. Это никоим образом не реклама — модули на самом деле удобные и хорошо отработали.

Хотя, как-то так вышло, что когда шлюз был уже написан и модули куплены, менеджеры Heltec узнали от меня про гонку и по своей инициативе прислали мне еще несколько платок. А после, попросили рассказать как всё прошло, так что я теперь оставил след еще и на сайте Heltec: https://wiki.heltec.org/news/loRa-tracking-in-the-mountains/loRa-tracking-in-the-mountains

Едем дальше. Чтобы отправить данные в бэк, я припаял к этим LoRa Wireless Stick Lite V3 популярные “красные” GSM–модемы. В интернетах пишут что синие работают лучше, но у меня, почему-то вышло наоборот. GSM–модули очень любят кушать, так что не экономьте на конденсаторах. Лучше всего при 100% нагрузке у меня работали те, где на питании висели ионисторы на полтора фарада.

Приемник из модуля Heltec и GSM на макетке
Приемник из модуля Heltec и GSM на макетке

Я сознательно беру слово “шлюз” в кавычки, потому что это не LoRaWAN–шлюзы. Трекер умеет работать и в LoRaWAN–сети, но я же не совсем больной тащить дорогие и жрущие электричество LoRaWAN–шлюзы в горы. Я просто сделал максимально дешевые устройства для отправки LoRa–данных в бэк; их и потерять не жалко, случись что… Простота плюс дешевизна позволили быстро наклепать себе 10 штук “шлюзов”, посчитал, что столько будет достаточно.

Глава 6. Пишем код

В наши времена, когда код стремительно теряет ценность, про это и писать стыдно. Но “стыдно — когда видно”, а эти части я пока ещё не опенсорсил, так что читайте.

Прошивки и трекера, и “шлюза” — кастомные, написанные специально под мероприятие. Прошивка трекера не моя, но её по моей просьбе немного подкорректировали, “выкинув всё ненужное и добавив нужное”, типа высоты.

Мы сделали короткий идентификатор и передавали минимум информации. “Двадцати одного байта будет достаточно каждому!”, — косплеил я классика.

Режим ретрансляции сделали классическим алгоритмом flooding. Устройство помнит, какие пакеты принимало, и пересылает дальше, уменьшая им оставшееся число прыжков (то, что называется hops или TTL).

На самом деле это самый интересный вызов в проекте LoRa–трекера — сделать ретрансляцию пакетов максимально эффективной, зная реальные координаты и уровень сигнала соседних устройств.

По бэку время поджимало, и надо было взять что-то готовое. У меня есть доступ к самым разным платформам мониторинга, типа Wialon, но для этого проекта я использовал опенсорсный Traccar (https://www.traccar.org/).

Основных причин несколько:

  • скрохоборить и не платить за объекты.
  • функционал Виалона etc. тут излишен.
  • у меня уже есть нормально работающий сервер Traccar (www.free-gps.ru).
  • у меня есть свой собственный мобильный клиент для Traccar! А значит я могу быстро допилить под это мероприятие любые фишечки.

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

Чтобы не привязываться к платным системам, писал под API Traccar, который очень люблю и часто использую для собственных проектов.

Нативное приложение удобней веб-версии тем, что я могу показывать направление и перепад высоты с объектом, используя встроенный компас телефона. Так что я немного поколдовал с высотой — и вуаля! Мы готовы трекать парапланеристов!

Another Tracking Client (https://apps.apple.com/ru/app/another-tracking-client/id6657993181).

Второе приложение, которое я допиливал под гонку, тоже моё. Оно написано специально для работы с трекерами по bluetooth — “LoRa RADAR”. Хотелось сделать приложение с векторными картами, которые кешируются при любом уровне зума и потом видны, даже если нет интернета.

LoRa RADAR (https://github.com/Udj13/AGLoRa/wiki/Lora-Radar-app).

Глава 7. Что-то обязательно пойдет не так!

Так как “шлюза” в начале лета вообще не существовало в принципе, план был надёжный, как швейцарские часы: быстро навайбкодить его за несколько дней и максимально оттестировать на природе за лето.

Версия с конденсатором на питании
Версия с конденсатором на питании

Но, как оказалось, с эмбеддед такая самоуверенность не прокатывает. Чтобы всё заработало, пришлось самому разбираться и с АТ– командами, и со всякими другими подводными камнями. А еще у нейронок нет ручек, так что паять и разруливать аппаратные проблемы тоже пришлось, как будто мы в 18 веке! Когда уже будет CLI, к которой можно подключить роборуку? В итоге провозился дольше, чем планировал.

Из проблем, которые не успел устранить до поездки, — очень медленные http–запросы через 2G GSM–модем. Родной протокол Traccar не позволяет пульнуть ему сразу пачку точек с разных трекеров (что логично), а каждый http–запрос занимает примерно 2 секунды.

Попробовал переделать на популярный UDP протокол WialonIPS, но принципиально ничего не улучшилось.

До гонки RusXFly оставался месяц. За исключением долгих запросов, прошивка к тому моменту работала стабильно. И, руководствуясь принципом, “лучшее — враг хорошего”, на гонку тоже всё поехало в таком виде.

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

Пришлось временно выкрутиться, подключив один шлюз через usb к ноуту, и отправлять пакеты через него. Показывать приличным людям такое, конечно, нельзя, но всё сработало: все трекеры были онлайн.

Старт пролога гонки на Юце
Старт пролога гонки RusXFly на Юце

Айтишники среди пилотов, дружно сделали вид, что моих костылей не заметили. Ну или решили, что так и надо. А потом все растянулись по маршруту, так что дальше всё уже работало нормально.

Оправдаюсь тем, что не хотел делать лишнюю точку отказа и обойтись стандартными механизмами Traccar. Но теперь видимо буду переписывать на MQTT или запускать промежуточный скрипт в который кидать батчи одним запросом.

Глава 8. Едем к Эльбрусу!

Наступила вторая половина сентября, ребёнку, уже загрустившему от нового учебного года, были объявлены внеплановые каникулы, грузимся в тачку и погнали! Курс на Юг!

Мы так-то нормальные туристы, и незадолго до этого вернулись из поездки на север к Белому морю. Я особо даже вещи не разбирал, только удочки выложил… Но наши обычные локации — это водоемы, а они плоские. Поэтому когда на горизонте появился Пятигорск, пейзажи были для нас завораживающими.

Для начала нас заселили в гостевой дом “Термики”, уже набитый под завязку парапланеристами. Там мы сразу погрузились в тусовку. “Летаешь? Нет? Ну не переживай, это временно!” — таким вдохновляющим приветствием меня встретил веселый бородатый хозяин.

И это на самом деле круто! Во–первых, даже если ты не летаешь, то всё равно это повод высоко забираться! Сам старт гонки был на высоте 2600 метров в урочище Джилы-Су. Но ребятам показалось этого мало и они затащили один из “шлюзов” еще выше — на гору Сирх, где стоит сотовая вышка. Благодаря ему мы принимали данные со всего направления на Малый Бермамыт, где была следующая контрольная точка. Я же растопырил свои антеннки на краю обрыва и смотрел, что вообще у нас получается. Получалось неплохо —через ретрансляции удавалось видеть даже спортсменов, летавших на противоположной стороне горы.

За заборчиком к которому я привязал антенну - огромный обрыв. Туалеты, что характерно, тоже на краю обрыва. Закрепленные от ветра растяжками.
За заборчиком к которому я привязал антенну — огромный обрыв. Туалеты, что характерно, тоже на краю обрыва. Закрепленные от ветра растяжками.

За спиной величаво белел во всей своей красоте Эльбрус! Над головой парили орлы и парапланеристы. Светило солнышко! Под моим рабочим местом где–то далеко–далеко внизу бурлила река. И водопад. Казалось бы вот она — идиллия! Что тут может пойти не так?

Но приехал я со своими железками, как оказалось, не зря! На второй день — день старта самой гонки погода резко испортилась. Нас чуть не сдуло с плато ураганом (еле успели собрать палатки) и пошёл снег! Погода была нелетная, и спортсмены пошли пешком. Часть из них оказалась заблокирована непогодой в горах: дороги размыло, каша из грязи и снега не позволяла двигаться с нормальной скоростью и выйти в долину, а суппортеры не могли проехать к нужным точкам маршрута. Кто-то, не выдержав непогоды, снимался с гонки. И понять их было можно. До финиша дошла только половина стартовавших атлетов.

Снегом засыпало и шлюз на Сирхе. Хотя он героически ещё 6 дней передавал телеметрию из сугроба, пока не разрядился его повербанк.

Помните я выше писал, что шлюз дешевый? Ну засыпало и засыпало, не по льду же там за ним ползать! Просто заблокировал симку после гонки и поехал домой. Саму коробочку местные парапланеристы потом сняли с горы через пару недель, когда позволила погода. Дорогущий LoRaWAN–шлюз я бы так, разумеется, в горах не бросил! Полз бы по скользким склонам, но забрал!

В условиях непогоды организаторам особенно важно было понимать, на каком этапе маршрута находится каждый спортсмен. Сотовой связи, как я уже писал, нет, рации не везде добивают, но у нас было большое количество и летающих ретрансляторов, и “шлюзов” на машинах, так что в высокогорье практически все спортсмены трекались в реальном времени.

Забавно то, что хуже их видеть мы стали потом, когда гонка спустилась в долину, ближе к Кисловодску. Участники растянулись, кто-то сошёл (а значит, минус машина его суппортеров), и в итоге у нас стало меньше “шлюзов”, которые могли бы передать сигнал. Но в долине работала сотовая связь, так что там это было уже не так критично. Кроме того, мешали современные реалии – спуфинг GPS.

На одном из промежуточных стартов было можно было наблюдать как после набора высоты спуфер откидывал трекер на несколько десятков километров в сторону. Потом спортсмен приземляется и он опять на координатах старта.

Разумеется, любая гонка это тяжело и для участников, и для организаторов. Здесь тоже моментами было тяжело. Это фактически работа. Акклиматизация, непривычные условия, нервы, переживания что что-то не получится и ты подведешь людей, беготня с ноутом, прописывание подменных трекеров, если какие-то выходят из строя, езда на машине с антенной по несколько сотен км там, где нет других экипажей, чтобы поймать сигнал, опять нервы…

Ребенку домашку тоже никто не отменял, от Петерсон тебя не спасут даже горы! В объяснении математики добровольно поучаствовало всё айтишное население лагеря.
Ребенку домашку тоже никто не отменял, от Петерсон тебя не спасут даже горы! В объяснении математики добровольно поучаствовало всё айтишное население лагеря.

Но вспомним цели! Запустить систему трекинга “из ничего в нигде”, и получить новый опыт. Эти цели я выполнил на все 100%, так что поездкой доволен!

Ну и, как всегда, любое приключение — это, в первую очередь, интересные люди! Люди, которые нашли себя и делают своё интересное дело!

Глава заключительная. Выводы и что мы будем делать дальше

Для прототипов, которых в принципе не существовало за три месяца до гонки, всё прошло более чем хорошо. Признаться, я думал, будет хуже.

Да, были косяки, были странные проблемы, когда на некоторых трекерах отвалился GPS. В пылу гонки и походной жизни некоторым поотрывали антенны или сломали порты зарядки. Паяльник и ЗИП (хотя это, наверное, сейчас была тавтология?) я брал не зря.

Спортсмены с пониманием отнеслись к тому, что организаторы заботятся об их безопасности, и ночью ответственно заряжали своё оборудование. А суппортеры перед стартами проверяли работу трекера спортсмена, потому что сами днём следили за ним через приложение.

Да, трекеры оказались нужны! Даже с учетом того, что где-то сигнал мог не проходить, приложениями пользовались и организаторы, и суппортеры.

Ещё во время гонки Анна сказала , что у неё это первая подобная гонка, когда она понимала, где именно находятся спортсмены и чуть меньше нервничала. То же самое мне сказал и Константин, директор по безопасности гонки. Всё-таки RusXFly — это не лёгкая прогулка, а сложное и опасное мероприятие, даже когда спортсмены на земле. Скользкие горные дороги, просто пипец какие погодные условия, которые выпали участникам в этом году, всё это добавило Анне, Косте, другим организаторам и суппортерам седых волос.

Анна радуется, что всё прошло хорошо!
Анна радуется, что всё прошло хорошо!

Для меня же запустить 40 устройств в реальных условиях — это прекрасный тест! Теперь занимаюсь доработкой софта, мои партнеры из Иннополиса дорабатывают аппаратную часть трекеров и разбираются с найденными проблемами.

Причиной проблемы с GPS скорее всего оказался банальный непропай некоторых модулей. Конечно, есть вопросы и по прошивке, и по индикации, и по корпусу, но это всё — обычные технические моменты, которые мы планируем решить за зиму. Следующий большой тест, который у меня запланирован, это уже тест в LoRaWAN–сети.

“Шлюзы” (буду по-прежнему писать в кавычках, а то стыдно!), судя по телеметрии, которую я с них видел, тоже отработали нормально. Как помните, даже если оставить их в сугробах, это их не очень расстраивает и уж точно не влияет на работоспособность.

Что же касается моего open source-проекта, то я ещё немного побалбесничаю и, наконец, допишу поддержку популярных платок с маркетплейсов, типа модулей LILYGO TTGO и Heltec.

Расскажите в комментариях, интересно было бы вам такое устройство для вашего активного хобби? И как ещё его могли бы применить? Это мотивирует не забивать! Пока это всё — некоммерческая тема, так что приятно видеть, когда твоя работа нужна людям.

Если вы хотите собрать себе своё кастомное устройство на базе модулей EByte, то у меня есть небольшой чатик в телеграмм по AGLoRa. Напишите мне в личку — и я вас туда добавлю (просто не хочется светить ссылку, а потом вычищать ботов с большими сиськами).

Ссылка на мой проект на GitHub: https://github.com/Udj13/AGLoRa

Если под какие-то задачи нужны не DIY, а нормальные LoRa или LoRaWAN трекеры с кастомной прошивкой, собранные в РФ (чтобы с НДС и всё такое) — напишите, скоро я смогу это организовать: shlyagin@gmail.com.

Спасибо, что дочитали! Старался не нудеть и писать не скучно!
Если что-то режет глаз или непонятно, напишите пожалуйста!

Ну и не могу не оставить ссылки на всех тех замечательных людей, которые втянули меня в это необычное приключение:

Ссылка на проект Анны, гонка RusXFly — https://rusxfly.ru/
Фильм про гонку RusXFly 2025: https://vk.com/wall-213617194_366

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *