На одном С++ все не заканчивается — Алексей Лысенко (SouthRoboCrew)
SouthRoboCrew (РЦР ДГТУ) в 2015 году вошел в пятерку лучших робототехнических коллективов страны по версии Всероссийского инженерного конкурса. В 2016 году награжден за создание лучших практик в сфере деятельности практико-ориентированных научно-технических клубов творческого развития студентов и школьников (5-е место из 116 вузов, проходивших отбор).
Сейчас команда SouthRoboCrew ведет работу над Биоехатронным комплексом реабилитации пациентов (грант 180 тыс. руб. на конкурсе Донская сборка и победа на конкурсе Умник-2016, грант 500 тыс. руб.).
SouthRoboCrew или РЦР ДГТУ?
Официальное название нашей организации – Ресурсный центр робототехники ДГТУ, но изначально мы собрались под неофициальным названием SouthRoboCrew, и оно тоже осталось с нами. Сейчас в ходу оба.
Мы работаем как со студентами, так и со школьниками. Изначально мы занимались только со студентами, но поняли, что учащиеся 1-2 курса не обладают достаточным списком компетенций и не могут сразу решать серьезные практические задачи. Мы поняли, что готовить кадры надо раньше, и начали заниматься со школьниками.
О выборе специализации
Занятия в нашем центре идут по трем ключевым направлениям: конструирование, электроника и программирование. Как происходит выбор специализации? Предположим, студент хочет заниматься робототехникой – мы даем задания, тесты, выявляем, к чему у него больше предрасположенность, но так или иначе конструирование, электроника и программирование взаимосвязаны.
Программист в области робототехники не может быть в чистом виде программистом – такие специалисты пишут, скажем, сайты. Чтобы работать с железом, он должен разбираться в электронике. Мы формируем студентов в команды, они начинают взаимодействовать и учиться всему понемногу – а потом какой-то конкретной специализации более углубленно.
На одном С++ все не заканчивается
У нас есть студенты, обучающиеся чисто на программировании. Они приходят и говорят: у меня много навыков, я писал программы, изучал Java, PHP, Python и т. д. Казалось бы, готовый сформированный программист. На деле он не может запрограммировать робота, потому что не знает, как устроен контроллер, как работать с программатором и др. Он может написать код на ноутбуке, но этот код нигде и никак работать не будет.
Самый популярный язык для программирования роботов – C++. Если человек знает этот язык, у него уже есть неплохая база. Но на одном С++ все не заканчивается. В реальных условиях часто используются комбинации из различного софта.
Например, мы делали совместную разработку c московской компанией ICOM Invest и фондом Alcoa. Это телекоммуникационная компания, и она поставила задачу создания мобильного робота, который бы управлялся через протокол 4G. Там не должно было быть конкретного управляющего софта – человек должен зайти в браузер, пройти аутентификацию и получить доступ к интерфейсу управления с любого мобильного устройства. Помимо написания программы для управления мобильным роботом, понадобилось писать верхний уровень – браузерную оболочку связи команд на роботе. При этом использовались и Python, и C++, и Java.
Командная работа и множество правок
Как правило, в команде есть лидер – капитан. Он представляет проект, координирует деятельность остальных. Но без командной работы создать робота нельзя. Не бывает – или это крайне редкие случаи – когда человек одинаково хорошо разбирается и в конструировании, и в электронике, и в проектировании, и в прототипировании, и в программировании.
Допустим, человек хорошо разбирается в конструировании и придумал определенную конструкцию робота. Спроектировал его, показал команде – а специалист по электронике говорит: Такой робот не получится, потому что в эти габариты не зайдет плата управления. Конструкцию начинают переделывать. Программист говорит: Такой алгоритм управления не подойдет, нужно управлять роботом как-то иначе. Опять же переделывается конструкция, возможно, что-то меняется в электронике. Поэтому в любом случае командная работа необходима. Любая победа – заслуга коллектива, а не одного человека.
В коммерческой разработке (на профессиональном уровне) подход тот же: это подход, заложенный в стандарты ИСО. Жизненный цикл высокотехнологичной и наукоемкой продукции это подразумевает: создается прототип продукции, анализируются недостатки, которые проявились в альфа- и бета-версиях и так далее – до лабораторного образца и конечного результата. Не бывает такого, чтобы люди собрались, сделали проект и результат сразу получился идеальным.
Российский рынок робототехники
Если говорить о робототехнике в чистом виде, то ее на российском рынке труда в чистом виде сегодня не существует. Специальности только начинают появляться. Российских разработчиков роботов не так много – это, скорее, компании-агрегаторы, специалисты в области автоматизации производства, и роботы являются какой-то частью процесса автоматизации.
Агентство стратегических инициатив совместно со Сколково проводило исследование, согласно которому к 2020 году появится профессия робототехника в чистом виде. Сейчас эта компетенция только формируется.
Однако, если человек занимался робототехникой, он либо хороший программист, либо хороший конструктор, либо хороший специалист в области электроники. Компетенции, которые он получает, на сегодняшний день однозначно востребованы на рынке труда, и такие люди стопроцентно найдут себе работу.
Например, один из студентов, который у нас обучался как программист, далее нашел себя как конструктор роботов, а потом устроился работать на предприятие, которое сотрудничает с Роскосмосом. Сейчас он делает там системы управления.
Вообще, в области робототехники программирование – самая гибкая отрасль. Программист может работать удаленно, в нескольких компаниях одновременно, быть задействованным в смешанных проектах. Поэтому такие специалисты легко находят себе работу. При условии хорошего знания языка и наличии хорошего портфолио – и за границей.
Про верхний и нижний уровень программирования
Верхний уровень – максимально абстрактный. Нижний требует знания физики процесса или технических познаний того объекта, который программируется. Если есть задача запрограммировать траекторное перемещение манипулятора на производстве, нужно знать, как и что работает: какие приводы стоят на данном манипуляторе, как они работают, какие у них номинальные режимы работы. Программист высокого уровня может не слишком в это вникать: он может знать, какие на предприятии стоят роботы, и далее будет удаленно ими управлять.
На нижнем уровне нужно понимать, как работают механизмы. С точки зрения программирования программируются они, наверное, проще, но нужно углубленное понимание объекта. На верхнем уровне не нужно думать, как именно эти механизмы будут работать, но написать такую систему с точки зрения кодинга будет намного сложнее, потому что она будет иметь более сложную структуру. Обе задачи сложны, но сложны по-разному.
По какой-то странной причине с программистами в робототехнике самая большая беда: их либо меньше всего, либо меньше программистов, которые бы хотели заниматься реальными железками, и больше тех, кто предпочитает заниматься облачными вычислениями, интернет-технологиями и пр. А те, кто называет себя программистами, не всегда справляются с практическими задачами, которые мы ставим, так хорошо, как нам бы хотелось.
Наверное, вся сложность сводится к программированию нижнего уровня. Потому что когда человек поступает в университет на программиста, он представляет себя программистом скорее верхнего уровня или разработчиком веб-сайта или веб-приложения. Возможно, это связано с тем, что этот рынок уже достаточно развит в отличие от рынка робототехники.