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

Похожие статьи:
Компания Dell представила обновления ноутбуков популярных линеек Vostro и Inspiron, которые обладают, со слов производителя, улучшенной...
В Allbionics.ai анонсували, що безкоштовно виготовлятимуть біонічні протези для українців, які отримали поранення під час війни...
Привіт! Я Володимир — Unreal Engine Developer у компанії N-iX. Я та ще кілька моїх колег розробили з нуля Unreal Engine курс для...
Наприкінці січня Агентство США з міжнародного розвитку (USAID) призупинило фінансування багатьох державних...
Oftentimes consumers seek out more affordable rates for their car insurance, home insurance, life insurance, and more. Here are some common questions, “Where is the best place to find better...
Яндекс.Метрика