Roborock S5 – серия недорогих роботов-пылесосов с лидаром, входящая в категорию товаров для “умного дома” от Xiaomi. Дистанционное управление со смартфона и root-доступ ко встроенной операционке на базе Linux прилагаются.
Наличие root-доступа предоставляет возможность немного поиграться с системой. Например, по умолчанию на каждое конкретное действие робот отвечает одной единственной фразой. И хорошо, если не по-китайски. Не очень весело, правда?
Попробуем сделать так, чтобы вместо этого робот отвечал случайной репликой из соответствующей категории фраз. Для этих целей будет использоваться самописная пользовательская файловая система fuse, сделанная на базе bbfs. Смысл состоит в том, чтобы при обращении к какому-либо файлу со звуком – например, sound.wav – модифицированная ФС проверяла наличие рядом файлов с именами sound_1.wav, sound_2.wav и т.д. и случайно выбирала один из них. Все прочие же действия bbfs просто пробрасывает в нижележащую файловую систему без изменений.
Ручная установка
Инструкция далее предполагает минимальное умение пользоваться linux-терминалом через putty и (win)scp, а так же уже рутированное ПО на роботе. Если это не для вас – смело пропускайте этот раздел и переходите ниже.
- Сначала установим нужную локализацию, на базе которой будет строиться наша – например, при помощи WIN-MIROBO. В результате на роботе по пути /mnt/data/rockrobo/sounds появится каталог с набором звуковых wav-файлов.
- Делаем копию этого каталога в соседний, например: /mnt/data/rockrobo/sounds_multi, не забываем сделать chown на ruby (или другого пользователя, не root) как каталога sounds, так и sounds_multi (для удобной заливки новых wav-файлов через winscp).
- Установим поддержку файловых систем 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 имя_файла.
- Забрасываем в робота собранный бинарник файловой системы bbfs и кладем его, к примеру, в /usr/local/bin, делаем его запускаемым (chmod +x)
- В файле /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 и не теряем кавычки.
Предсобранные прошивки
На сайте github.com/rand256 есть предсобранные прошивки с рут-доступом, Valetudo RE и предустановленной в том числе и системой рандомизации фраз. После установки такой прошивки необходимо только создать на роботе директории /mnt/data/rockrobo/sounds и /mnt/data/rockrobo/sounds_multi и положить в последнюю набор файлов озвучки, включающих разные перефразированные реплики под каждое событие: например, start.wav, start_1.wav, start_2.wav.
Таким образом, после перезагрузки робот станет использовать для одного и того же события разнообразные слова вместо постоянного повторения единственной фразы – и это звучит намного живее и естественнее.
Прив, не находил способа добавить воспроизведение рандомных фраз во время уборки? ( в прошивке не заложены такие функции изначально)
Мне кажется, тут вопрос не в нахождении, а в принципиальной возможности написания скриптов, которые бы это делали. И я думаю, что это осуществимо и должно быть не очень трудно, вот только смысла в этом не вижу.
Описанное здесь позволяет разнообразить фразы для стандартных действий, которые так или иначе всё равно озвучиваются, и просто делает их более человечными. А что должны делать рандомные фразы во время уборки? Робот должен тупо ворчать о том, как вокруг него грязно и как его это всё достало, что ли? Ну, один раз на это посмотреть может и было бы забавно, но не более.