Команда Университета ИТМО, помимо обширного участия в проектах, связанных с нанотехнологиями, работала с учащимися школ над несколькими робототехническими проектами. Наша группа состояла из 19 учеников и 3 преподавателей. Заранее мы определили основные технологии и особенности конструкции, которые будут реализованы в ходе проекта. Некоторые проекты ориентированы на автоматизацию определенных процессов, а какие-то имеют больше творческую визуальную составляющую. В качестве основы для создания роботов было решено использовать робототехнический конструктор ТРИК. Здесь уже публиковались примеры использования этого конструктора.
С самого начала мы постарались разбить учащихся на группы по навыкам программирования и конструирования. Для организации работы мы воспользовались системой управления проектами Trello. Так как на работу над проектами отводилось две с половиной недели, остальное уходило на развлекательные и организационные мероприятия, и задач было ограниченное количество, Trello нас вполне устроил. Каждые три дня мы собирались с ребятами и определяли задачи на новый спринт. Нельзя сказать, что это было сделано по всем канонам разработки в серьезных компаниях, но нам удалось познакомить ребят с основами проектного менеджмента. Далее перейдем непосредственно к проектам.
Первый проект связан с взаимодействием человека и робота «human-robot interaction», как с точки зрения дизайна приятной внешности робота, так и с точки зрения общения с человеком и удержания внимания. Сначала ребята разобрались с использованием технологии распознавания речи. Для этого использовался Yandex SpeechKit, который позволяет через http запрос получать в ответ варианты распознанного текста, в порядке убывания вероятности верного распознавания. На самом контроллере ТРИК стоит unix система, и разработчики предусмотрели в системе возможность преобразования текста в речь. Для этого в системе установлен синтезатор речи eSpeak, который озвучивает желаемый текст.
Основная программа была реализована на Qt Script в системе TRIK Studio, поддерживаемой разработчиками конструктора, а часть с передачей аудио файла на сервера Yandex реализуется через bash script. Соответственно, необходимо передать информацию из рабочего пространства linux в область памяти программы на Qt Script, это было сделано через дополнительный файл. В целом, робот может записывать вашу речь, отправлять файл на распознавание и произносить фразы, которые прописаны в общей базе запросов и ответов, или выполнять определенные действия.
Далее стояла задача запрограммировать движения робота. Робот поворачивает глаза в сторону собеседника, привлекая его внимание. По голосовой команде робот может хватать предметы при помощи манипулятора. У робота на борту два контроллера: первый управляет движением колес, снимает информацию с микрофонов и датчиков; второй передает видеоизображение с камеры, управляет манипулятором и движением глаз, зажигает светодиодную ленту во время произнесения текста. Возникает множество задач синхронизации работы программ на разных контроллерах, при этом все части проекта связаны друг с другом через TCP/IP. Например, на одном блоке произношение текста должно сопровождаться анимацией рта, а на другом должна включаться светодиодная лента.
Техническое зрение робота вынесено на отдельный компьютер, где для этого используется OpenCV. Сначала происходит бинаризация изображения, дальше определяется градиент, удаляются вложенные контуры, происходит отбор объектов по геометрическим размерам и площади. Это позволяет определить положение предметов на столе, направить к ним робота и схватить их манипулятором. Все описанные задачи решаются на различных устройствах, ребята в полный рост столкнулись с сетевым взаимодействием и успешно справились с этой задачей. Презентацию проекта можно посмотреть по ссылке.
Второй проект представляет из себя робота, стирающего с доски. В данном проекте у нас имеется маркерная доска и двухколесный робот, который может по ней перемещаться. Первый робот подъезжает и становится напротив доски. На нем расположена камера, изображение с которой транслируется через ТРИК на компьютер, где происходит обработка изображения и определение местоположения робота и его цели. На роботе расположены оранжевая и желтая метки для определения местоположения робота. Сначала мы выделяем все желтые и оранжевые пиксели на изображении, после чего определяем наибольшие сплошные области данных цветов и находим их центры, по которым можно определить координаты и угол поворота робота. Далее находим Лапласиан изображения и оставляем только красные и выделенные красным области, которые необходимо очистить. Пробегая еще раз по всему изображению, находим ближайшую от робота точку, которая становится целью.
На стирающего с доски робота отправляются только дистанция и угол между курсом робота и направлением на цель. Из этих значений вычисляются управляющие воздействия для двигателей, и робот двигается к цели.
К этому проекту также относится робот полотер. Он при получении сообщения от первого робота выезжает вперед на заданное расстояние и двигается по заданной области, вращая под собой чистящий элемент. При окончании времени робот начинает поворачиваться вокруг своей оси и искать оранжевую метку. После нахождения, начинает двигаться в направлении метки, пока она не займет значительную область на изображении с камеры. В этом случае обработка изображения выполняется полностью на роботе, он только получает команду на старт. Презентацию проекта можно посмотреть по ссылке, и ещё видео работы.
Третий проект относится к автоматизации парковочного пространства. Цель была в создании прототипа автоматизированной общественной парковки у бизнес-центра. Были собраны два полноприводных автомобиля, сооружено здание и сами парковочные места с метками (черными кругами). Парковочная система состояла из контроллера, подсоединенных к нему веб-камеры и шлагбаума.
На контроллере имеется DSP-ядро предназначенное для обработки аудио и видео на борту, но так как участники проекта не имели опыта программирования контроллеров, решено было просто транслировать видео, а обработку состояния на парковке производить на компьютере.
Для определения свободных парковочных мест производилась бинаризация изображения выделение контуров и отбрасывание лишних элементов по радиусу окружности. Последним этапом была кластеризация с нумерацией.
В итоге рабочая система выглядела следующим образом:
автомобиль подъезжает к шлагбауму, посылает запрос на сервер, тот, в свою очередь, возвращает номер ближайшего свободного места, а также сообщает парковочной системе, что необходимо поднять шлагбаум. Далее автомобиль, имея номер парковочного места, движется по записанной траектории. Презентацию проекта можно посмотреть по ссылке.
Все исходные коды программ выложены на github.
В общем, все получилось достаточно хорошо. Учащиеся все время просили задержаться и провести больше времени в работе над проектом, что говорит об интересе учащихся к робототехнике.
Все проекты смены разделились на инженерные, где работа велась над реализацией определенной конструкции, и исследовательские, где собирались и анализировались данные о различных явлениях. На мой взгляд при заключительной оценке стоит разделить такие направления, сложно сравнивать анализ состояния реки Мзымты и «Умный стол». Для исследований больше подходит презентационный и постерный формат, а для проектов лучше выставочный формат со стендами.
Желающим принять участие в подобных сменах, стоит озадачиться предварительным скурпулезным изучением области, в которой они хотят принять участие. Для этого есть огромнейшее количество курсов видеолекций и прочего сопроводительного материала. Учитесь пользоваться различными системами проектного менеджмента (можно начать с той, которую использовали мы) и системами контроля версий.
Огромное спасибо всем участникам этой смены, её организаторам и педагогам. Надеюсь ещё не раз оказаться здесь!