DOU Labs: как в Plarium научили говорить 800-килограммового робота

В рубрике DOU Labs мы приглашаем IT-компании делиться опытом собственных интересных разработок и внутренних технологических инициатив. Вопросы и заявки на участие присылайте на  Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. .

Гостей нашего офиса встречает 3-метровый робот из металла — точная копия стратегического юнита Молот из игры «Правила войны». Собирали его профессиональные кузнецы, о чем написана отдельная статья. Я же расскажу, как мы научили его говорить.

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

260 фраз на трех языках подготовила команда копирайтеров и локализаторов. На английском Молота озвучил актер Эзра Найт, на русском и украинском — Дмитрий Петров, актер театра им. Шевченко и «Березиль» в Харькове. Затем голоса роботизировали с помощью программы Ableton.



После непродолжительного обсуждения мы решили, что Молот должен случайным образом произносить одну из заранее подготовленных фраз, когда кто-то проходит мимо по лестнице. Чтобы он не мешал сотрудникам, мы задали временные промежутки работы — с 9:00 до 10:00 утром и с 18:30 до 20:00 вечером.

Хотя в Молоте уже был микроконтроллер Arduino, который отвечал за повороты головы, там не хватало дополнительной периферии, и мы нашли другое решение. Выбрали миникомпьютер Raspberry Pi. Во-первых, там уже есть Wi-Fi и аудиовыход, во-вторых, к нему можно подключить нужные датчики. Для детектирования проходящих людей отлично подошел ультразвуковой датчик расстояния HC-SR04.

Схема подключения стандартная:

Для датчика изготовили подходящий кожух и закрепили его на стволе пушки жидкими гвоздями. Подключение сделали черной витой парой. Raspberry Pi расположен под металлической крышкой в основании робота. Были опасения, что крышка будет экранировать сигнал Wi-Fi, но они не подтвердились — соединение с сетью стабильное. Еще на этапе сборки в основание робота установили два динамика и усилитель, что в какой-то мере упростило нашу задачу.





Сначала мы хотели, чтобы за файлы, которые нужно выливать на сервер, отвечали админы. Но решили возложить управление роботом на офис-менеджеров, так как они находятся непосредственно рядом с ним. Для удобства управления мы настроили web-сервер, позволяющий обновлять голосовые файлы и изменять расписание работы Молота.

Чтобы ускорить разработку UI, нашли готовый шаблон, который включает нужные компоненты. В нем уже подключена библиотека Bootstrap и реализована базовая архитектура, что позволило не тратить время на рутинные задачи. Сам веб-сайт — это так называемое одностраничное приложение, клиентская часть которого выполнена с использованием библиотеки AngularJS. Серверная часть представляет собой Web API с набором методов и реализована с использованием микрофреймворка Flask. Взаимодействие между клиентом и сервером происходит в формате JSON.

Управление расписанием работы датчиков осуществляется через специальное окно, где есть возможность выбрать датчик и задать ему время включения/отключения. При необходимости можно отключить все датчики, сняв флажок Enabled.

После нажатия на кнопку Save конфигурация отправляется на сервер. Структура отправляемых данных:

Для реализации выгрузки файлов на сервер был использован проект angular-file-upload с последующей доработкой.

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

После нажатия на кнопку Save плейлист сохраняется на сервере.
Пример структуры данных, отправляемых на сервер:

Специально была добавлена страница с кратким руководством.

Все настройки хранятся в текстовых файлах и включают в себя расписание (когда роботу можно разговаривать) и список файлов для воспроизведения (на английском, украинском и русском языках). Серверная часть реализована на Python. В основе реализации Web API лежит библиотека Flask, так как она содержит удобные аннотации для описания URL-адресов и HTTP-методов.

Серверная часть выполняет 3 задачи:

  1. REST API.
    Взаимодействие с web-интерфейсом (отправка/получение настроек сервера, загрузка файлов).
  2. Работа с датчиком расстояния.
    Работа с датчиком расстояния выполняется с помощью Python-модуля для Raspberry Pi — RPi.GPIO. Опрос датчика выполняется в бесконечном цикле с интервалом, который задан в настройках сервера. Для корректной работы Web API цикл опроса датчика запускается в отдельном потоке сразу после запуска Flask.
  3. Воспроизведение голосовых файлов.
    Из-за сжатых сроков разработки для воспроизведения аудио на Python была выбрана библиотека Pygame, поскольку опыт работы был только с ней. Для небольших аудиофайлов (до 2 MB в формате mp3) эта библиотека отлично подошла, никаких заиканий или задержек при воспроизведении нет. Трек для воспроизведения выбирается случайным образом из загруженных.

Создатели Молота предусмотрели возможность поворота головы и поставили туда сервопривод, поэтому в планах также подключить голову к Raspberry, чтобы робот поворачивал ее в сторону лестницы, когда говорит фразу.

Похожие статьи:
Оператор «МегаФон» объявил о снижении цен на самой популярной линейке тарифов «Всё включено». Изменения затронут все регионы...
Статья написана в соавторстве с Мэри Ротарь, CEO IAMPM. Всем привет, меня зовут Леонид Неугодников. Последние два года руковожу...
Виконавча директорка асоціації IT Ukraine Марія Шевчук в інтерв’ю для Економічної Правди розповіла про виклики, з якими зараз...
Це новий випуск YouTube-рубрики «X питань», де ми розпитуємо представників різних спеціальностей про їхній фах і те,...
П’ята конференція PyCon Ukraine 2016 відбудеться 23-24 квітня на стадіоні Арена Львів. На сьогоднішній день, ми вже можемо...
Яндекс.Метрика