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, чтобы робот поворачивал ее в сторону лестницы, когда говорит фразу.

Похожие статьи:
Начни карьеру в IT с Python. Python мощный и быстрый. Отлично комбинируется с другими средствами разработки. Легкий в изучении. И это только...
Представники ІТ-індустрії домовились знайти компромісне рішення з Національним банком України щодо валютних процедур. Це відбулося...
Після років інтенсивного суперництва дві найбільші лабораторії з дослідження штучного інтелекту — DeepMind і Google Brain, які входять...
When you mentioned Safari, most people have the imagination of a jungle filled with all kind of wildlife as they see in wildlife documentaries- a jungle where the BIG 5 reign supreme. Well, that’s what you get from a Tanzania safari....
Wedding silk sarees will never out of style from Indian wedding and it’s again returned to the design pattern. Amid going to of many wedding we have seen that numerous ladies’ wore silk Kanchipuram wedding silk saree. After...
Яндекс.Метрика