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

    Хабр, приветствую! Мы занимаемся организацией и проведением детских робототехнических соревнований в рамках АгроНТИ 2020 по направлению Агророботы. Но, как вы уже догадываетесь, в этом году с массовыми мероприятиями, а тем более детскими, не все так однозначно…


    Соревнования


    Как это происходит в нормальном режиме. Есть АгроВУЗы, являющиеся региональными площадками. Есть команды школьников из сельскохозяйственных регионов. Есть полигон, имитирующий наши необъятные просторы и есть робот на дистанционном управлении. Робот поставляется в виде конструктора и команда перед соревнованиями его собирает. На соревнованиях робот под управлением оператора за определенное время должен выполнить задания на полигоне: перевезти тюки сена, переместить бидоны, посадить картошку, вспахать поле. За выполнение заданий и прохождение участков полигона команда получает баллы, за ошибки штрафы. Соревнования проходят 2 дня. Вот так это выглядело в Белгороде







    Робот — это радиоуправляемая 6-ти колесная тележка с различными специальными исполнительными механизмами. За основу шасси взята кинематическая схема от марсохода Curiosity. На роботе имеется: схват совмещенный с отвалом, устройство для посадки картофеля и плуг. Детали робота изготовлены лазерной резкой из листа дюраля Д16 толщиной 2мм и 3D печатью ABS пластиком. Робот управляется Arduino совместимым контроллером нашей разработки, в качестве пульта — беспроводной геймпад. Назвали мы его Агробот.



    Полигон — это 35 квадратных ячеек, каждая ячейка размером 800х800мм. На полигоне имитируются разные типы местности и строений: холмы, леса, мосты, эстакады, овраги и т.д. Ячейки полигона произвольно стыкуются друг с другом и, в результате, получатся реконфигурируемый испытательный полигон сельскохозяйственной направленности.



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

    В мае 2019 года мы поставили полигоны и конструкторы в 10 городов и успешно провели соревнования. В мае 2020 года соревнования должны были пройти в 9-ти новых городах: Санкт-Петербург, Москва, Орёл, Барнаул, Уфа, Рязань, Омск, Пермь, Самара. С начала года началась работа по изготовлению 9-ти полигонов и 120-ти конструкторов, с планами провести соревнования во второй половине мая… И, как вы, наверное, уже догадались, планы пришлось слегка корректировать! Вмешалась вот эта бяка



    Проблема


    К марту уже стало понятно, что соревнования переносятся на неопределенный срок: начались перебои с поставками комплектующих и изготовлением деталей полигонов, каникулы в масках и прочая самоизоляция… в общем, вам все это известно. Понимая не радужные перспективы, организаторы конкурса АгроНТИ попросили что-то придумать в мае, чтобы ребята не скучали и, при этом, все должно быть дистанционно и в масках. И еще, желательно, подключить ребят из регионов с прошлого года… в общем охватить все 19 регионов. Был проведен небольшой мозговой штурм, сразу после вынужденных апрельских каникул и стало понятно, что ничего не понятно. Надо как то провести дистанционные робототехнические соревнования!!!



    В сухом остатке: у нас имеется тестовый полигон и несколько тестовых Агроботов, все это находится в Санкт-Петербурге. Как этим рулить из Уфы или Рязани решительно не ясно. А есть еще и Уссурийск!!!

    Но, мы же, вроде, робототехники, 21-й век на дворе!!! Интернет… Телеуправление… И вот это вот все!

    Слабая надежда


    В нашей лаборатории имелись наработки по электронике для мобильных роботов на базе Raspberry Pi, в частности, почти готовые платы-шилды для Raspberry Pi в основе которых был микроконтроллер Atmega328p. На плате также расположен драйвер коллекторных двигателей L298P на 2 канала, 4 канала управления сервами, динамик и разъем для подключения OLED дисплея 128х64pix.



    С Raspberry Pi плата общается по шине i2c и под плату написана библиотека ПО на языке Python, обеспечивающая программный интерфейс взаимодействия с железом. Все немного сыроватое, но, главное, платы есть. Вот они, бери!
    Агробота мы, в свою очередь, проектировали таким образом, чтобы в него можно было поставить Raspberry Pi на место штатной платы Arduino и тут, как вы понимаете, звезды сошлись! Конспирологи могут начать рассказывать, что 3 года назад мы предвидели вирус и заранее подготовились. К Raspberry Pi подключается штатная камера, которую можно использовать в качестве курсовой на роботе, по USB можно еще что то повесить и на борту имеется годный Wi-Fi.
    Достали с полки Агробота сдули пыль со старичка и заменили ему масломозги, замена явно пошла на пользу, робот значительно поумнел. В качестве ОС на Raspberry Pi была установлена OC Raspbian. Решено было, что будет две камеры: одна курсовая на штанге и одна смотрящая на посадку картофеля. Обе камеры с объективом «рыбий глаз». Аппаратные камеры, как и Raspberry Pi 4, были в наличии. Камера для посадки картофеля была заказана из Китая. Время позволяло, алиэкспресс вроде работал и посылка должна была прийти как раз к соревнованиям ха-ха 3 раза. Плуг с робота решено было демонтировать, потому как и так уже хорошо, а пахать целину мы тут дистанционно точно не будем. Дисплей разместили в секторе обзора курсовой камеры с перспективой выводить на него информацию, полезную для участника. Начали проектировать и печатать детали для установки камер, дисплея и штанги. Ну, а пока получился такой макет, на профессиональном робототехническом сленге — чучело валенка, подключенное к внутренней ethernet-сети лаборатории по проводам и запитанное от блока питания.



    И тут встал вопрос, как запитывать робота, так как штатно он питался от 2-x Li-Ion батареек Теслы 18650 АКБ и этого вполне хватало на очные соревнования, но теперь у нас прожорливая Raspberry Pi на борту и соревнования будут длиться 24x7 весь рабочий день. Менять АКБ каждые полчаса очень не хотелось, было решено запитать робота по проводам, а провод в свою очередь свесить с потолка по центру полигона, завести его в штангу курсовой камеры и как-то подтягивать.
    Ну такое
    Забегая вперед скажу, что решение было не очень… И впоследствии мы от него отказались.


    Полигон


    Итак, с роботом более-менее понятно, теперь полигон. Решено было разместить полигон недалеко от лаборатории. Уже было понятно, что придется частенько бегать к нему во время проведения соревнований, а это лучше делать сидя в комфортных условиях рабочего места, да и текущую работу никто не отменял! Как раз рядом оказался очередной рояль в кустах пустующий светлый холл. В холл влезло 15 ячеек и у полигона появились стенки, что-бы робот не убежал за пределы, а то лови его потом! Над холлом по диагонали натянули трос, посередине которого разместили разъем для подключения кабеля от робота. И по тросу пустили кабель до блока питания.

    Помимо камер на роботе, очевидно, нужны еще камеры на полигоне. Придумано, сделано… Заказали IP камеры: одну под потолок над полигоном и две по диагонали. Все камеры с POE, поэтому еще приобрели РОЕ коммутатор, который впоследствии стал коммутатором всей системы, все оборудование бюджетное Hikvision. Благо, что поставщики работали и все было в наличии. Камеры разместили на местах, проложили ethernet-кабели от камер до места установки коммутатора.



    Инфраструктура


    Настало время прорубать окно в Европу Интернет. В качестве «окна» в интернет. IT отдел выделил нам виртуальный сервер с двумя сетевыми интерфейсами. Один сморит в мир Интернет, второй во внутреннюю сеть лаборатории, на внешнем интерфейсе фиксированный IP адрес и тестовое доменное имя. На сервер накатили ОС Ubuntu 18.04.

    Итого: робот на полигоне, сервер в серверной, камеры вокруг, все в проводах, но… еще не организована связь с роботом и упущен один важный момент: полигон стоит в холле, вокруг люди ходят, работа кипит, обязательно будут зрители и им непонятно что происходит, нужен «генеральский интерфейс», по простому телевизор (панель), на который будут выводиться трансляции с камер, а так как трансляции кто-то должен выводить, то нужен компьютер под этот телевизор и этот же компьютер может и быть wi-fi точкой доступа для робота, два в одном! Тут в кусты закинули очередной рояль: cо старого проекта лежал непригодившийся промышленный компьютер с wi-fi и HDMI. Под комп и коммутатор были напечатаны крепления на 3D принтере и все оборудование размещено на стойке под телевизором.



    На комп установили ОС Ubuntu 18.04 и собрали утилиту create_ap. С помощью этой утилиты создается точка доступа и мост (brige) между проводным ethernet интерфейсом и wi-fi, причем в одну строчку из командной строки и без бубна! Весчь!!! Роботу прописали в конфигах подключаться к этой точке доступа. Параллельно к месту установки стойки с телевизором, компьютером, коммутатором и полигоном наш отдел АХО протянул ethernet кабель, а IT-отдел соединил все это хозяйство с сетью лаборатории в одну подсеть. Итого: все IP-камеры, робот и компьютер через коммутатор подключены к внутренней сети лаборатории, к которой также подключен сервер смотрящий в Интернет. Все пингуется, пакеты летают, картинки с IP-камер транслируются в VLC, все удаленно по SSH подключается, везде Ubuntu Raspbian Linux и все управляется с рабочего места из лаборатории… ну красота же! Но чего-то не хватает… ах, да, телеуправление, видео через интернет и соревнований.
    Ну обо всем по порядку.

    Управление роботом


    Телеуправление было решено делать на базе протокола UDP, так как система должна работать в реальном масштабе времени и у нас в лаборатории имелись некоторые наработки по этой тематике. В двух словах: программа управления на компьютере участника ловит нажатия клавиш и посылает 10 раз в секунду на робота UDP пакет. В пакете закодированы порядковый номер пакета, значения скоростей на двигатели, положение сервомоторов, уникальный ключ и контрольная сумма, для контроля целостности данных. В свою очередь, на роботе запускается программа, которая открывает UDP порт и принимает пакеты, проверяет контрольную сумму, сверяет ключ и, если все хорошо, задает скорости на моторы и выставляет положения сервоприводов. Программы были написаны на Python. Управление только с клавиатуры, так как она точно есть у всех участников. UDP порт, на котором робот будет принимать пакеты и уникальный ключ генерятся программой случайным образом — это такая защита от несанкционированного подключения. На сервере с помощью iptables был настроен проброс пакетов, т.е. UDP пакет пришедший на внешний IP адрес сервера, автоматом пересылался на робота. Программу управления, написанную на Python с помощью PyInstaller преобразовали в исполняемый файл под OC Windows. И все это протестировали на школьнике, сидящем дома в изоляции в соседнем доме. Робот ожил, покатался по лабе, подъехал к блоку питания и застрелился выключил сам себя, нажав схватом на кнопку выключения! Стало понятно, что система-то живет!



    Видеотрансляция


    На момент начала этой эпопеи, мы плотно работали с gstreamer, то есть, могли слать видео точка-точка, а вот как реализовывать видео трансляции точка-много браузеров, понятия не было никакого. Ну, как говорится, Google Yandex в помощь.

    На просторах гитхаба обнаружили проект v4l2rtspserver, который без проблем собрался на Raspberry Pi и при запуске из командной строки создал RTSP сервер, подключившись к которому из VLC, мы увидели картинку с курсовой камеры робота! Настроив проброс пакетов на сервере, удалось увидеть картинку с робота и на компьютере коллеги, находящегося далеко за пределами Санкт-Петербурга. Но при подключениях одновременно с разных компьютеров начинала расти загрузка ЦП Raspberry Pi и стало понятно, что при реальных нагрузках в десятки человек Raspberry Pi не выдержит, да и IP-камеры позволяют отдавать не более 6 потоков. Продолжаем гуглить в Яндексе… И внезапно, нахожу статью на Хабре Встраиваем WebRTC плеер для живых трансляций с вебкамер и IP камер Так вот же оно!!!

    image

    Все уже придумано! Захожу на сайт flashphoner.com. То что нужно, бинго! К сожалению, продукт платный, но наверняка же есть и другие. Снова гуглеж, который меня выводит на проект webrtc-streamer. Ссылка показалась подозрительно знакомой… ну, конечно, это же еще один проект того же автора, что и v4l2rtspserver, он был всего в паре кликов! Качаю, собираю проект на сервере, в конфигурационном json файле прописываю ссылки на RTSP стримы с камер, запускаю из командной строки и получаю веб-сервер с готовой страницей с трансляциями со всех камер. Отправляю все данные школьнику тестировщику, запускаю робота… тестер подключается, катается по лаборатории и вроде все отлично! Но спустя какое то время школьник сообщает, что трансляции начали лагать. Захожу в терминал на сервере, набираю top и вижу 200% загрузку CPU и утечку памяти — это был провальный провал. Написал автору webrtc-streamer, ответ свелся к:
    I am sorry if I not really answer to this question that was debated many times.
    Опенсорс, который мы заслужили! После были попытки собрать и установить другие решения, но все тщетно, только терял время.

    Итак возвращаюсь к WebCallServer от компании Flashphoner.

    Скачал, установил, получил и активировал Trial лицензию на месяц, все прошло без проблем. Скачал и установил веб-сервер apache. Коллега по разработке написал пробную версию страницы с трансляцией с камер, все заработало, задержки в видео были на приемлемом уровне. Бубен, конечно, местами был нужен, но, в целом, работает! Документация у WebCallServer — мое почтение, на форуме техподдержка оперативно отвечает на вопросы. К этому времени IT-отдел организовал доменное имя agro-online.rtc.ru и на него получили SSL сертификат от LetsEncrypt. Всю систему перевели на HTTPS и допилили страницу с трансляцией и «генеральским интерфейсом». Система трансляций заработала, загрузка сервера не выходила за разумные пределы. Перед соревнованиями оплатили лицензию WebCallServer на 2 месяца и её активировали. В целом решением на базе WCS остался доволен. Что в результате видит участник:



    Тесты, грабли и продакшн


    Робот постепенно из состояния «чучело валенка» начал обретать финальный вид, распечатанные на 3D принтере детали занимали свои места.



    Начались полноценные тестовые заезды уже из регионов, которые выявили недоработки в конфигурации полигона, что было оперативно поправлено. От кабеля питания на роботе отказались — очень сильно затруднял движение, наматывался на колеса и 5 Ампер блока питания не хватало при пиковых нагрузках, Raspberry Pi банально улетал в перезагрузку. Робота перевели на Li-Po АКБ с емкостью 6 Ампер*час, хватает на полдня активной работы и добавили индикатор заряда батареи. С трансляцией оказалось не все гладко: трансляция с камер на роботе при активной езде периодически падает, помогает перезагрузка страницы, правда, не сразу. И вылезла бага со схватом: он периодически непроизвольно разжимался. Времени искать причины уже не было, надо было начинать соревнования. Поэтому было объявлено, что это не баг, а фича и описано в инструкции к роботу, юридически мы чисты. Под конец дня иногда падал Wi-Fi на компьютере, но это уже было после заездов и на ход соревнований не влияло никак.

    Пришли камеры из Китая, но доставка Aliexpress перепутала наклейки на пакеты и мне пришел пакет адресованный гражданке из Нидерландов, а там… скажем так — это не совсем те камеры, что я заказывал. Смешно получилось. Выручили ребята из соседнего отдела, за что им спасибо!

    Организация соревнований


    Оставалось дело за малым… все организовать! Была разработана документация соревнований: регламент, инструкция для робота, памятка по балльной системе и протокол заезда. Вместе с ПО управления роботом, документацию выложили на сайте для свободного скачивания участниками. Технически мы могли пропустить 4 5 6 человек в день, по часу на участника. В этот час проходит 3 заезда по 15 минут: первый — ознакомительный, второй и третий идут в зачет с фиксацией в протоколе. Время начала заездов 10:00, 11:00, 12:00, переыв, 14:00, 15:00, 16:00, время московское. В мессенжере WhatsApp были созданы региональные группы с именами АгроБелгород, АгроНовосибирск и т.д. По мере создания групп составлялся график заездов регионов по дням: один регион в день. Региональные представители в своих группах формировали списки участников с расписанием по времени заездов. Ко дню заездов региона мы в группе видели список участников со временем старта, а дальше — дело техники и организованности участников.

    Проведение


    День сурка существует! С утра поставить на робота свежую АКБ, включить комп и телевизор, на компе открыть страницу с «генеральским интерфейсом», на рабочем месте зайти в терминал, запустить точку доступа на компе, дождаться подключения робота к ней. На роботе, также через терминал, запустить трансляции с камер. Убедиться, что есть картинка. Привести полигон в порядок: разложить тюки и бидон по своим местам, зарядить в робота картофан, расставить коров. Параллельно в региональной группе поинтересоваться, о готовности участников и все ли понимают, что тут вообще происходит.

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



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

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



    Что так и не заработало или заработало, но как то не так


    • Как уже упоминал ранее — это кабель для питания робота, свисающий с потолка. От него отказались на этапе тестирования и робота переделали на Li-Po аккумулятор. Решение изначально было ошибочным.
    • Не удалось получить звук с микрофона камеры в браузере. WebCallServer не понимал поток со звуком идущий от v4l2rtspserver… видео без звука — работает, а вот то же самое видео, но со звуком — увы нет.
    • И имеются серьезные нарекания к стабильной работе v4l2rtspserver — победить падения трансляций не удалось. Они конечно со временем восстанавливались, но к этому моменту оператор робота имел стертый палец от нажатий на клавишу F5, из-за тщетных попыток реанимировать трансляцию курсовой камеры.

    По всей видимости от v4l2rtspserver будем отказываться и искать другое решение. Кто сказал ffmpeg!?

    Ну и классика жанра… за месяц соревнований все моторы на роботе были поменяны минимум по разу. Жгли их участники не щадя наших нервов!



    Итог


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

    1. IP-камеры HikVision — 3шт
    2. POE коммутатор HikVision — 1шт
    3. USB OEM камера на робота ELP — 2шт
    4. Стенки на полигон -16шт
    5. Трос и крепеж — 1шт
    6. Лицензия на WebCallServer на 2 месяца — 1шт

    Все остальные материалы имелись в наличии. Пластиковые детали для робота изготавливались на 3D принтере, существующее железо нещадно правилось напильником. На все ушло 3 месяца было задействовано 3 человека, двое из них студенты. Два месяца на разработку и месяц на проведение. Разработкой железа и софта занимались 2 человека, причем один удаленно и в лаборатории не появлялся. Проведение соревнований 2 человека: один техническое сопровождение и один судейство. Все в условиях изоляции, масок и прочих связанных с этим ограничений. Также хочу отметить, что были задействованы IT-отдел, хозяйственный отдел и информационно аналитический отдел, с их стороны все вопросы решались четко и вовремя.

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

    В общей сложности в соревнованиях приняли участие 110 школьников из 19 городов от Санкт-Петербурга до Уссурийска. Можно сказать, что охватили всю Россию.



    Получен бесценный опыт и опробован новый формат соревнований. У нас все получилось!!!

    Много фото робота в процессе заездов























    Используемое в данном проекте ПО


    WebCallServer WebRTC сервер от компании flashphoner, платная лицензия
    create_ap Удобное создание точки доступа и сетевого моста
    v4l2rtspserver RTSP сервер
    webrtc-streamer WebRTC сервер, работает, но крайне нестабильно при нагрузках. В проекте не задействован.

    Комментарии 14

      0
      AFS — платформа-конструктор разработки роботов на МК и использованием идеи механических конструкторов из СССР.
        +1

        Круто. Вынужденные обстоятельства двигают прогресс.

          +1
          Да, появился новый формат. Уже готовимся к новым соревнованиям!
          0

          Расскажите побольше об участниках. Это школьники, которые посещают какие-то платные кружки? Или конкурсантов готовят на базе станций юных техников и в обычных школах?

            0
            Про школьников и как их набирали, не знаю, мое в этом проекте техническая часть и проведение. Возможно тут найдете информацию АгроНТИ 2020. Я работал по готовым спискам, которые предоставлялись кураторами от агроВУЗов.
              0
              Мы собирались участвовать в Кубке РТК. Но его отменили из-за Covid. Все зарегистрировавшимся пришло уведомление, что можно поучаствовать в таком формате соревнований. Двое ребят из моего кружка 6го класса приняли участие (https://www.facebook.com/groups/roboclub42).

              Впечатление положительные. Но не уверен что восторженные. Жаловались на большую задержку того что было видно на камерах.

              Я думаю, что мероприятие пошло им в плюс. По крайней мере будут понимание, что у роботов теле-присутствия есть определенные ограничения. И работа оператора робота теле-присутсвия и создание такой системы, с передачей видеопотока на большие расстояния, это совсем не то, что они видят в фантастических фильмах.
              0
              Интересно, спасибо. А какие навыки приобретают школьники? Я понял, что здесь они выступают только операторами телеуправления. Когда робот в физической доступности — могут быть мастерами по сборке, ремонту, замене навесного оборудования. Или еще что то есть? Есть возможность что-то программировать?
                0
                Я тут больше вижу нулевой этап — это вовлечение в робототехнику, через подобные мероприятия. Тут вы правы школьники приобретают навыки оператора через игровой процесс. Основная масса ребят не из больших городов.
                На очном этапе робота нужно правильно и хорошо собрать и т.к. он Arduino совместимый, то есть возможность поковыряться с прошивкой. Но в целом это тоже конкурс больше операторов нежели робототехников, робот после сборки готов к прохождению полигона. И варианты с ремонтом возникают, на фото есть отвалившееся колесо, причем вместе с осью, что требует замены мотора.
                0
                занимаетесь хорошим делом, успехов!
                0
                Перечитал два раза, но так и не понял в чем практическая польза таких занятий. В том, что 110 школьников могли поиграть в машинки? Сколько стоило это мерприятие?
                  0
                  На время карантина придумали этот формат, другой в этих условиях невозможен. Робот такой же как и на очных соревнованиях, ребята потренировались им управлять. Ключевое — это вовлечение в робототехнику, через игровой процесс. Дальше соревнования в сентябре уже со сборкой роботов, а дальше может кто и свяжет свое обучение и профессию будущую с этим направлением.
                  В том, что 110 школьников могли поиграть в машинки?
                  Восторга участников, благодарностей от родителей и руководителей было много, так что польза есть!
                  Сколько стоило это мерприятие?
                  По сравнению с очными соревнованиями, практически ничего.
                    0
                    Так, а какая практическая польза от очного управления машинками? И почему вы называете их роботами? Разве они действуют автоматически?
                      0
                      Так, а какая практическая польза от очного управления машинками?
                      Вовлечение детей в робототехнику, через игровой и соревновательный процесс.
                      И почему вы называете их роботами?
                      Формально, вы, конечно, правы — это РУ машинка. Но можно написать скетч для Ардуино с автоматическими действиями по программе, код то открытый.

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

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