Больше чем Хакатон

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

Привет Хабр. Меня зовут Артём. Сегодня я расскажу про наш кейс на национальном студенческом хакатоне Цифровой суверенитет 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://рудирон.рф.

Распиновка контроллера

Распиновка контроллера «Рудирон»

Комментарии к заданию

Уже на старте мы предложили студентам выбрать один из двух путей решения задачи:

  1. Написать программу, которая преобразует блоки в листинг кода и загружает его на контроллер.

  2. Используя протокол Firmata, наладить обмен данными между контроллером и компьютером, обеспечив взаимодействие в реальном времени.

Каждый подход имеет свои тонкости.

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

Второй вариант грозил участником адаптацией протокола Firmata под «Рудирон», а также последующей настройкой взаимодействия среды блочного программирования и контроллера.

Для обоих подходов были выставлены требования по работоспособности:

Программа минимум

  • Чтение\запись цифрового сигнала

  • Чтение\запись аналогового сигнала

  • Наличие отдельных блоков для работы с встроенными светодиодами\кнопками будет оценено дополнительными баллами

  • Задержка (delay)

С учетом целевой аудитории программы (см. ТЗ кейса), функционал программы минимум перекрыл бы 70% потребностей. С ним можно мигать светодиодом, вращать двигателем, обрабатывать нажатие кнопок и даже взаимодействовать с датчиками! Если добавить вращение сервоприводом, то с таким набором юный инженер сможет хоть ракеты в космос запускать!

Но мы хотим работать красиво и желаем того же нашим детям. Поэтому в рамках задания составили список дополнительных модулей:

Дополнительные модули

  • Цикл (из-за ограничений по времени мы разрешили реализовать хотя бы один из двух типов циклов: for или while)

  • Условный оператор

  • Создание и работа с переменной

  • Обмен данными по серийному порту

С таким набором вводных мы направили команды работать над решением.

Красота и работоспособность

Первое знакомство с контроллером Рудирон

Первое знакомство с контроллером Рудирон

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

Не прошло и 10 минут, как на экспертов компании Аквариус посыпались вопросы по кейсу.  «А насколько красиво?» стал самым популярным. Предупреждая один из бичей студенческих хакатонов «Дизайн ради дизайна», мы заняли четкую позицию: «Красота = работоспособность; для нас на первом месте стоит результат». Мы надеялись, что такая установка позволит участникам больше погрузиться в работу с контроллером.

По результатам первого дня команды разделились на две глобальные группы: создание своего приложения с нуля и доработка готового решения (да, такое было разрешено) в пропорции 60/40.

В первой группе основным языком программирования стал Python, в частности, инструмент PyQt. Некоторые команды выбрали Rust для написания своего приложения. Особо выделился проект разработки расширения для VS Code с подключением блочного программирования, не выходя из редактора кода.

Во второй группе большинство команд выбрали использование протокола Firmata и доработку программы Snap4Arduino.

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

Прежде чем переходить к описанию самих решений, нужно заметить, что наша ставка сыграла! Данная в начале хакатона установка «Красота = работоспособность» помогла участникам сэкономить время на разработку дизайна и погрузиться в работу с контроллером и программой. Почти все команды, дошедшие до финала, смогли реализовать минимальный набор функций. Хотя иногда мы замечали, как фронтендеры из числа участников скучают и хрустят печеньками, запивая их чаем.

Работоспособные решения

e5e0b550bd8bc4d47f10edbc46535787.jpg

Самое интересное — проверка работ участников — случилось на третий день.

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

Команда, занявшая 6 место, взяла за основу сервис blokly. Он позволил вообще не тратить силы на создание блоков. Основным языком разработки они выбрали JavaScript.

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

Команда, занявшая 5 место, решила писать приложение и создавать блоки самостоятельно. В их варианте за каждым блоком был закреплён json файл. Из этих файлов по итогу выполнения программы собирался листинг кода на языке С++.

Особенностью их решения стала ДВУХЭТАПНАЯ обработка json файла. На первом этапе программа из функциональных блоков переводилась в json в человекочитаемом формате, а на втором еще раз преобразовывалась в состояние, подходящее для обработки машиной. Не смотря на наличие большинства требуемых блоков, критические баги и чрезмерная усложненность алгоритма формирования программы позволили команде занять только 5 место.

Первые проблемы

Первые проблемы

4 место заняла команда, которая при других условиях оценки заслуживала бы разделить 3 место со своим оппонентом. Участники этой команды взяли за основу программу Snap4Arduino и занялись написанием модуля, который позволил бы контроллеру «Рудирон» общаться с ней с помощью протокола Firmata. Основной загвоздкой для ребят стало описание контроллера. Одна из его особенностей — два аппаратных UART. Из-за этого им пришлось поломать голову.

3 место. Тройку финалистов открыла команда, создавшая расширения для VS Code. Интересной особенностью стало то, что программу для загрузки в контроллер создавали не только блочные структуры. Управляющие команды (зажечь светодиод, подать напряжение на выход, считать значение с кнопки и т.д.) мог посылать человек.

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

2 место. Одно из двух призовых мест заняла команда, притащившая на соревнования для программистов осциллограф. Свое решение они сделали с использованием фреймворка Electron. За три дня, отведенных на выполнение задания, ребята реализовали функционал, описанный в ТЗ, а также блоки для работы со встроенными кнопками и светодиодами. Дополнительных блоков не было, на чем ребята потеряли несколько баллов.

Весьма запоминающимся стал процесс проверки: для тестирования работы аналоговых выводов участники принесли осциллограф — он использовался для формирования синусоиды. А основным препятствием стал дизайн. Ребята попали в парадоксальную ситуацию: если бы они уделили больше времени адаптации дизайна под целевую аудиторию, они бы не заработали столько баллов, сколько получили за техническую часть. Но именно баллов за продуманность дизайна им и не хватило для победы.

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

Счастливые призеры

Счастливые призеры

Счастливые победители

Счастливые победители

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

Аквариус | Больше чем старт!

© Habrahabr.ru