Система спортивного хронометража — взгляд изнутри

Здравствуйте уважаемые читатели. Наверняка, многие из Вас занимались или занимаются спортом. Это отличное хобби и вообще, полезно для здоровья. Я большую часть детства провел на спортивных сборах по спортивному ориентированию. Увы, больших результатов в спорте я не достиг, но расставаться с ним (со спортом) очень не хотелось. И тогда я стал участвовать в организации спортивных соревнований. Сейчас это не работа, а скорее хобби. И сегодня я бы хотел рассказать Вам про мою роль в организации этих соревнований.

В этой статье я расскажу

  • О том, что такое спортивный хронометраж на примере лыжного марафона
  • Немного об используемом нами оборудовании
  • О программном обеспечении для судейства

Так же будет несколько больших фотографий и картинок из гущи событий.
Иногда я буду использовать термин «судейство». Для нас это привычное слово, которое обозначает «контроль хода спортивного состязания». Ничего общего с государственным органом правосудия оно не имеет.

Наша роль — хронометраж





Люди всегда любили соревноваться. Во все века они выясняют кто быстрее, кто сильнее и выносливее.
Для объективного выявления сильнейших всегда нужны три вещи:

  1. Правила или регламент по которому проводятся состязания
  2. Равные условия для всех участников
  3. Независимая и не предвзятая третья сторона — спортивный судья, который фиксирует результаты состязания

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

Мы проводим спортивные соревнования по разным видам спорта: велогонки, мультиспорт, спортивное ориентирование и даже городские квесты, но всегда наиболее яркие впечатления остаются от организации лыжных гонок (здесь речь идет про беговые лыжи).

С каждым годом массовые лыжные гонки становятся популярнее и собирают все большее количество участников. Несколько тысяч человек из всех уголков России и иногда Европы приезжают на гонку, чтобы на дистанциях в 10, 25 и 50 километров выяснить, кто круче. В России каждый год проходит около 20 крупных лыжных марафонов.


Лыжный марафон «Праздник севера» в Мурманске.

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

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

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

Что в этом сложного?



Фотография Марии Шальневой с марафона в Дубне 14-02-2015

«Что сложного в том, чтобы замерить время спортсменов и распечатать на принтере итоговую таблицу результатов?» — спросит читатель. Все дело в том, что работа бригады хронометража проходит в достаточно стрессовой обстановке.

Вот несколько тому причин:

  • Все мероприятие очень сжато по времени. Есть всего несколько часов за которые надо успеть очень много дел: построить судейский городок, наладить оборудование, настроить сеть, подготовить базу участников для судейской программы.
  • Все действо происходит на улице, а в случае с лыжными марафонами к тому же на морозе. Вокруг очень громкая музыка и голос комментатора: иногда даже не слышны собственные мысли.
  • Нет позволения на ошибку, поскольку одна маленькая ошибка влечет за собой шквал более серьезных проблем. Если ошибка закралась в начало протокола результатов — медалями и дорогими призами от спонсоров могут наградить не тех участников.
  • В самый неподходящий момент срабатывает закон подлости: ломается роутер, не пингуются ридеры, не заводится/ломается генератор или бензопила или Windows выдает синий экран смерти
  • Идиотское поведение отдельно взятых участников, а иногда и организаторов. Люди считают возможным вмешиваться в работу бригады хронометража, отвлекать вопросами и настаивать на решении собственных проблем.
  • Количество участников гонки частенько зашкаливает за пару тысяч человек. Ошибка в подсчетах результатов повлечет за собой недовольство многих.

Оборудование которое мы используем



Включение антенн в RFID-ридер

Количество участников гонки в две-пять тысяч человек подразумевает обязательное использование электронных средств хронометража. Если мы будем использовать часы, карандаш и бумагу для подсчета результатов, то ждать их придется «как минимум вечность».

Задача звучит так: необходимо автоматически определять точное время прохождения каждого участника через определенную точку на дистанции и сохранять в базу данных пару «номер участника — время пересечения линии финиша».

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

Первый вариант (от которого мы сразу отказались) — распознавание номеров участников на фото или видео, сделанном на точке пересечения, автоматической камерой или фотоаппаратом. Так поступает наша доблестная ГИБДД — снимают, распознают, рассылают письма со штрафами. Пример: лыжник проехал через линию финиша, пересек «лучик», который связан с фотоаппаратом. Фотография тут же автоматически распознается, время и номер с нее попадает в базу данных. Вы можете сами судить о сложности разработки и вероятных проблемах такой системы. при использовании ее на массовых мероприятиях.



Второй вариант (который мы используем) — использование RFID меток, вшитых в майки-номера участников. Принцип работы радиочастотной идентификации, я скопировал с Википедии:
На объект, который необходимо контролировать устанавливается радиочастотная метка. При попадании объекта с меткой в зону действия считывателя, считыватель принимает от метки содержащуюся в ней информацию об объекте и передаёт её в вычислительное устройство.

Схему работы вы можете понять по фотографии ниже:



Участник проезжает мимо антенн, пассивная (т.е. без собственного источника питания) RFID-метка в майке участника улавливает электромагнитные волны считывателя и отправляет ему ответный сигнал. Дальше — дело техники в прямом и переносном смысле. Необходимо выбрать ответ с максимальным уровнем сигнала (этим занимается ПО в ридере) и отправить пакет «время—номер» по сети на сервер.

Технология работает хорошо. Проблема «пропуска» участников связана в основном с «локтями, прижатыми к туловищу» (тело человека экранирует сигнал) и недостаточной мощности пассивных меток (использование активных меток очень дорого для массовых марафонов).

Первым делом мы устанавливаем антенны и ридеры на контрольных точках (обычно это одна промежуточная точка и финиш).


Схема (вид сверху) финишного городка лыжного марафона

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



Дальше мы тянем провода: все ридеры, IP-камеру, служебные компьютеры, принтер необходимо собрать в одну сеть.



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


Фото с промежуточной отсечки

Программное обеспечение для хронометража и судейства


Основная задача бригады хронометража — по первому требования предоставлять главному судье соревнований актуальные и безошибочные протоколы результатов гонки. Простым языком, протокол результатов — это таблица участников гонки, разделенная на возрастные группы и отсортированная по времени прохождения дистанции. Звучит достаточно просто и кажется можно обойтись одним только Excel-ем для создания такой таблицы.

Некоторые организаторы-старожилы и правда используют Excel для судейства подобных стартов. У них есть шаблоны файлов под каждый тип гонки, отлаженная коллекция макросов, очень строгие и жесткие правила работы. На мой взгляд — это сложно, неудобно и очень ограничивает использование дополнительных плюшек (скажите, как например, разослать через Excel смски с результатами участникам, которые только что финишировали, сделать GPS трансляцию на большой монитор в центре соревнований и он-лайн трансляцию результатов в интернет?)

Мы решили пойти дальше и сделали программу. Точнее даже не программу а веб-приложение. OpenEventor (так мы его назвали) написан на языке PHP (здесь некоторые читатели должны нахмурить брови и слегка покачать головой). Довольно странный выбор для написания узко-специфичного ПО, которое к тому же должно работать с оборудованием, скажут скептики.



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

  1. Возможностей, которые нам дает PHP, HTML5 и JS — вполне хватает для реализации задуманного.
  2. Не нужно каждый раз компилировать. Увы, но частенько мне приходится править код прямо во время гонки, так сказать на «броне горящего танка». В этот момент возможность дописать 2 строчки кода, и нажатием на F5 в браузере получить результат — очень хорошая возможность
  3. PHP — очень популярен, а это значит, что можно найти дешевого программиста для написания плагинов (об этом ниже).
  4. Не требуется устанавливать софт на каждый компьютер. В тот момент, главный судья соревнований или комментатор хочет «видеть у себя на макбуке как финишируют участники», достаточно включить его в сеть и открыть в браузере нужную страницу. А когда нужно оперативно посадить пятерых девочек на регистрацию новых участников — реализация OpenEventor-а в виде веб-приложения кажется мудрой.
  5. Наши ридеры работают по сети. IP камера, разумеется тоже. Поэтому работать с оборудование мы можем вполне комфортно и на PHP.
  6. Я к сожалению не знаю других языков программирования, так же хорошо как PHP. Возможно мы бы и сделали программу на Java или C#, если бы кто то из нашей команды знал Java или C#.

Для тех кто не осведомлен, что можно «работать в браузере без Интернета», делается это так:

  1. Компьютеры объединяются в одну сеть с помощью свича и витой пары или с помощью Wi-Fi роутера.
  2. На одном из компьютеров мы запускаем веб-сервер (мы используем OpenServer Максима Архипова ArhMax)
  3. Все, кому нужен доступ к программе — просто открывают браузер и вводят там адрес, типа 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

Спасибо за внимание


Спасибо всем, кто дочитал до конца. Если статья показалась Вам интересной, я обязательно напишу еще несколько, например про специфику и софт для организации городских квестов, про использование технологий в спортивном ориентировании.
Поделиться публикацией
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 25
    0
    А расскажите, пожалуйста, побольше о механизме «убийства» меток после финиша.
      +3
      Для «убийства» метки, ридер посылает специальную команду (разумеется с паролем). Метка, получив такую команду переходит в режим молчания и навсегда перестает отвечать. То есть никаких физических изменений в метке не происходит, ничего не перегорает и не ломается.

        0
        А «оживить» после этого её можно?
          0
          Производитель уверяет, что нет.
          К сожалению ссылку на документацию не могу найти.
      0
      Т.е. по сути вы сделали конкурента SIWIDATA. Например отсюда(для работы нужен плагин Silverlight). Поддерживаю ваши начинания.
      Это выглядит вот так:
      Скрытый текст
      image

      Правда сплиты(контрольные засечки) доступны только во время гонки.

      П.С. Расскажите подробнее про систему «фотофиниша». Не думали ли вы сделать её похожей как на скачках?
        0
        Спасибо.
        Раньше про SIWIDATA я не слышал. На скриншоте выглядит приятно. Как доберусь до компьютера с сильверлайтом — изучу.

        Для трансляции онлайн результатов у нас есть нечто похожее, правда пока еще не до конца работает: сложности с веб-сокет сервером (но в течение нескольких недель допишу) online.openeventor.ru/?event=31

        Про фотофиниш.
        По сути, фотофиниш на массовых марафонах нам нужен в исключительных ситуациях, когда два или более спортсменов финишируют одновременно. Мы используем обычную широкоугольную камеру; для того чтобы понять «кто первый» этого хватает. Тем более, такие случаи на дистанциях 10, 25, 50 км — редкость.

        Про «автоматический фотоаппарат», который будет рассылать участникам фотографии (я упоминал об этом в статье) — пока это концепт. Думаем, как дешевле и надежнее сделать.

        А как на скачках?
          0
          Про скачки.
          Вот здесь включите 8 серию на времени 17.45.
          Насчёт изучения.
          Советую вам изучить SIWIDATA во время гонок. Тогда у неё появляются дополнительные функции. Вот сейчас например идёт гонка.
          Скрытый текст
          image

          1. Хорошая особенность — это то, что экран можно делить на 2,4(как у меня на скриншоте),8, 12 частей. И в каждой можно открыть по отсечке. Это удобно когда надо в режиме «реального времени» сравнить ход нескольких спортсменов (больше 2).
          2. Shooting range. Как видите, у меня в нижней строке Выбран пункт Shooting range. Из-за этого у меня открылась таблица с огневым рубежом, где я могу видеть в реальном времени, кто лёг на коврик для стрельбы, и как он стреляет.
          3. Если я выберу Printed Reports, то вместо таблицы с огневым рубежом мне откроется таблица с результатами: Время каждого круга, Время на огневом рубеже, Общее время и т.п.
          4. Вкладка Shedule отправляет нас к календарю гонок. Этот пункт не актуален, если гонка разовая.
          5. Cups. отправляет к Общему зачёту и зачётам по каждой дисциплине. Плюс ко всему, присутствует возможность просмотреть прошлые года. Этот пункт не актуален, если гонка разовая.
          6. Bios. Можно просмотреть данные о любом участнике. Где учился, какой инвентарь использует и т. п.
          7. My favorites. Всё просто. Заходите. Выбираете игрока и SIWIDATA выделяет его результаты красным, как в прошлом моём комментарии. Так удобнее наблюдать за любимцами или сильнейшей группой.
          8. Здесь нет такого, но когда спортсмен нарушает правила, то возле его имени появляется *. Когда он финиширует, то компьютер автоматом накидывает определённое время к результату.

          П.С. Если будут ещё вопросы — задавайте.
        +2
        Расскажите про расстановку антенн? Почему именно такая конфигурация? На каком максимальном расстоянии считывается метка? При какой скорости движения? Можно ли такую метку считать с расстояния метров 6 и скорости 100-120 км/ч? (это я проецирую на автоспорт :) )
          0
          и про само оборудование — что используете? Есть ли более дешевые варианты и т.д.
            0
            Есть ридеры и за 50$ которые будут работать хорошо, при условии использования активных меток.
            И тут приходится выбирать:
            • либо один раз покупать дорогие ридеры и использовать дешевые пассивные метки
            • либо пользовать дешевыми ридерами и дорогими активными метками


            Наши ридеры (noname) сейчас стоят баснословных денег (особенно с новым курсом $).
            Точное название и характеристики, увы не знаю.
            0
            Для наших задач (массовые марафоны) важно «поймать» максимум участников, именно поэтому антенны установлены в таком порядке:
            • одна смотрит навстречу
            • еще две ровно на линии отсечки
            • и еще одна смотри вслед уходящему спортсмену

            Одна (а не две) антенна стоит с противоположной стороны трассы, потому что два провода закапывать (пилить лед, потом трамбовать) — лень.

            За то время, пока спортсмен проезжает через линию, ридер опрашивает метку около 100 раз и выбирает отсечку с «наилучшим сигналом».
            В коридоре около 8 метров срабатывает 95% меток.

            Что касается автоспорта — есть сомнения, думаю не получится.
            0
            А название у вас по фэншую! У программистов есть поверье: если слишком рано придумать программе красивое название, она «не взлетит». На первых порах придумывают какое-нибудь простенькое название — что-то вроде SomethingDoer.
              +1
              В общем — не парился.
              Eventor это вроде как «Мероприятор», то есть для мероприятий.
              А Open, потому что вот-вот хочу на гитхаб выложить, чтобы люди пользовались.
                0
                Похоже, что авторы бесконечных js-фреймворков не в курсе этого поверья :)
                0
                Очень интересно спасибо!

                Расскажите пожалуйста про городские квесты — специфику и софт. Я имею отношение к этой сфере (для корпоративных заказчиков, правда), поэтому мне безумно интересно.

                У вас не было опыта применения вашей системы для хронометража автомобильных гонок?
                  0
                  Обязательно, чуть позже напишу статью про квесты, расскажу про свои наработки (тоже для корпоративных заказчиков), весь прошлый год занимался ими вплотную.

                  Опыта в автогонках не было.
                  0
                  Как раз на основе дальнобойного RFID-ридера собираю систему хронометража для заездов на тренировках по мотоджимхане. Ридер за 60$ даёт дальность в один метр, что неплохо, но не идеально. Что за оборудование используете вы?
                    0
                    В условиях гонки дальность срабатывания обычно 4-5 метров.
                    Что у нас за ридеры — сказать точно не могу (я занимался в основном ПО, а мой напарник — оборудованием).
                      0
                      А метки у вас пассивные?
                        0
                        Да, пассивные метки на 125kHz, но толстые — с увеличенным числом витков антенны.
                      0
                      Спасибо! Очень интересно.
                      5 лет назад писал похожую программулину для покатушек. правда без считывателя меток — масштабы не те ( до 50 участников )

                        +1
                        А сейчас уже не проводите?
                        Какой вид покатушек (в смысле какой вид спорта)?
                          0
                          Автомобильные. opencup.honda.org.ua/archive/
                          к сожалению сейчас найти спонсора на не сильно освещаемое журналистами мероприятие — нереально. каждый выживает как может…
                        0
                        Может, надо метку делать в майке, но не сбоку, а на плече? Антенны ставить на более высоком штативе, чтобы они сверху смотрели на участников. Тогда не будет проблем с закрыванием метки локтями.
                          0
                          Метка должна быть повернута лицом (или спиной) к антенне (но не боком и не под углом).
                          Если установить ее (метку) на плечо, то антенну придется ставить не то чтобы выше, а прямо над головой участника.

                          Мы думали про такой вариант.
                          Однако строительство конструкций для закрепления антенн над головой — дело сложное и долгое.

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое