Добавим новое слово "улыбнись" в файл-словарь ~robohead_ws/src/robohead/robohead_controller/config/voice_recognizer_pocketsphinx/dictionary.txt и получим:
слушайробот
покажи
уши
ухо
левое
правое
поздоровайся
сделай
фото
следи
за
шариком
улыбнись
за 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
Подправим команды под особенности произношения:
за 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. Создание скрипта действий
Перейдите в директорию ~/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
Внутри этой директории создадим файл скрипта action.py и добавим медиа-файлы smile.png и smile.mp3 (через SFTP или VScode)
touch action.py
В 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)
Опишем, что должно происходить по команде "Слушай, Робот! Улыбнись!":
- на экран выводится изображение 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!
Наша задача - заставить речевой движок распознавать команду "Слушай, Робот! Улыбнись!"