Здравствуйте уважаемые читатели. Наверняка, многие из Вас занимались или занимаются спортом. Это отличное хобби и вообще, полезно для здоровья. Я большую часть детства провел на спортивных сборах по спортивному ориентированию. Увы, больших результатов в спорте я не достиг, но расставаться с ним (со спортом) очень не хотелось. И тогда я стал участвовать в организации спортивных соревнований. Сейчас это не работа, а скорее хобби. И сегодня я бы хотел рассказать Вам про мою роль в организации этих соревнований.
В этой статье я расскажу
- О том, что такое спортивный хронометраж на примере лыжного марафона
- Немного об используемом нами оборудовании
- О программном обеспечении для судейства
Так же будет несколько больших фотографий и картинок из гущи событий.
Иногда я буду использовать термин «судейство». Для нас это привычное слово, которое обозначает «контроль хода спортивного состязания». Ничего общего с государственным органом правосудия оно не имеет.
Наша роль — хронометраж
Люди всегда любили соревноваться. Во все века они выясняют кто быстрее, кто сильнее и выносливее.
Для объективного выявления сильнейших всегда нужны три вещи:
- Правила или регламент по которому проводятся состязания
- Равные условия для всех участников
- Независимая и не предвзятая третья сторона — спортивный судья, который фиксирует результаты состязания
Центральное место в судействе многих циклических видов спорта занимает хронометраж, то есть определение времени прохождения дистанции каждым из участников.
Мы проводим спортивные соревнования по разным видам спорта: велогонки, мультиспорт, спортивное ориентирование и даже городские квесты, но всегда наиболее яркие впечатления остаются от организации лыжных гонок (здесь речь идет про беговые лыжи).
С каждым годом массовые лыжные гонки становятся популярнее и собирают все большее количество участников. Несколько тысяч человек из всех уголков России и иногда Европы приезжают на гонку, чтобы на дистанциях в 10, 25 и 50 километров выяснить, кто круче. В России каждый год проходит около 20 крупных лыжных марафонов.
Лыжный марафон «Праздник севера» в Мурманске.
Меня всегда удивляли и восхищали люди, которые летят 10 тысяч километров на самолете, чтобы поучаствовать в такой гонке. Они платят большие деньги за перелет, проживание и за саму гонку.
Именно поэтому качество соревнований и оказываемого сервиса обязано быть высоким, предварительные результаты гонки должны появиться максимально быстро, ошибок в них должно быть минимум. Результаты гонки — это итоговая часть мероприятия и второе (после самой гонки) за чем приезжают спортсмены.
Из всего вышесказанного делаем вывод: хронометраж — одна из важнейших частей спортивного мероприятия. Требуется высокая точность, дисциплина и скорость работы каждого участника команды хронометража.
Что в этом сложного?
Фотография Марии Шальневой с марафона в Дубне 14-02-2015
«Что сложного в том, чтобы замерить время спортсменов и распечатать на принтере итоговую таблицу результатов?» — спросит читатель. Все дело в том, что работа бригады хронометража проходит в достаточно стрессовой обстановке.
Вот несколько тому причин:
- Все мероприятие очень сжато по времени. Есть всего несколько часов за которые надо успеть очень много дел: построить судейский городок, наладить оборудование, настроить сеть, подготовить базу участников для судейской программы.
- Все действо происходит на улице, а в случае с лыжными марафонами к тому же на морозе. Вокруг очень громкая музыка и голос комментатора: иногда даже не слышны собственные мысли.
- Нет позволения на ошибку, поскольку одна маленькая ошибка влечет за собой шквал более серьезных проблем. Если ошибка закралась в начало протокола результатов — медалями и дорогими призами от спонсоров могут наградить не тех участников.
- В самый неподходящий момент срабатывает закон подлости: ломается роутер, не пингуются ридеры, не заводится/ломается генератор или бензопила или Windows выдает синий экран смерти
- Идиотское поведение отдельно взятых участников, а иногда и организаторов. Люди считают возможным вмешиваться в работу бригады хронометража, отвлекать вопросами и настаивать на решении собственных проблем.
- Количество участников гонки частенько зашкаливает за пару тысяч человек. Ошибка в подсчетах результатов повлечет за собой недовольство многих.
Оборудование которое мы используем
Включение антенн в RFID-ридер
Количество участников гонки в две-пять тысяч человек подразумевает обязательное использование электронных средств хронометража. Если мы будем использовать часы, карандаш и бумагу для подсчета результатов, то ждать их придется «как минимум вечность».
Задача звучит так: необходимо автоматически определять точное время прохождения каждого участника через определенную точку на дистанции и сохранять в базу данных пару «номер участника — время пересечения линии финиша».
Изначально мы рассматривали два вариант решения, один из которых тут же отпал из-за своего несовершенства и сложности реализации.
Первый вариант (от которого мы сразу отказались) — распознавание номеров участников на фото или видео, сделанном на точке пересечения, автоматической камерой или фотоаппаратом. Так поступает наша доблестная ГИБДД — снимают, распознают, рассылают письма со штрафами. Пример: лыжник проехал через линию финиша, пересек «лучик», который связан с фотоаппаратом. Фотография тут же автоматически распознается, время и номер с нее попадает в базу данных. Вы можете сами судить о сложности разработки и вероятных проблемах такой системы. при использовании ее на массовых мероприятиях.
Второй вариант (который мы используем) — использование RFID меток, вшитых в майки-номера участников. Принцип работы радиочастотной идентификации, я скопировал с Википедии:
На объект, который необходимо контролировать устанавливается радиочастотная метка. При попадании объекта с меткой в зону действия считывателя, считыватель принимает от метки содержащуюся в ней информацию об объекте и передаёт её в вычислительное устройство.
Схему работы вы можете понять по фотографии ниже:
Участник проезжает мимо антенн, пассивная (т.е. без собственного источника питания) RFID-метка в майке участника улавливает электромагнитные волны считывателя и отправляет ему ответный сигнал. Дальше — дело техники в прямом и переносном смысле. Необходимо выбрать ответ с максимальным уровнем сигнала (этим занимается ПО в ридере) и отправить пакет «время—номер» по сети на сервер.
Технология работает хорошо. Проблема «пропуска» участников связана в основном с «локтями, прижатыми к туловищу» (тело человека экранирует сигнал) и недостаточной мощности пассивных меток (использование активных меток очень дорого для массовых марафонов).
Первым делом мы устанавливаем антенны и ридеры на контрольных точках (обычно это одна промежуточная точка и финиш).
Схема (вид сверху) финишного городка лыжного марафона
Провода приходится закапывать в снег, ведь их могут зацепить лыжами. Чаще всего копать снег лед очень сложно, поэтому в бой вступает бензопила.
Дальше мы тянем провода: все ридеры, IP-камеру, служебные компьютеры, принтер необходимо собрать в одну сеть.
В палатке мы ставим газовую грелку, потому что риск замерзнуть и заболеть сидя за компьютером на морозе очень высок.
Фото с промежуточной отсечки
Программное обеспечение для хронометража и судейства
Основная задача бригады хронометража — по первому требования предоставлять главному судье соревнований актуальные и безошибочные протоколы результатов гонки. Простым языком, протокол результатов — это таблица участников гонки, разделенная на возрастные группы и отсортированная по времени прохождения дистанции. Звучит достаточно просто и кажется можно обойтись одним только Excel-ем для создания такой таблицы.
Некоторые организаторы-старожилы и правда используют Excel для судейства подобных стартов. У них есть шаблоны файлов под каждый тип гонки, отлаженная коллекция макросов, очень строгие и жесткие правила работы. На мой взгляд — это сложно, неудобно и очень ограничивает использование дополнительных плюшек (скажите, как например, разослать через Excel смски с результатами участникам, которые только что финишировали, сделать GPS трансляцию на большой монитор в центре соревнований и он-лайн трансляцию результатов в интернет?)
Мы решили пойти дальше и сделали программу. Точнее даже не программу а веб-приложение. OpenEventor (так мы его назвали) написан на языке PHP (здесь некоторые читатели должны нахмурить брови и слегка покачать головой). Довольно странный выбор для написания узко-специфичного ПО, которое к тому же должно работать с оборудованием, скажут скептики.
Выбор стека технологий для разработки мы выбрали осознанно и вот несколько причин:
- Возможностей, которые нам дает PHP, HTML5 и JS — вполне хватает для реализации задуманного.
- Не нужно каждый раз компилировать. Увы, но частенько мне приходится править код прямо во время гонки, так сказать на «броне горящего танка». В этот момент возможность дописать 2 строчки кода, и нажатием на F5 в браузере получить результат — очень хорошая возможность
- PHP — очень популярен, а это значит, что можно найти дешевого программиста для написания плагинов (об этом ниже).
- Не требуется устанавливать софт на каждый компьютер. В тот момент, главный судья соревнований или комментатор хочет «видеть у себя на макбуке как финишируют участники», достаточно включить его в сеть и открыть в браузере нужную страницу. А когда нужно оперативно посадить пятерых девочек на регистрацию новых участников — реализация OpenEventor-а в виде веб-приложения кажется мудрой.
- Наши ридеры работают по сети. IP камера, разумеется тоже. Поэтому работать с оборудование мы можем вполне комфортно и на PHP.
- Я к сожалению не знаю других языков программирования, так же хорошо как PHP. Возможно мы бы и сделали программу на Java или C#, если бы кто то из нашей команды знал Java или C#.
Для тех кто не осведомлен, что можно «работать в браузере без Интернета», делается это так:
- Компьютеры объединяются в одну сеть с помощью свича и витой пары или с помощью Wi-Fi роутера.
- На одном из компьютеров мы запускаем веб-сервер (мы используем OpenServer Максима Архипова ArhMax)
- Все, кому нужен доступ к программе — просто открывают браузер и вводят там адрес, типа 192.168.1.15 и попадают на главную страницу OpenEventor-а.
Для хранения данных сразу была выбрана база данных SQLite. Для тех кто никогда не использовал SQLite — очень рекомендую взять на вооружение (статья на Хабре). Это очень надежная и весьма быстрая БД. Специальный сервер для нее не нужен.
Для нас концепция SQLite оказалась идеальной: каждое мероприятие (марафон, гонка, или еще что) — это отдельная база данных. Каждая база данных SQLite — это отдельный файл *.db. Старые базы легко архивировать, чтобы не занимали место и не потерялись, а текущие — легко передавать, если есть такая необходимость. Работать с SQLite на PHP- очень просто и безопасно, она поддерживается интерфейсом PDO. Если вдруг приходится сделать что-то сверхсложное, что сделать силами OpenEventor не выходит, можно написать SQL запрос руками.
Сплит монитор (слева) и раздел «Плагины» (справа)
Как я упомянул выше, система расширяется с помощью плагинов.
Сделать универсальную систему для судейства спортивных соревнований — не реально.
Во-первых, у каждого организатора свои пожелания и требования, касательно того, как судить. И если в лыжах есть какие-никакие стандарты, то в таких видах спорта, как например мультигонки — можно придумать только сто тысяч способов по каким параметрам формировать финишный протокол.
Во-вторых, включать такие второстепенные вещи, как отправка смс и и автоматическая публикация фотографий из финишного створа (которые делает автоматический фотоаппарат) — не логично.
Именно поэтому в программе реализован лишь основной функционал: базовая работа с участниками, группами, командами и сплитами, а все дополнительные фишки, мы и все желающие могут дописать самостоятельно.
Немного про устройство программы
В системе есть две ключевые сущности:
- Участник — обладает такими параметрами как пол, год рождения, группа (класс в котором он соревнуется), фамилия, имя, номер (тот который крепится на грудь или на ногу), и еще несколькими.
- Сплит —это факт и время пересечения определенной точки на дистанции определенным участником
Остальные (команды, группы, дистанции) — являются вторичными и долго рассказывать про них я не стану. На любом спортивном мероприятии, где спортсмены соревнуются индивидуально есть деление на команды (например: по городам или спортивным клубам) и группы (например: по возрасту и полу). Дистанция, в циклическом виде спорта (бег, лыжи, велогонки, ориентирование и т.д.) это правильная последовательность сплитов (см. выше), которую необходимо «собрать» участнику во время гонки.
Пример: Лыжник из возрастной группы М35 (мужчина 35 лет) преодолевает дистанцию в 50 км, которая состоит из 5 кругов. Он пять раз проезжает десятикилометровый круг, 4 раза проезжаю промежуточную отсечку и на пятый раз — финишную отсечку в другом месте трассы. Для лыжника — это просто 50 километров (хотя, это конечно очень не просто :). Для меня, как для хронометражиста — это дистанция lap, lap, lap, lap, finish.
Основная наша работа во время гонки — контролировать работу оборудования и очень быстро исправлять ошибки. Считыватели иногда пропускают участников. Обычно это 3 сплита из 100. Наша задача — определить, «кого не поймало», вычислить время сплита (например посмотреть сохраненное видео с ip камеры, которая 4 часа записывает видео). Иногда даже приходится пользоваться бумажным дублем.
В сплит-мониторе мы сразу видим «проблемных» участников
Решить проблему с пропусками — не сложно. Намного сложнее вовремя определить, что эта проблема есть. Именно для этого мы сделали сплит-монитор: это плагин, в котором отображается самая актуальная информация о сплитах. Плагин анализирует сплиты участника, сравнивания с заданной дистанцией выясняет есть ли проблема. В этот момент еще можно понять, что произошло: лыжник просто случайно закрыл локтями чипы (rfid-метки) и «не поймался» на прошлой промежуточном финише, сошел с дистанции после после второго круга и ошибся поворотом и вместо круга 25 км проехал всего 10. Дальше разобраться будет не реально: он соберет вещи и уедет домой, а потом всю неделю будет ворчать на форуме, что его дисквалифицировали ни за что…
Итогом мероприятия всегда является протокол результатов по которым проходит награждение победителей.
Фотография Марии Шальневой с марафона в Дубне 14-02-2015
Спасибо за внимание
Спасибо всем, кто дочитал до конца. Если статья показалась Вам интересной, я обязательно напишу еще несколько, например про специфику и софт для организации городских квестов, про использование технологий в спортивном ориентировании.
Автор: Surzhikov
Я думаю, что простой GPS трекер и лазер на финише + видеокамера (для спорных случаев) гораздо проще и дешевле в смысле персонала и развёртывания – свёртывания, тучи чекпойнтов на километрах трассы. Потом либо снять с них данные, либо организовать связь с центром. Вы там ещё жалуютесь на сложность развернуть. Думаю, что свернуть ещё сложнее, тупо за счёт чистки или даже краже аппаратуры.
Ну да, трекеры недёшевы, но это одноразовая затрата и при крупных партиях идут с заметной скидкой.
Всякие мухляжи, вроде среза части петли или ещё какого косяка – видно на экране.
А как быть, если двое или даже трое идут нос-в-нос и всякий RFID видит только того, которого ему удобнеее?
Короче, Ваше решение, извините, кал.
Хоббийный дилетантский кал.
@c0x
Трекеры на каждого из 5+ тыс участников?
На Бостонском марафоне где 40+ тыс тоже предложишь трекеры?
У тебя есть 5 минут чтобы после финиша первого участника начать оперативно выдавать протоколы результатов. Все эти пять минут у тебя за спиной стоит делегат из какой-нибудь Эстонии и спрашивает “ну когда, ну когда, ну когда же”.
В варианте с пассивной RFID – метки просто вшиваются в майки-номера на этапе производства, эти майки остаются участникам. RFID (пассивный/активный) или аналогичные системы на BLE/xbee – единственный способ сделать хронометраж на массовых мероприятиях.
Кароче ваше сообщение и мнение – хоббийный дилетантский кал.
и да, настройте время на сервере
nostromo ~ # ssh netfram.com
+—————————————————+
! Idiots, go go go !
+—————————————————+
Last login: Mon Jul 17 09:02:51 2017
root@blackfish:~# ntpq -c pee
remote refid st t when poll reach delay offset jitter
==============================================================================
10.46.1.10 .INIT. 16 u – 1024 0 0.000 0.000 0.000
LOCAL(0) .LOCL. 10 l 5d 64 0 0.000 0.000 0.000
-ntp.aas.ru .GPS. 1 u 916 1024 377 39.056 0.471 1.997
-ntp0.nl.uu.net .PPS. 1 u 18 1024 377 83.825 1.751 1.749
-ntp1.nl.uu.net .PPS. 1 u 161 1024 377 82.383 -3.344 1.395
-ntp1.vniiftri.r .MRS. 1 u 251 1024 377 39.888 1.008 0.515
+ntp2.vniiftri.r .MRS. 1 u 140 1024 377 39.013 0.101 0.047
+ntp3.vniiftri.r .MRS. 1 u 876 1024 377 39.193 0.164 0.278
*ntp4.vniiftri.r .IRIG. 1 u 652 1024 377 39.246 0.118 1.566
root@blackfish:~# date
Чт июл 27 11:11:56 +05 2017
root@blackfish:~#