Голосовое управление квадрокоптером ArDrone 2.0 через ROS.Часть 2


Продолжение. Начало — Часть1

Cоздадим в ROS новый проект vp_ardrone1

cd ros_pkgs
roscreate-pkg vp_ardrone1 std_msgs rospy

Устанавливаем систему зависимостей

rosdep install vp_ardrone1

Строим проект

rosmake vp

Для преобразования речи в текст будем использовать julius. Julius — движок распознавания речи. Julius был первоначально разработан японским LVCSR в 1997 году, был продолжен CSRC (Continuous Speech Recognition Consortium — Консорциум непрерывного распознавания речи) с 2000 по 2003 год, и в настоящее время разработывается ISTC (Interactive Speech Technology Consortium — Консорциум интерактивных речевых технологий).

Julius требует предварительно обученных грамматической и акустической моделей. На данный момент julius использует внешний движок генерации акустической модели (обучения) HTK, разрабатываемый под руководством Microsoft в Кэмбридже. Акустическая модель строится путем обработки звуковых файлов (с начитанными человеком фрагментами текстов) специальными программами (например, из пакета HTK). Наиболее правильно самому наговорить эти фрагменты и, таким образом, научить движок распознавать именно твой голос (в том числе, интонацию и ошибки произношения) и словосочетания, которые нужны именно тебе. Тогда процент правильного распознавания будет стремиться к значению 100. Однако все это сложно, требует определенной подготовки и времени, поэтому ограничимся акустической моделью, распространяемой с сайта www.voxforge.org. Приемлемая акустическая модель есть для английского языка, для русского пока нет.
Как альтернативу я пробовал и еще пытаюсь пробовать распознование Ardron-ом русской речи с помощью Google Speech API, здесь несколько минусов:
— требуется подключение к интернету
— процент распознования (хотя при использовании Google Search API с планшете распознование гораздо лучше)
— задержка с получением ответа 3-5 сек

Julius есть в репозиториях многих дистрибутивов. В Ubuntu для установки Julius достаточно выполнить команду:

$ sudo aptitude install julius

Для подключения акустической модели foxforge (английский язык) устанавливаем пакет julius-voxforge

$ sudo aptitude install julius-voxforge

Теперь можно приступить к настройке, которая фактически включает в себя только процесс создания словаря: списка слов, который должен уметь распознавать движок, и объяснение того, как эти слова могут между собой сопоставляться. Нужно это для двух целей: во-первых, движок должен знать произношение слов и понимать их, а во-вторых, сократив словарь всего до нескольких фраз, мы значительно повысим качество распознавания. Возьмем стандартные словари, распространяемые вместе с пакетом julius-voxforge

$ cp /usr/share/doc/julius-voxforge/examples/* ~/ros_pkgs/vp_ardrone1/nodes
$ cd ~/ros_pkgs/vp_ardrone1/nodes
$ gunzip * 2>&1 | grep -v ignored

Файл sample.voca содержит совсем небольшой список слова также их фонетическое представление (что-то вроде транскрипции), файл sample.grammar содержит правила, в каких комбинациях эти слова могут быть использованы.

Сначала определимся со списком слов для голосовых команд управления ArDrone.

1. Выбор объекта, к которому обращены команды (предполагается в связке использовать ArDrone 2.0 и Turtlebot на основе iRobot Create)

«Drone» — квадрокоптер ArDrone 2.0;

«Robert» — робот Turtlebot.

2. Команды приветствия

«Hi»,»Buy»,»Thanks»,»Sleep»

3. Команды выбора действия

«On»,»Off»,»forward»,»back»,»left»,»right»,»up»,»down»,»turn»(поворот),
«hang»(зависнуть),»dance»(предопределенная полетная анимация)

4. Команды параметры выбора действия

«one»-«nine» (1-9) — скорость движения (или номер полетной анимации)
«slow»,»fast» — быстрее, медленнее для скорости

Изменим содержимое файла sample.voca следующим образом

% NS_B
sil

% NS_E
sil

% NAME
DRONE d r ow n
ROBERT r ow b er t

% HELLO

HI hh ay
BUY b ay
THANKS th ae ng k s
SLEEP s l iy p

% DO

ON ao n
OFF ao f

FORWARD f ao r w aa r d
BACK b eh k
LEFT l eh f t
RIGHT r ay t
TURN t er n
UP ah p
DOWN d aw n
HANG hh ae ng
DANCE d aa n s

% DIGIT

ONE w ah n
TWO t uw
THREE th r iy
FOUR f ao r
FIVE f ay v
SIX s ih k s
SEVEN s eh v ax n
EIGHT ey t
NINE n ay n

% SPEED

FAST f aa s t
SLOW s l ow

Фонетическое представление берем из файла beep-1.0 (файл можно будет получить из репозитория проекта (ссылка будет позже)).

Изменим файл sample.grammar (содержит правила, в каких комбинациях эти слова могут быть использованы) следующим образом

S : NS_B FRAZA NS_E

FRAZA: NAME HELLO
FRAZA: NAME DO
FRAZA: NAME DO DIGIT
FRAZA: NAME DO SPEED
FRAZA: HELLO
FRAZA: DO
FRAZA: DIGIT
FRAZA: SPEED
S : NS_B FRAZA NS_E означает, что движок должен понимать словосочетания, которые состоят из: тишина (NS_B), FRAZA , тишина (NS_E). FRAZA — возможные наборы слов. Содержимое файла таково, что можно отдавать не только полные команды

Drone forward five, drone back slow, drone dance slow

но и укороченные (реализуем далее пр помощи сохранения в переменных ROS текущего робота, текущего действия, текущего значения действия), например

forward seven, nine, slow

Выполняем команду для генерации файлов sample.dfa sample.term и sample.dict:

$ mkdfa sample

Тестим julius с помощью команды:

$ padsp julius -quiet -input mic -C julian.jconf

Здесь возникает проблема скрипт зависает и ничего не распознает


которую пока решить смог только открытием окна Системные -> Параметры системы -> Звук при работе скрипта

И результат работы системы распознавания (см. sentence1)

Далее — создание скриптов для ROS — Часть 3


0 комментариев на «“Голосовое управление квадрокоптером ArDrone 2.0 через ROS.Часть 2”»

    • я создавал небольшой словарь — работает хорошо
      но есть момент — необходимо иметь хорошее произношение, пришлось над этим поработать, хотя до сих пор такие слова как turn (повернуть) очень редко могу произнести правильно (у моих знакомых получается хорошо). И еще команды из нескольких слов — drone back three — необходимо произносить слитно без пауз — но если поработать — получается отлично. В общем, нужно хорошее произношение… Я пробовал в этом проекте и google speech api — там намного хуже.
      Хотелось бы конечно подключить голосовой модуль для русского языка — может позже попробую, сразу с наскока не удалось подключить…

  1. При запуске вылетает:

    Error: voca_load_htkdict: line 1: word 0 has no phoneme:
    > 0 [sil]
    Error: voca_load_htkdict: line 2: word 1 has no phoneme:
    > 1 [sil]
    Error: init_voca: error in reading sample.dict: 2 words failed out of 28 words
    ERROR: failed to read dictionary «sample.dict»
    ERROR: m_fusion: some error occured in reading grammars
    ERROR: Error in loading model

    пробовал добавлять пробилы после sil, не помогло

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение