Русский
Русский
English
Статистика
Реклама

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

Хабр, приветствую! Мы занимаемся организацией и проведением детских робототехнических соревнований в рамках АгроНТИ 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 сервер, работает, но крайне нестабильно при нагрузках. В проекте не задействован.
Источник: habr.com
К списку статей
Опубликовано: 08.07.2020 18:05:40
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Diy или сделай сам

Разработка робототехники

Робототехника

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

Детская робототехника

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru