Рандомизация фраз на Roborock S50/S55

Roborock S5 – серия недорогих роботов-пылесосов с лидаром, входящая в категорию товаров для “умного дома” от Xiaomi. Дистанционное управление со смартфона и root-доступ ко встроенной операционке на базе Linux прилагаются.

Наличие root-доступа предоставляет возможность немного поиграться с системой. Например, по умолчанию на каждое конкретное действие робот отвечает одной единственной фразой. И хорошо, если не по-китайски. Не очень весело, правда?

Попробуем сделать так, чтобы вместо этого робот отвечал случайной репликой из соответствующей категории фраз. Для этих целей будет использоваться самописная пользовательская файловая система fuse, сделанная на базе bbfs. Смысл состоит в том, чтобы при обращении к какому-либо файлу со звуком – например, sound.wav – модифицированная ФС проверяла наличие рядом файлов с именами sound_1.wav, sound_2.wav и т.д. и случайно выбирала один из них. Все прочие же действия bbfs просто пробрасывает в нижележащую файловую систему без изменений.

Инструкция далее предполагает минимальное умение пользоваться linux-терминалом через putty и (win)scp, а так же уже рутированное ПО на роботе.

  1. Сначала установим нужную локализацию, на базе которой будет строиться наша – например, при помощи WIN-MIROBO. В результате на роботе по пути /mnt/data/rockrobo/sounds появится каталог с набором звуковых wav-файлов.
  2. Делаем копию этого каталога в соседний, например: /mnt/data/rockrobo/sounds_multi, не забываем сделать chown на ruby (или другого пользователя, не root) как каталога sounds, так и sounds_multi (для удобной заливки новых wav-файлов через winscp).
  3. Установим поддержку файловых систем fuse, используя стандартные пакеты к Ubuntu 14.04 для armhf: понадобятся libfuse2_2.9.2-4ubuntu4.14.04.1_armhf.deb и fuse_2.9.2-4ubuntu4.14.04.1_armhf.deb с launchpad.net. Для установки забрасываем файлы в робота и используем dpkg -i имя_файла.
  4. Забрасываем в робота собранный бинарник файловой системы bbfs и кладем его, к примеру, в /usr/local/bin, делаем его запускаемым (chmod +x)
  5. В файле /etc/fuse.conf раскомментируем опцию user_allow_other, т.к. в противном случае из-под root-а не будут видны файлы в смонтированных пользователем каталогах, делаем этот файл читаемым для всех (chmod +r).

Теперь мы готовы запустить bbfs. Для этого заходим из-под ruby (или другого пользователя, главное – не root) и набираем следующую команду: bbfs -o nonempty,allow_root /mnt/data/rockrobo/sounds_multi /mnt/data/rockrobo/sounds. После этого в каталоге sounds будут показаны все файлы из sounds_multi, но при выборе основного файла sounds/sound.wav в действительности будет запрошен случайным образом либо sounds_multi/sound_N.wav, либо исходный sounds_multi/sound.wav.

Отметим, что N ∈ [1;20] – и только в порядке возрастания (т.о. если файла sound_1.wav нет, то sound_2.wav даже проверяться не будет).

Для размонтирования обратно используем команду fusermount -u /mnt/data/rockrobo/sounds, и в /mnt/data/rockrobo/sounds возвращается его исходное содержимое.

Если вручную все завелось корректно, то для автоматического старта при запуске робота можно добавить в /etc/rc.local следующую строку: su ruby -c "bbfs -o nonempty,allow_root /mnt/data/rockrobo/sounds_multi /mnt/data/rockrobo/sounds". Не забываем указывать правильного пользователя после su и не теряем кавычки.

А далее необходимо лишь записать любым синтезатором голоса побольше перефразированных звуковых сообщений в дополнение к обычным фразам. По мне так намного приятнее, когда робот не талдычит постоянно одну и ту же реплику, а использует разные слова для одного и того же события.

This entry was posted in Софт and tagged , . Bookmark the permalink.

2 Responses to Рандомизация фраз на Roborock S50/S55

  1. sava says:

    Прив, не находил способа добавить воспроизведение рандомных фраз во время уборки? ( в прошивке не заложены такие функции изначально)

    • root says:

      Мне кажется, тут вопрос не в нахождении, а в принципиальной возможности написания скриптов, которые бы это делали. И я думаю, что это осуществимо и должно быть не очень трудно, вот только смысла в этом не вижу.

      Описанное здесь позволяет разнообразить фразы для стандартных действий, которые так или иначе всё равно озвучиваются, и просто делает их более человечными. А что должны делать рандомные фразы во время уборки? Робот должен тупо ворчать о том, как вокруг него грязно и как его это всё достало, что ли? Ну, один раз на это посмотреть может и было бы забавно, но не более.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>