Расскажите о вашем роботе. Какие функции он выполняет?
Это микро-ТНПА — телеуправляемый необитаемый подводный аппарат. Его основная цель — обследование труб на кораблях.
Сначала робота подводят к трубе и запускают внутрь неё при помощи манипулятора. Далее он проводит осмотр и при помощи установленной камеры выводит увиденное на экран ноутбука. А там уже программа в автоматизированном режиме определяет повреждения и степень коррозии судна.
Такой робот будет полезен не только компаниям, занимающимся перевозками по воде, но и коммунальным предприятиям — ведь им тоже нужно отслеживать состояние труб.
Вау! А как он устроен? За счёт чего может работать под водой?
Герметичность корпуса обеспечивают уплотнительные кольца — важно не только правильно их поставить, но и контролировать их чистоту. А стержни по бокам сжимают корпус и плотно прижимают эти кольца к конструкции.
Определение поломок в трубе происходит за счёт компьютерного зрения. Организаторы предоставили табличку с фигурами — их нужно было распознать и сгруппировать, чтобы на компьютере отображались не только сами повреждения, но и их тип и общее найденное количество.
Арсений: Распознавание объектов и их визуализация работают с помощью библиотеки OpenCV. Для распознавания дыр я использовал модель YOLO11. Я подготовил набор данных примерно из 100 фотографий, разметил, где на них находятся дыры, потом поставил нейросеть на обучение — и спустя 5 минут получилась модель, которую я применял на олимпиаде.

Управление роботом осуществляется при помощи микроконтроллеров внутри пульта и самого аппарата. И там и там установлены плата Arduino Nano и микросхема MAX232. Последняя преобразовывает сигнал с пульта управления из одного интерфейса связи в другой, чтобы обеспечить передачу информации на большие расстояния.
Сигнал передаётся так: микроконтроллер внутри пульта считывает нажатие кнопки и выдаёт соответствующий сигнал в формате UART. Далее он преобразовывается через микросхему в формат RS-232. В самом роботе сигнал преобразовывается обратно в UART и только потом считывается микроконтроллером для выполнения каких-либо действий.

Как пришла идея создания робота?
Это было конкретное ТЗ на олимпиаде. Легенда миссии такая: одна компания хочет внедрить подводных роботов для диагностики состояния судна, так как эта задача может быть слишком опасной для водолазов.
Было также дано полное описание задач и результата: как это должно быть сделано, что должно происходить при нажатии тех или иных кнопок, какие схемы и чертежи нужно сдать в качестве документации. В общем, полноценное техническое задание, как в реальной жизни.
Можно ли было добавить что-то от себя?
Можно, но чуть-чуть. Например, задача конструктора полностью уникальна: нет описания, как должен выглядеть робот. Были даны ограничения только по размеру, чтобы робот мог пролезать в трубу. А как он будет перемещаться и где в нём будут закреплены детали — это полностью решает конструктор.
Даниил: Я, как программист микроконтроллера, от себя добавил дополнительные кнопки ускорения и замедления — с ними можно проще и быстрее пройти трубу. Если робот застрял там, где не нужно, можно нажать ускорение, а где-то, наоборот, стоит замедлиться, чтобы лучше что-то распознать.
К тому же при запуске робота на соревновании учитывается время попытки. Если баллы у двух команд за выполнение миссии и документацию одинаковые, смотрят на этот показатель.
А можно ли как-то ещё усовершенствовать робота
В первую очередь можно добавить оси перемещения. Сейчас робот может двигаться только вперёд и назад — а хотелось бы, чтобы ещё и влево-вправо и вверх-вниз. Если в трубе будет разветвление, то сейчас аппарат не справится. Нужно научить его поворачивать.
Это можно реализовать, добавив сервопривод — он будет поворачивать мотор и вместе с ним самого робота. Или можно добавить маленький моторчик, например сзади или спереди аппарата, чтобы тот его полностью поворачивал. Сейчас у робота только один мотор — для движения вперёд-назад, а другой мог бы поворачивать устройство вокруг оси.
Как проходил процесс разработки?
В нём участвовала команда из четырёх человек. Общее задание на олимпиаде состояло из четырёх частей — соответственно, на одного участника приходилась одна из задач.
Программист компьютерного зрения (Арсений) отвечал за распознавание повреждений и работу камеры, конструктор — за сборку корпуса робота и соответствующие чертежи. Электронщик занимался пайкой электроники и документацией электронно-принципиальной схемы, а программист МК (Даниил) — написанием кода для микроконтроллеров внутри робота.
Какие навыки и знания пригодились при создании робота? Что в этом плане дал Яндекс Лицей?
Сборка электроники требует знания C++ и систем Arduino. Конструктору нужно уметь не только строить 3D-модели и создавать чертежи в системах автоматизированного проектирования, но и пользоваться болгаркой, напильником и другими инструментами.
Также каждый участник олимпиады вне зависимости от роли в команде должен пройти индивидуальный тур по информатике — для этого необходимо знать алгоритмическое программирование и уметь писать код.
Программистам компьютерного зрения очень пригодится знание Python — этот язык программирования детально изучают весь первый год в Яндекс Лицее.
Даниил: Первый год в Лицее вообще самый важный. Он создаёт определённый майндсет, даёт глубокие, фундаментальные знания и понимание, как строить алгоритмы и программы. Этого уже достаточно, чтобы начать участвовать в олимпиадах или выполнять инженерные задачи.
В первый год лицеисты получают всю необходимую теорию. А на втором году, когда переходят к изучению более прикладных вещей — различных библиотек, Flask, HTML, CSS, SQL, — приходится уже самостоятельно искать информацию и разбираться в документации. Это и есть главный навык: не только для инженерных олимпиад, но и вообще в жизни.
А чем увлекаетесь помимо подводной робототехники?
После этой олимпиады мы принимали участие в Национальной технологической олимпиаде (НТО) по большим данным и машинному обучению — её организовывали Яндекс, VK и ИТМО. А в начале апреля собираемся на олимпиаду по летающей робототехнике.
Даниил: Мне интересно и программирование на Python, и разработка устройств, и нейросети. В этом году, например, я участвовал в конкурсе «Большие вызовы» на треке «Большие данные и финансовые технологии». На первом этапе нужно было разработать и защитить проект — у меня это приложение с нейросетью, которая по запросу генерировала обучающие курсы, а затем проводила по ним тестирования.
Победители отборочного тура попадают на смену в образовательный центр «Сириус». Там мы с командой исследовали применимость мультимодальных моделей для предсказания цен активов на российском фондовом рынке. Мы делали нейросеть, которая на основе разных типов данных — картинок, новостей, временных рядов — предсказывала, как акция будет двигаться дальше.
Арсений: Я тоже принимал участие в «Больших вызовах» — ездил на смену три раза, всегда по направлению «Освоение Арктики и Мирового океана». Все мои проекты были тесно связаны с подводными роботами. Последний заключался в использовании целого роя подводных аппаратов для обследования морского дна и поиска месторождений природного газа и нефти в Арктике. Мне нужно было учесть экстремальные условия — течения, очень низкую температуру и так далее.
Круто! Какие дальнейшие планы?
Арсений: Мне интересно более низкоуровневое программирование, приближенное к «сырому железу» (bare machine), — системное ПО, операционные системы, программирование микроконтроллеров и роботов. Поэтому хочу поступить в ИТМО на Software Engineering.
Даниил: Я тоже думаю поступать в ИТМО, но на направления, связанные с машинным обучением и большими данными. А вообще хочу попасть на стажировку в Яндекс и потом там работать. Это для меня самая перспективная компания.
На олимпиадах я занимаюсь платами и схемами, но в будущем хочу сделать упор именно на машинное обучение. Хотя эти сферы можно и совместить. Например, в роверах Яндекса есть и искусственный интеллект, и много внутренней электроники. Мои знания могли бы помочь мне сделать так, чтобы всё это работало вместе.