Построение робота с голосовым управлением на Windows 10 IoT Core на Raspberry Pi 2
История
Ранние вычисления опирались на перфокарты, трекболы и клавиатуры — каждое требовало прямого физического контакта. По мере эволюции технологий беспроводные и сенсорные интерфейсы оптимизировали взаимодействие с пользователем. Сегодня визуальный и голосовой ввод предлагают еще более интуитивные способы управления устройствами.
Это руководство демонстрирует, как использовать встроенное в Windows 10 IoT Core распознавание речи для управления роботом на базе Raspberry Pi 2. К концу у вас будет робот, который движется, поворачивает и управляет детекцией препятствий через голосовые команды.
Новичок в Windows 10 IoT Core? Начните с этого обзора.
Обновлено 30 марта 2016 года
Что такое распознавание речи?
Распознавание речи переводит сказанные слова в текст. Обычно включает два ключевых компонента: обработку сигнала и речевой декодер. Microsoft Speech SDK абстрагирует эти сложности, позволяя разработчикам фокусироваться на логике приложения.
Шаг 1
Начало работы с распознаванием речи
Базовый workflow:
- Создание грамматики распознавания речи (SRGS)
- Инстанцирование
SpeechRecognizerи загрузка грамматики - Подписка на события распознавания и реализация обработчиков
Создание грамматики распознавания речи
Определение кастомной грамматики позволяет приложению понимать конкретные команды, которые вы хотите, чтобы робот принимал. Для этого проекта словарь включает:
- Move Forward (Вперед)
- Move Reverse (Назад)
- Turn Right (Вправо)
- Turn Left (Влево)
- Stop (Стоп)
- Engage Obstacle Detection (Включить детекцию препятствий)
- Disengage Obstacle Detection (Выключить детекцию препятствий)
Грамматика выражается в SRGS XML. Ключевые структурные правила:
- Корневой элемент должен быть
<grammar>. - Должен включать
version,xml:langи SRGS namespace. - Требуется хотя бы один элемент
<rule>. - Каждое правило должно иметь уникальный атрибут
id.
Для детального руководства по SRGS обратитесь к MSDN и W3C документации.
Инициализация Speech Recognizer и загрузка грамматики
SpeechRecognizer находится в пространстве имен Windows.Media.SpeechRecognition. Импортируйте его, затем загрузите ваш SRGS XML файл. Если компиляция не удается, проверьте, что микрофон подключен и распознан IoT Core.
Регистрация на события Speech Recognizer и создание обработчика
После запуска recognizer он генерирует ResultGenerated при успешном парсинге речи. Используйте это событие для извлечения args.Result.Text и маппинга на действия робота. Событие StateChanged информирует, когда recognizer начинает или прекращает прослушивание.
Visual Studio может автогенерировать методы-обработчики клавишей Tab. Альтернативно, регистрируйте обработчики сразу после создания экземпляра SpeechRecognizer.
Шаг 2
Управление роботом на основе распознанной речи
В обработчике ResultGenerated инспектируйте args.Result.Text и выполняйте условную логику для управления моторами робота. Класс MotorDriver (включен в пример) абстрагирует манипуляции GPIO. Полный исходный код приведен в конце статьи.
Шаг 3
Обновление возможностей устройства
Перед деплоем на Raspberry Pi 2 добавьте capability microphone в манифест пакета приложения. Это дает приложению разрешение на доступ к аудиовходу.
Шаг 4
Деплой и регистрация приложения как автозапускаемого
Чтобы робот слушал команды сразу после загрузки, зарегистрируйте приложение как startup application. Сначала задеплойте, затем используйте PowerShell или IoT Core Web-Management Portal.
Хорошая идея — сменить package family name перед деплоем чтобы избежать конфликтов.
После деплоя зарегистрируйте приложение как startup-сервис через Web-Management Portal.
При проблемах с регистрацией обратитесь к этому гайду по устранению неполадок.
После успешной регистрации перезагрузите Raspberry Pi 2 и подтвердите, что приложение запускается автоматически.
Схема
Железо робота состоит из шасси с DC моторами, Raspberry Pi 2 на Windows 10 IoT Core, 9-12 В батареи для моторов, датчика расстояния и блоков питания. Батарея моторов питает H-мост драйвер, а Raspberry Pi 2 требует отдельный 5 В источник — либо USB PowerBank, либо 7805 регулятор.
Зачем резисторы с ультразвуковым датчиком расстояния?
Ультразвуковой сенсор выдает 5 В на пине Echo, что превышает 3,3 В логический уровень Raspberry Pi 2. Напряжение делитель (R1 = 1 кОм, R2 = 2 кОм) снижает напряжение до 3,3 В:
Vout = 5 × (2 кОм / (1 кОм + 2 кОм)) = 3,3 В
ПРЕДУПРЕЖДЕНИЕ: Прямое подключение пина Echo к GPIO Pi повредит плату. Всегда используйте уровневый сдвигатель или делитель.
Финальная сборка
Известные проблемы
Распознавание речи не работает (Build 10586)
Распознавание речи не работает на IoT устройствах под Windows IoT Core build 10586.
Решение: Откатитесь к build 10240 до выхода обновления от Microsoft, решающего проблему.
Проблема с микрофоном
Точность распознавания падает с низкокачественными микрофонами, особенно на расстояниях свыше 1-2 м.
Решение: Используйте качественный или беспроводной микрофон. При необходимости усиливайте сигнал или рассмотрите шумоподавляющую гарнитуру.
Задержка обработки распознавателя
Распознавание речи вносит задержку 600-2000 мс. Для быстрых роботов это может вызывать рассинхрон между командой и действием.
Решение: Текущие версии SDK не снижают эту задержку. Будущие релизы могут предложить оптимизации.
Различия в произношении
Акценты и региональные произношения могут влиять на распознавание. Укажите язык и регион в SRGS файле (например, xml:lang="en-GB" для британского английского).
Шум окружения
Фоновый шум может снижать точность. Хоть устранить сложно, шумоподавляющий микрофон может смягчить проблему.
USB микрофон / USB SoundCard не распознается
Начиная с build 10531, Windows IoT Core поддерживает универсальные USB-аудио устройства. Если ваше устройство использует проприетарный драйвер, оно может не работать.
Попробуйте другой USB-микрофон или звуковую карту с универсальным драйвером.
Будущие улучшения
Расширьте робота визуальной обратной связью — например, зеленый LED для успешных команд и красный для ошибок. Можно также добавить состояния «слушаю» и «сплю» для избежания случайных активаций.
Заметили ли вы?
Анимированный заголовок демонстрирует фичу, не описанную в тексте. Изучите анимацию внимательно и попробуйте реализовать скрытую возможность.
Удачи!
Источник: Speech Controlled Robot
Производственный процесс
- Считывание пульса сердечного ритма на Windows 10 IoT Core на Raspberry Pi — пошаговое руководство
- Создание безопасной двери с распознаванием лиц на Windows IoT и Raspberry Pi
- Создание кнопки AWS IoT с управлением движением на Raspberry Pi, PIR-датчике и MQTT
- Передача данных Adafruit 10DOF IMU с Raspberry Pi 2 в Azure Event Hubs на Windows 10 IoT Core
- Точный мониторинг температуры и влажности с SHT15 на Windows 10 IoT Core
- Установка Windows 10 IoT Core на Raspberry Pi 3 Model B+: Пошаговое руководство
- Создание Bluetooth-робота на Raspberry Pi с аудио-обратной связью
- Жестово-управляемый робот на Raspberry Pi
- Создание WiFi-робота на Raspberry Pi и Android-смартфоне
- Расширение GoPiGo v2 на Windows 10 IoT Core для Raspberry Pi 3