Как мы отобрали пульт у оператора и дали ему микрофон
Представьте: склад, гул погрузчиков, звон металла, и оператор орёт на робота: «Вперёд! Стоп! Левее!». Звучит как дешёвая фантастика, но это реальность нашего теста в апреле 2026-го. Мы взяли серийного робота-перевозчика паллет, интегрировали в него голосовой интерфейс на базе локального стека — и устроили двухнедельный прогон в условиях, приближенным к боевым. Идея не нова: руки заняты, глаза смотрят на груз, а кнопки на пульте — лишнее движение. Но насколько это работает на зашумлённом складе, где каждый второй разговаривает по рации?
Что под капотом?
За распознавание отвечала последняя версия Whisper (v5, если верить логам) с дообучением на команды из нашего словаря: «Вперёд», «Назад», «Стоп», «Левее», «Правее», «Подними», «Опусти», «Стоп-кран» (экстренный). TTS — Silero, потому что робот должен был озвучивать подтверждение. Все модели работали локально на борту робота на одноплатнике с NPU — никакого облака, задержка критична. Настройка оказалась не такой уж сложной: взяли за основу сборку умной колонки на Raspberry Pi, переписали слой команд и прикрутили CAN-шину для управления моторами. Микрофонная решётка с подавлением шума — три MEMS-микрофона, направленных в сторону оператора.
Ключевое: весь цикл «голос → действие» укладывался в 200–250 мс. Человек моргает за 300 мс — разница почти незаметна.
Цифры, ради которых всё затевалось
Мы провели 500 циклов с тремя разными операторами (мужчина, женщина, человек с лёгким акцентом). Шум фона — 75–85 дБ (типичный склад). Результаты сведены в таблицу. Да, она скучная, но без неё никак.
| Команда | Точность, % | Средняя задержка, мс | Число ложных срабатываний |
|---|---|---|---|
| Вперёд | 97 | 210 | 0 |
| Стоп | 95 | 190 | 1 (путаница со «стоп-краном») |
| Левее/Правее | 88 | 240 | 3 (из-за эха) |
| Подними/Опусти | 93 | 220 | 1 |
| Экстренный стоп | 100 | 80 | 0 |
Общая точность по всем командам — 94.6%. Это выше, чем мы ожидали, но ниже планки в 99%, которую ставят safety-стандарты. Экстренный стоп отработал идеально — отдельный канал, аппаратный триггер по ключевой фразе, никакой нейросети. Хитрость: «Стоп-кран» распознавался в отдельном потоке с минимальным порогом уверенности.
Грабли, на которые мы наступили
Всё хорошо только в презентациях. В реальности всплыли три проблемы.
- Шум. Микрофонная решётка не справлялась с импульсными помехами (удар паллеты, визг тормозов). Whisper начинал «фантазировать» — вместо «Левее» выдавал «Еле-еле». Пришлось добавить постфильтр на основе grammar-констрейнов.
- Акцент. Один из операторов картавил. Команда «Правее» превращалась в «Пвавее» — точность упала до 40%. Докатили дообучение на синтезированных аудио с разными дефектами речи.
- Команды-близнецы. «Стоп» и «Стоп-кран» — классика. На складе кто-то крикнул «Стоп крановщик!» — робот дёрнулся. Пришлось ввести голосовой «ключ» (имя робота) перед каждой командой.
Это напомнило мне старую статью про голосового ассистента, где автор бился с автокоммитами в Git по голосу — та же боль с амбиентным шумом.
А что с безопасностью?
Вопрос резонный. Если робот не распознал команду «Стоп» — он может задавить человека. Поэтому мы сделали двухуровневую систему: голосовой канал + физическая кнопка на поясе оператора. И ни один тест не проводили без страхующего. Пока голос — это ассистент, а не замена пульту. Но прогресс есть: операторы, привыкшие к голосу, выполняли на 15% больше циклов за смену — им не нужно было отпускать груз для нажатия кнопок.
Что дальше?
Голосовое управление не вытеснит традиционные интерфейсы, но станет удобным дополнением. Уже сейчас видно: для рутинных операций (вперёд-назад, стоп) оно работает отлично. Команды позиционирования (чуть левее, чуть правее) — зона роста. Возможно, следующим шагом будет интеграция с VLA-моделями вроде GR00T N1.7 от NVIDIA, где голос будет не просто командой, а описанием цели («поставь паллету к третьей стойке»). Но до этого ещё много тестов. И да, не пытайтесь внедрить голос на склад, где все говорят хором — робот сойдёт с ума быстрее, чем вы скажете «Стоп-кран».