[DIY или Сделай сам, Разработка робототехники, Робототехника] Как организовать и провести детские роботехнические соревнования для всей страны в условиях карантина
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Хабр, приветствую! Мы занимаемся организацией и проведением детских робототехнических соревнований в рамках АгроНТИ 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 весь рабочий день. Менять АКБ каждые полчаса очень не хотелось, было решено запитать робота по проводам, а провод в свою очередь свесить с потолка по центру полигона, завести его в штангу курсовой камеры и как-то подтягивать.
Ну такое
SPL
Забегая вперед скажу, что решение было не очень… И впоследствии мы от него отказались.
Полигон
Итак, с роботом более-менее понятно, теперь полигон. Решено было разместить полигон недалеко от лаборатории. Уже было понятно, что придется частенько бегать к нему во время проведения соревнований, а это лучше делать сидя в комфортных условиях рабочего места, да и текущую работу никто не отменял! Как раз рядом оказался очередной рояль в кустах пустующий светлый холл. В холл влезло 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 камер Так вот же оно!!!
Все уже придумано! Захожу на сайт 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!?
Ну и классика жанра… за месяц соревнований все моторы на роботе были поменяны минимум по разу. Жгли их участники не щадя наших нервов!
Итог
Из оборудования и материалов были закуплены:
- IP-камеры HikVision — 3шт
- POE коммутатор HikVision — 1шт
- USB OEM камера на робота ELP — 2шт
- Стенки на полигон -16шт
- Трос и крепеж — 1шт
- Лицензия на WebCallServer на 2 месяца — 1шт
Все остальные материалы имелись в наличии. Пластиковые детали для робота изготавливались на 3D принтере, существующее железо нещадно правилось напильником. На все ушло 3 месяца было задействовано 3 человека, двое из них студенты. Два месяца на разработку и месяц на проведение. Разработкой железа и софта занимались 2 человека, причем один удаленно и в лаборатории не появлялся. Проведение соревнований 2 человека: один техническое сопровождение и один судейство. Все в условиях изоляции, масок и прочих связанных с этим ограничений. Также хочу отметить, что были задействованы IT-отдел, хозяйственный отдел и информационно аналитический отдел, с их стороны все вопросы решались четко и вовремя.
В основном региональные представители и участники проявили высокую организованность, если участник по каким-либо причинам не мог стартовать, то представитель от региона оперативно разыскивали нового участника и у нас практически не получалось простоев, все время заездов было использовано.
В общей сложности в соревнованиях приняли участие 110 школьников из 19 городов от Санкт-Петербурга до Уссурийска. Можно сказать, что охватили всю Россию.
Получен бесценный опыт и опробован новый формат соревнований. У нас все получилось!!!
Много фото робота в процессе заездов
SPL
Используемое в данном проекте ПО
WebCallServer WebRTC сервер от компании Flashphoner, платная лицензия
create_ap Удобное создание точки доступа и сетевого моста
v4l2rtspserver RTSP сервер
webrtc-streamer WebRTC сервер, работает, но крайне нестабильно при нагрузках. В проекте не задействован.
===========
Источник:
habr.com
===========
Похожие новости:
- [DIY или Сделай сам, Интернет вещей, Компьютерное железо, Разработка на Raspberry Pi, Разработка под Linux] Встраиваемый компьютер AntexGate. От прототипа к серийному производству
- [DIY или Сделай сам, Производство и разработка электроники, Разработка для интернета вещей, Разработка под Arduino, Схемотехника] Собираем недорогой 9.7" E-Ink дисплей для отображения чего угодно
- [Разработка под Arduino, Разработка робототехники] ILUШA vs Dynamixel. Выбор сервопривода с обратной связью
- [Робототехника, Управление персоналом, Управление сообществом] Роботы-начальники: семь примеров, как люди и бизнесы переходят под власть машин
- [Автомобильные гаджеты, Компьютерное железо, DIY или Сделай сам, Дизайн, Разработка под Arduino] STONE LCD Screen for Car Dashboard with RTL8762CJF MCU
- [DIY или Сделай сам, Дизайн, Мониторы и ТВ, Производство и разработка электроники, Разработка под Android] STM32 development board tutorial:use STONE STVC101WT-01 to control STM32
- [Разработка робототехники, Робототехника] Исследователи научили четвероногого робота балансировать
- [DIY или Сделай сам, Natural Language Processing, Будущее здесь, Голосовые интерфейсы, Информационная безопасность] Голосовой помощник для совершения операций на бирже
- [DIY или Сделай сам, Компьютерное железо, Разработка на Raspberry Pi] Любитель подключил PCIe к Raspberry Pi без контроллера USB
- [DIY или Сделай сам, Разработка под Arduino] SonarTermen v2.0
Теги для поиска: #_diy_ili_sdelaj_sam (DIY или Сделай сам), #_razrabotka_robototehniki (Разработка робототехники), #_robototehnika (Робототехника), #_sorevnovanija_robotov (соревнования роботов), #_detskaja_robototehnika (детская робототехника), #_diy_ili_sdelaj_sam (
DIY или Сделай сам
), #_razrabotka_robototehniki (
Разработка робототехники
), #_robototehnika (
Робототехника
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:22
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Хабр, приветствую! Мы занимаемся организацией и проведением детских робототехнических соревнований в рамках АгроНТИ 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 весь рабочий день. Менять АКБ каждые полчаса очень не хотелось, было решено запитать робота по проводам, а провод в свою очередь свесить с потолка по центру полигона, завести его в штангу курсовой камеры и как-то подтягивать. Ну такоеSPLЗабегая вперед скажу, что решение было не очень… И впоследствии мы от него отказались.
Полигон Итак, с роботом более-менее понятно, теперь полигон. Решено было разместить полигон недалеко от лаборатории. Уже было понятно, что придется частенько бегать к нему во время проведения соревнований, а это лучше делать сидя в комфортных условиях рабочего места, да и текущую работу никто не отменял! Как раз рядом оказался очередной рояль в кустах пустующий светлый холл. В холл влезло 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 камер Так вот же оно!!! Все уже придумано! Захожу на сайт 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. Общие результаты заездов выкладываются судьей в гугл таблицу. И так каждый заезд и каждый день, пока не пройдут все участники всех регионов. На фото судья за работой Что так и не заработало или заработало, но как то не так
По всей видимости от v4l2rtspserver будем отказываться и искать другое решение. Кто сказал ffmpeg!? Ну и классика жанра… за месяц соревнований все моторы на роботе были поменяны минимум по разу. Жгли их участники не щадя наших нервов! Итог Из оборудования и материалов были закуплены:
Все остальные материалы имелись в наличии. Пластиковые детали для робота изготавливались на 3D принтере, существующее железо нещадно правилось напильником. На все ушло 3 месяца было задействовано 3 человека, двое из них студенты. Два месяца на разработку и месяц на проведение. Разработкой железа и софта занимались 2 человека, причем один удаленно и в лаборатории не появлялся. Проведение соревнований 2 человека: один техническое сопровождение и один судейство. Все в условиях изоляции, масок и прочих связанных с этим ограничений. Также хочу отметить, что были задействованы IT-отдел, хозяйственный отдел и информационно аналитический отдел, с их стороны все вопросы решались четко и вовремя. В основном региональные представители и участники проявили высокую организованность, если участник по каким-либо причинам не мог стартовать, то представитель от региона оперативно разыскивали нового участника и у нас практически не получалось простоев, все время заездов было использовано. В общей сложности в соревнованиях приняли участие 110 школьников из 19 городов от Санкт-Петербурга до Уссурийска. Можно сказать, что охватили всю Россию. Получен бесценный опыт и опробован новый формат соревнований. У нас все получилось!!! Много фото робота в процессе заездовSPLИспользуемое в данном проекте ПО WebCallServer WebRTC сервер от компании Flashphoner, платная лицензия create_ap Удобное создание точки доступа и сетевого моста v4l2rtspserver RTSP сервер webrtc-streamer WebRTC сервер, работает, но крайне нестабильно при нагрузках. В проекте не задействован. =========== Источник: habr.com =========== Похожие новости:
DIY или Сделай сам ), #_razrabotka_robototehniki ( Разработка робототехники ), #_robototehnika ( Робототехника ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:22
Часовой пояс: UTC + 5