Робо-голова
  • Общая информация
  • Технические характеристики
  • Комплект поставки
  • Полезные ссылки
  • Быстрый старт
  • Настройка и обслуживание
    • Подключение к Робоголове по сети
      • Настройка подключения к Сети
      • Подключение по SSH к Робоголове
      • Подключение по SFTP
      • Подключение через VSCode
    • Смена данных устройства
    • Выключение головы
    • Возврат к заводским настройкам
    • Ubuntu-сервис
    • Подключение аккумулятора
    • Зарядка батареи
    • Подключение сервоприводов к плате расширения
  • Интеграция с роботом TurtleBro
  • Устройство головы
    • Аппаратная конфигурация
    • Программное обеспечение
    • ROS-пакеты
      • robohead_controller
      • display_driver
      • neck_driver
      • ears_driver
      • speakers_driver
      • respeaker_driver
      • voice_recognizer_pocketsphinx
        • ROS-нода ~kws_recognizer
        • ROS-нода ~cmds_recognizer
        • Настройка собственных команд и ключевых слов для распознавания
      • sensor_driver
      • usb_cam
  • Кейсы взаимодействия
    • 1. Смена ресурс-пака стандартных действий
    • 2. Внесение изменений в стандартные действия
    • 3. Написание своего действия для robohead_controller
    • 4. Создание своих сценариев взаимодействия без использования robohead_controller
    • 5. Создание ROS-пакета со своим сценарием взаимодействия и его автозагрузка
Powered by GitBook
On this page
  • I. Добавление голосовой команды во множество распознаваемых команд
  • II. Создание скрипта действий
  • III. Модификация пакета head_controller
  1. Кейсы взаимодействия

3. Написание своего действия для robohead_controller

Previous2. Внесение изменений в стандартные действияNext4. Создание своих сценариев взаимодействия без использования robohead_controller

Last updated 1 month ago

Кроме изменения стандартных действий можно добавлять свои! Для этого нужно проделать 3 шага:

  1. Добавление голосовой команды во множество распознаваемых команд

  2. Создание скрипта действий

  3. Редактирование конфиг-файла пакета robohead_controller

Рассмотрим пример создания действия, по которому голова будет улыбаться. Эдакая, собака-улыбака:


I. Добавление голосовой команды во множество распознаваемых команд

  1. Файл формальных грамматик ~robohead_ws/src/robohead/robohead_controller/config/voice_recognizer_pocketsphinx/gram.txt содержит:

#JSGF V1.0;

grammar robohead_cmds;

public <commands> = <command> ;

<command> = <command_1> | <command_2> | <command_3> | <command_4>;

<command_1> = покажи ( уши | левое ухо | правое ухо ) ;
<command_2> = поздоровайся ;
<command_3> = сделай фото ;
<command_4> = следи за шариком ;

Добавим поле <command_5> = улыбнись ; и включим это поле в <command>, получится:

#JSGF V1.0;

grammar robohead_cmds;

public <commands> = <command> ;

<command> = <command_1> | <command_2> | <command_3> | <command_4> | <command_5> ;

<command_1> = покажи ( уши | левое ухо | правое ухо ) ;
<command_2> = поздоровайся ;
<command_3> = сделай фото ;
<command_4> = следи за шариком ;
<command_5> = улыбнись ;
  1. Добавим новое слово "улыбнись" в файл-словарь ~robohead_ws/src/robohead/robohead_controller/config/voice_recognizer_pocketsphinx/dictionary.txt и получим:

    слушайробот
    покажи
    уши
    ухо
    левое
    правое
    поздоровайся
    сделай
    фото
    следи
    за
    шариком
    улыбнись
  2. Сконвертируем файл-словарь в фонетический словарь

 ~/robohead_ws/src/ru4sphinx/text2dict/dict2transcript.pl ~/robohead_ws/src/robohead/robohead_controller/config/voice_recognizer_pocketsphinx/dictionary.txt ~/robohead_ws/src/robohead/robohead_controller/config/voice_recognizer_pocketsphinx/dictionary.dict
  1. Получим файл dictionary.dict:

за z aa
левое ll je v ay i
поздоровайся p ay z d a r oo v ay j ss i
покажи p ay k a zh yy
правое p r aa v ay i
сделай z dd je l ay j
следи s ll i dd ii
слушайробот s l uu sh ay j r ay b ay t
улыбнись u l y b nn ii ss
ухо uu h ay
уши uu sh y
фото f oo t ay
шариком sh aa rr i k ay m
  1. Подправим команды под особенности произношения:

за z aa
шариком sh aa rr i k ay m
шариком(2) sh aa rr i k oo m
следи s ll i dd ii
следи(2) s ll je dd ii
левое ll je v ay i
левое(2) ll je v oo je
поздоровайся p ay z d a r oo v ay j ss i
поздоровайся(2) p oo z d a r oo v ay j ss ya
покажи p ay k a zh yy
покажи(2) p oo k a zh yy
правое p r aa v ay i
правое(2) p r aa v oo je
слушайробот s l uu sh ay j r oo b ay t
сделай z dd je l ay j
ухо uu h ay
ухо(2) uu h oo
уши uu sh y
фото f oo t ay
фото(2) f oo t oo
улыбнись u l y b nn ii ss

II. Создание скрипта действий

  1. Перейдите в директорию ~/robohead_ws/src/robohead/robohead_controller/scripts/robohead_controller_actions и создайте директорию для своего действия:

cd ~/robohead_ws/src/robohead/robohead_controller/scripts/robohead_controller_actions
mkdir smile
cd smile
  1. Внутри этой директории создадим файл скрипта action.py и добавим медиа-файлы smile.png и smile.mp3 (через SFTP или VScode)

touch action.py
  1. В action.py скопируйте шаблон действия:

from robohead_controller_actions.main import *

def run(robohead_controller:RoboheadController, cmds:str): # Обязательно наличие этой функции, именно она вызывается при голосовой команде
    script_path = os.path.dirname(os.path.abspath(__file__)) + '/'
    
    msg = PlayMediaRequest()
    msg.is_blocking = 0
    msg.is_cycled = 0
    msg.path_to_file = script_path + 'smile.png'
    robohead_controller.display_driver_srv_PlayMedia(msg)

    msg = NeckSetAngleRequest()
    msg.horizontal_angle = min(max(robohead_controller.respeaker_driver_doa_angle, -30),30)
    msg.vertical_angle = 30
    msg.duration = 1
    msg.is_blocking = 0
    robohead_controller.neck_driver_srv_NeckSetAngle(msg)

    msg = EarsSetAngleRequest()
    msg.left_ear_angle = -90
    msg.right_ear_angle = 90
    robohead_controller.ears_driver_srv_EarsSetAngle(msg)

    msg = PlayAudioRequest()
    msg.path_to_file = script_path + 'smile.mp3'
    msg.is_blocking = 1
    msg.is_cycled = 0
    robohead_controller.speakers_driver_srv_PlayAudio(msg)
  1. Опишем, что должно происходить по команде "Слушай, Робот! Улыбнись!": - на экран выводится изображение smile.png - включается воспроизведение аудио smile.mp3 - уши поворачиваются в разные стороны - за счет шейного сустава голова приподнимается и смотрит в сторону, откуда пришёл звук


III. Модификация пакета head_controller

Добавьте новое действие в головной модуль robohead_controller. Для этого перейдите в ~/robohead_ws/src/robohead/robohead_controller/config и отредактируйте файл robohead_controller.yaml, добавив новое действие в словарь сопоставления голосовой команды и скрипта:

low_voltage_threshold: 3.0
low_voltage_hysteresis: 0.2

camera_topic_name: "~usb_cam/image_raw"

robohead_controller_actions_match: { # сопоставление голововой команды из voice_recognizer_pocketsphinx/gram.txt и файла, запускаемого на исполнение
  "wait_action" : "robohead_controller_actions.std_wait.action",
  "low_bat_action" : "robohead_controller_actions.std_low_bat.action",
  "слушайробот" : "robohead_controller_actions.std_attention.action",
  "покажи левое ухо": "robohead_controller_actions.std_left_ear.action",
  "покажи правое ухо": "robohead_controller_actions.std_right_ear.action",
  "покажи уши" : "robohead_controller_actions.std_ears.action",
  "сделай фото": "robohead_controller_actions.std_make_photo.action",
  "поздоровайся": "robohead_controller_actions.std_greeting.action",
  "следи за шариком": "robohead_controller_actions.std_ball_tracker.action",
  "улыбнись": "robohead_controller_actions.smile.action",
}

И, наконец, перезагрузите сервис, чтобы применить внесенные изменения

sudo systemctl restart robohead.service

Иногда бывает удобно видеть вывод отладочной информации в терминале. Для этого robohead_controller со всеми необходимыми зависимостями можно запустить вручную:

# Остановить сервис
sudo systemctl stop robohead.service 

# Запустить robohead_controller с зависимостями
roslaunch robohead_controller robohead_controller_py.launch

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

voice_recognizer_pocketsphinx
14KB
smile.mp3
Аудио-файл, воспроизводимый через динамики
1MB
smile.png
image
Картинка, выводимая на экран
(: