Когда на первых же часах хакатона отчислилась одна команда, мы приуныли. Но в итоге все оказалось не так плохо.
Меня зовут Артём. Сегодня я расскажу про наш кейс на национальном студенческом хакатоне Цифровой суверенитет 3.0. Подробнее про него можно почитать на сайте https://цифровой-суверенитет.рф.
В общей сложности на хакатон, который проходил на территории РТУ МИРЭА, зарегистрировалось и прошло отбор 270 человек.
Это студенты следующих учебных заведений.
Найдёте здесь свою альма-матер?
-
РТУ МИРЭА;
-
МФТИ;
-
МИЭТ;
-
РУДН;
-
НИТУ МИСИС;
-
МГТУ им. Баумана;
-
НИУ ВШЭ;
-
Финансовый университет при правительстве РФ;
-
Первый МГМУ имени И.М. Сеченова;
-
Московский Международный Университет;
-
РАНХиГС;
-
Московский Политехнический Университет;
-
НИУ ИТМО;
-
МГИМО;
-
Российский университет транспорта (МИИТ);
-
Московский государственный университет геодезии и картографии;
-
Центральный университет ЛГПУ им. Семёнова-Тян-Шанского;
-
Липецкий Государственный Технический Университет;
-
Московский финансово-промышленный университет «Синергия»;
-
Российский Государственный Социальный Университет;
-
Кубанский государственный университет;
-
Самарский национальный исследовательский университет имени академика С.П. Королёва;
-
Тверской государственный университет;
-
Российский биотехнологический университет;
-
Московский университет им. С.Ю. Витте;
-
Санкт-Петербург государственный университет аэрокосмического приборостроения;
-
Московский Международный Университет;
-
МТУСИ;
-
Белорусский Национальный Технический Университет;
-
КГБ ПОУ Хабаровский техникум транспортных технологий им. Героя Советского Союза А. С. Панова;
-
Шебекинский агротехнический ремесленный техникум;
-
СПб ГБПОУ Колледж «Красносельский»;
-
Автономная некоммерческая организация высшего образования «Центральный университет» Колледж Университета «Сириус»;
-
ОГБПОУ «ТОМСКИЙ ТЕХНИКУМ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ»;
-
Колледж информационных и креативных технологий IThub Ставрополь;
-
Колледж Телекоммуникаций Мтуси;
-
Колледж связи 54;
-
ГБОУ школа №1329;
-
МБОУ СОШ №25.
На кейс от компании Аквариус записались 11 команд. Он звучал следующим образом:
Визуальная среда разработки для микроконтроллеров «Рудирон»
Разработать программное обеспечение для визуального программирования контроллера «Рудирон». Критерии:
-
Целевая аудитория — дети 5–8 лет.
-
Основной функцией должно быть создание программ посредством использования блочного программирования (использование отдельных блоков, каждый из которых отвечает за выполнение своей функции).
-
Под разработкой так же подразумевается модификация/доработка готовых решений блочного программирования для работы с контроллером «Рудирон».
К защите принимаются завершенные проекты. Вне зависимости от количества функций, наибольший приоритет получит самое стабильное рабочее решение.
Курировал и оценивал работы студентов Юрий Денисов, руководитель отдела разработки робототехники компании.
В рамках кейса для выполнения задания участникам были предоставлены контроллеры «Рудирон».
Краткое описание и характеристики
РОССИЙСКИЙ ОБРАЗОВАТЕЛЬНЫЙ ПРОГРАММНО-АППАРАТНЫЙ КОМПЛЕКС Рудирон
-
32-разрядный 80 МГц, 128 кБ Flash, 32 кБ ОЗУ;
-
ШИМ — 9 каналов, АЦП — 6 каналов, ЦАП — 1 канал, Компаратор;
-
Интерфейсы — CAN, UART, RS485;
-
Количество цифровых портов — 37;
-
Питание 5 В USB, 6–18 В Jack 2.5;
-
Прямое подключение — MPU6050, NRF2401, ESP8286, BMP-180;
-
Программирование в Arduino IDE, Visual Studio Code;
Построен на базе отечественного 32-разрядного микроконтроллера К1986ВЕ92 с тактовой частотой 80 МГц.
-
ПЗУ 128 кБ — ОЗУ — 32 кБ;
-
Количество портов с ШИМ — до 9. Количество каналов АЦП
-
Внутрисхемная отладка – используется разъем на плате для подключения J-Link программатора и пошаговой отладки с просмотром содержимого микроконтроллера.
Контроллер входит в ЕРРРП. Регистрация ГИСП https://gisp.gov.ru/goods/#/product/4582015
Более подробное описание есть на сайте https://рудирон.рф.
Комментарии к заданию
Уже на старте мы предложили студентам выбрать один из двух путей решения задачи:
-
Написать программу, которая преобразует блоки в листинг кода и загружает его на контроллер.
-
Используя протокол Firmata, наладить обмен данными между контроллером и компьютером, обеспечив взаимодействие в реальном времени.
Каждый подход имеет свои тонкости.
В первом варианте командам предстояло разработать систему конвертации функциональных блоков в строки кода, а также разобраться в нюансах формирования файла программы и загрузки его на контроллер. К счастью для команд, вся документация находится в открытом доступе.
Второй вариант грозил участником адаптацией протокола Firmata под «Рудирон», а также последующей настройкой взаимодействия среды блочного программирования и контроллера.
Для обоих подходов были выставлены требования по работоспособности:
Программа минимум
-
Чтениезапись цифрового сигнала
-
Чтениезапись аналогового сигнала
-
Наличие отдельных блоков для работы с встроенными светодиодамикнопками будет оценено дополнительными баллами
-
Задержка (delay)
С учетом целевой аудитории программы (см. ТЗ кейса), функционал программы минимум перекрыл бы 70% потребностей. С ним можно мигать светодиодом, вращать двигателем, обрабатывать нажатие кнопок и даже взаимодействовать с датчиками! Если добавить вращение сервоприводом, то с таким набором юный инженер сможет хоть ракеты в космос запускать!
Но мы хотим работать красиво и желаем того же нашим детям. Поэтому в рамках задания составили список дополнительных модулей:
Дополнительные модули
-
Цикл (из-за ограничений по времени мы разрешили реализовать хотя бы один из двух типов циклов: for или while)
-
Условный оператор
-
Создание и работа с переменной
-
Обмен данными по серийному порту
С таким набором вводных мы направили команды работать над решением.
Красота и работоспособность
Комментируя задание, мы просили участников проработать красоту решения.
Не прошло и 10 минут, как на экспертов компании Аквариус посыпались вопросы по кейсу. «А насколько красиво?» стал самым популярным. Предупреждая один из бичей студенческих хакатонов «Дизайн ради дизайна», мы заняли четкую позицию: «Красота = работоспособность; для нас на первом месте стоит результат». Мы надеялись, что такая установка позволит участникам больше погрузиться в работу с контроллером.
По результатам первого дня команды разделились на две глобальные группы: создание своего приложения с нуля и доработка готового решения (да, такое было разрешено) в пропорции 60/40.
В первой группе основным языком программирования стал Python, в частности, инструмент PyQt. Некоторые команды выбрали Rust для написания своего приложения. Особо выделился проект разработки расширения для VS Code с подключением блочного программирования, не выходя из редактора кода.
Во второй группе большинство команд выбрали использование протокола Firmata и доработку программы Snap4Arduino.
Второй день прошел без особых событий. Участники писали код, ели пиццу и заливались энергетиками, как и полагается молодым специалистам.
Прежде чем переходить к описанию самих решений, нужно заметить, что наша ставка сыграла! Данная в начале хакатона установка «Красота = работоспособность» помогла участникам сэкономить время на разработку дизайна и погрузиться в работу с контроллером и программой. Почти все команды, дошедшие до финала, смогли реализовать минимальный набор функций. Хотя иногда мы замечали, как фронтендеры из числа участников скучают и хрустят печеньками, запивая их чаем.
Работоспособные решения
Самое интересное – проверка работ участников - случилось на третий день.
Несмотря на то, что удачные решения повторялись у большинства команд, многие из них предложили уникальный подход.
Команда, занявшая 6 место, взяла за основу сервис blokly. Он позволил вообще не тратить силы на создание блоков. Основным языком разработки они выбрали JavaScript.
По результатам оценки эксперты вынесли такой вердикт: разработанное приложение имеет все модули, упомянутые в техническом задании. Программа создает листинг кода на основе использованных блоков. Но при этом команда не смогла показать работоспособность каждого блока, из-за чего не получила максимальный балл. Решение хорошо адаптировано под целевую аудиторию и им удобно пользоваться, но его масштабируемость оставляет желать лучшего.
Команда, занявшая 5 место, решила писать приложение и создавать блоки самостоятельно. В их варианте за каждым блоком был закреплён json файл. Из этих файлов по итогу выполнения программы собирался листинг кода на языке С++.
Особенностью их решения стала ДВУХЭТАПНАЯ обработка json файла. На первом этапе программа из функциональных блоков переводилась в json в человекочитаемом формате, а на втором еще раз преобразовывалась в состояние, подходящее для обработки машиной. Не смотря на наличие большинства требуемых блоков, критические баги и чрезмерная усложненность алгоритма формирования программы позволили команде занять только 5 место.
4 место заняла команда, которая при других условиях оценки заслуживала бы разделить 3 место со своим оппонентом. Участники этой команды взяли за основу программу Snap4Arduino и занялись написанием модуля, который позволил бы контроллеру «Рудирон» общаться с ней с помощью протокола Firmata. Основной загвоздкой для ребят стало описание контроллера. Одна из его особенностей – два аппаратных UART. Из-за этого им пришлось поломать голову.
3 место. Тройку финалистов открыла команда, создавшая расширения для VS Code. Интересной особенностью стало то, что программу для загрузки в контроллер создавали не только блочные структуры. Управляющие команды (зажечь светодиод, подать напряжение на выход, считать значение с кнопки и т.д.) мог посылать человек.
Дополнительные баллы ребята заработали тем, что сделали как десктопную, так и Web версию программы. Мелкие ошибки и баги не дали получить максимальное количество балов за практическую часть, однако набранные очки все же вывели их на третье место.
2 место. Одно из двух призовых мест заняла команда, притащившая на соревнования для программистов осциллограф. Свое решение они сделали с использованием фреймворка Electron. За три дня, отведенных на выполнение задания, ребята реализовали функционал, описанный в ТЗ, а также блоки для работы со встроенными кнопками и светодиодами. Дополнительных блоков не было, на чем ребята потеряли несколько баллов.
Весьма запоминающимся стал процесс проверки: для тестирования работы аналоговых выводов участники принесли осциллограф – он использовался для формирования синусоиды. А основным препятствием стал дизайн. Ребята попали в парадоксальную ситуацию: если бы они уделили больше времени адаптации дизайна под целевую аудиторию, они бы не заработали столько баллов, сколько получили за техническую часть. Но именно баллов за продуманность дизайна им и не хватило для победы.
Переходя к первому месту, хотелось бы в подробностях рассказать об использованных технологиях, однако решение оказалось до банальности простым. Победители объединили все самое лучшее и смогли минимизировать проблемы. В качестве основы они использовали Snap4Arduino, быстро разработали программу для взаимодействия контроллера с компьютером по протоколу Firmata, а также получили дополнительные баллы за реализацию работы встроенных светодиодов и кнопок с помощью отдельных блоков. Что самое важное, они тестировали свою программу достаточно, чтобы она выполнялась без ошибок во время проверки.
После оценки работ экспертами состоялось награждение, на котором победитель и призер кейса от ООО «ПК Аквариус», кроме модных бомберов и великолепных книг по квантовым вычислениям, получили еще и приглашение на стажировку в отдел разработки робототехники.
Аквариус | Больше чем старт!
Автор: RedIngener