Я хотел сделать дочери робота помощника с локальным ИИ, чтоб она не отвлекалась от уроков, а наоборот увлеченно их делала.

Но ничего для этого у меня небыло. Была только идея: сделать для дочери робота, с которым можно разговаривать даже без интернета. И хотелось, чтобы он не выглядел просто очередной колонкой с часами или черным лицом с синими глазами. Поэтому первым делом я сделал на ПК анимированное лицо — обычное роботическое, без волос, банта и прочих украшений, хотелось что-то привлекательное.

Показал дочери. Она посмотрела и спросила: «А можно, чтобы это была аниме-кошечка?»

Так первоначальный робот начал превращаться в персонажа. Я стал расспрашивать, что именно ей нравится: глаза, причёска, одежда, выражение лица. Первого варианта оказалось мало. Мысли у неё были довольно конкретные, и выяснилось, что недостаточно просто приделать ушки к экрану. В итоге появились два подробных эскиза образа. Один — с тёмными волосами и розовым кимоно, другой — в более светлых цветах. С этого момента я уже делал не абстрактного робота, а маленького собеседника для своего ребёнка.

первый вариант ей понравился как модель кимоно:

Первый вариант образа: тёмные волосы, бант и лицо на экране
Первый вариант образа: тёмные волосы, бант и лицо на экране

и второй, который в итоге по цветовой гамме понравился ей больше:

Второй вариант образа: светлые волосы и другая цветовая гамма
Второй вариант образа: светлые волосы и другая цветовая гамма

Из картинки — в живое лицо

Я начал с того, что можно было проверять без железа. Написал приложение на Python с экранным лицом: глаза, зрачки, брови, рот, моргание. Добавил улыбку и несколько выражений. Когда робот произносил ответ, рот должен был двигаться вместе со звуком. Если программа надолго замирает между вопросом и ответом, никакие красивые глаза не спасают: ребёнок решит, что она сломалась или что хуже просто игнорит тебя. Так постепенно у лица появились состояния «слушаю», «думаю» и обычная спокойная мимика. Но я оставил и другие, первые сделанные лица, их можно менять в настройках.

Один из понравившихся рабочих вариантов экранного лица который уже и дорабатывался.
Один из понравившихся рабочих вариантов экранного лица который уже и дорабатывался.

Для интерфейса я использовал Python и Tkinter. Отрисовку лица отделил от обработки голоса и ответа модели: ожидание сети или генерации текста не должно останавливать моргание. Позже это разделение пригодилось и для движения головы.

Параллельно я понял, что одной анимации мало. Роботу нужен мозг, причём локальный. Но подо что его собирать? Arduino для такого диалога не подходила. Я поискал одноплатный компьютер, сравнил возможности, посмотрел что люди уже запрускали и на чем, и нашёл на Авито Raspberry Pi 5 с 8 ГБ памяти по адекватной цене и заказал его. Хотелось запустить на нём модель примерно на 4 миллиарда параметров. Пока посылка ехала, я продолжал писать программу на ПК и выбирать модель.

Двадцать(!!!) моделей и один маленький компьютер

Я скачал около двадцати LLM-кандидатов. Часть отсеялась быстро: одни плохо держали заданный характер, другие невнятно отвечали на простые вопросы или путались в длинной реплике. Для оставшихся я собрал набор проверок — арифметика, объяснения, связная речь, следование инструкции. Самый «умный» ответ в отдельном тесте не был победой: ребёнку ещё надо дождаться его вслух.

В финале у меня остались четыре GGUF-модели. На Pi 5 основным вариантом стала Qwen3-4B-Instruct-2507: в моём наборе она дала лучший баланс качества и ожидания. Gemma_4_E2B отвечала быстрее и пригодилась как вариант для короткого разговора. Gemma_4_E4B выглядела сильнее в некоторых объяснениях, но работала медленнее. Qwen3.5_9B_DeepSeek_Distill я оставил запасным экспериментом: она интересная, но для маленького робота её длинный ответ кажется очень долгим по времени (там и я уже думал что завис).

В одной из проверок на самом Pi скорость генерации получилась примерно 4,3 токена/с у Qwen3 4B и 7,1 токена/с у Gemma E2B. Это измерения моего набора задач и настроек, не универсальный рейтинг моделей. Для ребёнка разница ощущается просто: задала вопрос — ждёт. Поэтому быстрый ответ иногда полезнее чуть более подробного.

Речь я тоже оставил локальной. Микрофонный звук распознавал Vosk, а ответ озвучивал Piper. Базовый голос «Ирина» был хорош, но персонажу дочери хотелось более мультяшного звучания или даже скорее анимешного. Я не обучал отдельную голосовую модель, да и времени не было: замедлил исходный синтез и изменил высоту уже готового звука. В пресете это выглядит так:

'anime_kawaii': ('irina', 1.38, 1.30)

Здесь 1,38 - коэффициент изменения высоты, 1,30 - замедление исходного синтеза; после этого звук приводится к частоте аудиоустройства. Подбирал на слух: слишком высокий голос превращался в писк, слишком медленный утомлял. Когда получилось приятнее, стало ясно, что просто хлопающих глаз на экране уже мало.

А если голова повернётся?

Я задумался: ну допустим персонаж смотрит на человека, но как он поймёт, где тот стоит, да и по сути ребенок будет ждать внимание наверно? Сначала придумал небольшой поворот головы. Потом добавил к этой идее камеру и поиск лица. Началась охота за деталями.

Для сравнения заказал MG90S и MG996R. Первый маленький, второй заметно крупнее - как раз хотелось проверить, справится ли лёгкий привод с будущей головой.

Два привода, насколько же сильно отличается размер. MG90S мелкий, MG996R мощный, но больше.
Два привода, насколько же сильно отличается размер. MG90S мелкий, MG996R мощный, но больше.

Управлять ими решил через PCA9685. Для камеры выбрал модуль на IMX708 с автофокусом. Экран — сенсорный Waveshare 3.5-inch DSI LCD (H), 480×800.

Для звука я постепенно собрал отдельную цепочку: цифровой микрофон ICS-43434 подключается к Pi через I²S, воспроизведение идёт через USB-звуковую карту и усилитель к динамикам. Аналоговый MAX9814 тоже рассматривал, но основным микрофоном он не стал. Ещё заказал два подшипника 6901 — они понадобятся для опоры шеи, чтоб не было люфта ни при повороте ни при касании экрана пальцем или стилусом.

Пока нужная камера ехала, я поставил на пробный кронштейн камеру от 3D-принтера, которой до этого пользовался как вебкой, а для разговора взял микрофон компьютера. Это был некрасивый, но полезный стенд: уже можно было наблюдать, находит ли программа лицо и куда она посылает сервопривод.

Пробный стенд с камерой и двумя приводами для сравнения
Пробный стенд с камерой и двумя приводами для сравнения

С питанием PCA9685 вышла отдельная история. На зелёном клеммнике я измерил 5 В, а на силовом контакте ряда сервоприводов — ноль. Через боковой вход V+ те же 5 В до ряда дошли, и привод заработал. Кто виноват и как исправить, я нашел в отзывах маркетплейса, но не стал запаивать, оставил вход V+. Зато на практике усвоил различие: VCC питает логику платы от 3,3 В Pi, а V+ - отдельную силовую шину серво на 5 В. Просто видеть контроллер по I²C ещё не значит, что мотор получил питание.

Настоящая камера и первая голова

Когда пришла IMX708, я сначала проверил не паспортную, а реальную скорость. На Pi 5 при сохранении полного угла обзора захват дал 50,03 кадра/с. С включённым поиском лица я получил 29,90 результата/с в 12-секундной пробе после прогрева. Это два разных числа: камера успевает снять кадры чаще, чем программа обработать лицо. Для плавного слежения мне хватило примерно 30 обновлений координат за секунду.

Камера для Pi 5
Камера для Pi 5

Экран тоже пришлось запускать и поворачивать уже на Pi. Потом приехал цифровой микрофон. Впервые удалось убрать временные устройства ПК и посмотреть, как ведут себя вместе камера, лицо, голос и привод.

В этот же период я добавил возможность обратиться к DeepSeek по API. Для пробы пополнил счёт на 200 рублей. Ответы на некоторые вопросы стали богаче, но локальные Vosk, Piper и модель на Pi я оставил: исходная идея робота без обязательного интернета никуда не делась. В программе я подбирал длину ответа и подсказку для модели, чтобы получалась реплика собеседника, а не монолог на полминуты.

С механикой всё оказалось муторнее, чем с красивым эскизом. Я подгонял 3D-модель, вырезал место под экран, камеру и крепёж, примерял шлейфы, печатал детали, снова мерил. На картинке всё сходится; в пластике внезапно мешает толщина платы, винт оказывается недоступен отвёртке, а отверстие корпуса зажимает подвижный объектив. Последнее я проверил руками: освободил объектив — автофокус заработал нормально. Поэтому готовность 3D модели ещё не означает готовности собранной головы. Заодно потратил остатки того пластика, который не жалко и валялся уже пару лет.

Проба дисплея и распечатаной тестовой 3D головы с лицом
Проба дисплея и распечатаной тестовой 3D головы с лицом

И вот я запустил первый стенд с экраном, камерой и движением. Голова находила человека и поворачивалась. Казалось бы, цель достигнута. Но я смотрел на неё и понимал: чего-то не хватает, помимо подбора пропорций лица (их я подобрал позже с большим вниманием и вообще сделал настраиваемой в меню).

первый запуск лица на реальном стенде до правок
первый запуск лица на реальном стенде до правок

Конечно. Если собеседник сместился чуть в сторону, сначала должны посмотреть глаза, потом при необходимости повернуться голова. И зрачки должны идти вместе с глазами, а не застывать на месте. Я начал связывать координаты лица с положением глаз и командой привода: сначала взгляд, потом плавный доворот, без рывка за каждым пикселем камеры. Очень долго получалось криво и в неверную сторону. После тщательной настройки движение вдруг стало убедительным: на меня смотрел уже не экран, а персонаж.

Персонаж теперь смотрит
Персонаж теперь смотрит

MG90S на лёгком кронштейне справлялся, но были рывки, а MG996R в сравнительной пробе оказался плавнее. Окончательный угол поворота и люфт я оставил до полной сборки.

«Как назовём?»

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

  • «Лягушка», — ответила она.

  • WHAT!?!?!?! Нет, не ослышался. Ну ладно, Лягушка так Лягушка. По-моему, даже прикольно.

Вот так и пошло зарождение “Лягушки”.

Я добавил обращение по имени и разговор после взгляда в камеру. Имя помогает позвать её, когда человека нет перед объективом. Если сказать «Лягушка, стоп», она прекращает разговор, возвращает голову в центр и ждёт нового обращения. Это были первые правила поведения, после которых программа начала напоминать домашнего робота, а не постоянно открытый микрофон. А взгляд в камеру активировал запись звука и даже не надо было называть по имени, очень удобно оказалось.

Имя я тоже вынес в настройки: если дочери когда-нибудь надоест «Лягушка», можно вписать другое. Сохранил — и робот уже откликается на новое имя, без правок в коде.

Сейчас это ещё стенд и напечатанная пробная голова, а не окончательно собранная фигурка. Но я уже увидел главное: дочь разговаривает с персонажем, тот отвечает своим голосом, переводит взгляд и поворачивается к ней. В следующей части покажу, как я учил Лягушку не просто смотреть и говорить, а помогать с предметом перед камерой, выводить ответ на экран и отправлять результат на печать.

Продолжение скоро!

Комментарии (13)


  1. ktibr0
    04.10.2026 08:10

    здоровский проект, тема компаньонов, особенно "физических", все чаще появляется и в моем окружении, я для своего Гермеса тоже приделываю "морду лица", правда, использую старый телефон ))
    Лягушка, как имя тоже меня "торкнуло", поэтому, пошел в Клод и спросил совета, как можно назвать. ИИ ответил:
    Небольшое наблюдение: камера на бантике сверху очень похожа на «лягушачий глаз», который торчит из макушки. Так что тема лягушки в этом дизайне уже есть.

    Каэру (Kaeru, 蛙): просто «лягушка» по-японски. Это каламбур: 帰る («вернуться домой») звучит так же, поэтому лягушки в Японии считаются талисманом счастливого возвращения. Для домашнего компаньона звучит мило: «всегда возвращается к тебе». Подойдёт и «Каэ-тян».
    Василиса: от «Царевны-лягушки». Лягушка превращается в красавицу, а здесь «лягушка» превращается в друга с живым лицом на экране. Можно звать «Васька» или «Ваcя-ква».

    мне кажется, Василиса, совсем неплохо, это, если бы аниме дулали по русской сказке - может быть так нарисовали ))


    1. NitroID Автор
      04.10.2026 08:10

      Спасибо за поддержку) Интересное решение - спросить про совместимость имени! Прикольно что так совпало.


  1. mrbp_old
    04.10.2026 08:10

    Хороший проект.

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

    При таком подходе не стоит удивляться к старости - "и в кого они пошли?! Жёсткие безчувственные машины...". Хорошо, если соберут вам к старости работа, который будет за вами ухаживать.


    1. NitroID Автор
      04.10.2026 08:10

      Благодарю за критику. Я думал об этом. Для этого учитываются некие моменты. Дочь у меня с математическим складом, и ей интересно пределы робота больше, чем просто спрашивать. Безусловно робот не должен становиться заменой родителю, у нас с этим проблем нет.

      Да и с вашей точки зрения есть другая сторона. Там где родитель не может уделить много времени в связи с отсутствием на работе, думаю что робот будет полезен, ведь ребенок может искать общение не только с хорошими людьми. В «очередном планшете» есть нативная реклама, приложения с рилсами в которых так же нет ничего хорошего, а в роботе грамотно написаный промпт настраивает его максимально как нужно родителю(это же очень гибкий инструмент). Не хочется чтоб решал за ребенка, прописывается промпт с наводящими вопросами, или вообще только просил обучить его, т.е. из ребенка делал учителя (моя это любит). В общем вариантов много.

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


      1. rPman
        04.10.2026 08:10

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

        Хороший собеседник на основе ИИ это сам по себе проект не на пару часов.


        1. NitroID Автор
          04.10.2026 08:10

          Да, понял, благодарствую! Сейчас история у меня ограничена по объёму, сжатия пока нет. Когда добавлю сводки, планирую сохранять конкретные факты, предпочтения и незавершённые задачи. Временное настроение не хочу превращать в постоянную характеристику, которую робот потом потянет в каждый разговор. Сохранённые сведения у меня сейчас можно посмотреть, исправить и удалить. Конечно со временем что-то будет дорабатываться.


  1. Ka463
    04.10.2026 08:10

    Проект прикольный, я тоже думаю в том же направлении но не для ребенка а просто робот, но слегка в расширенной конфигурации, есть ускорители вроде ROCKCHIP RK1820/RK1828  как раз подойдут для малых моделей там инференс до 100т.с, и разгружает основной процессор для других полезных действий, так же нужна долговременная память как у агента, это решаемо на мобильных устройствах через ассоциативную память, в таком случае робот превращается в компаньона а не очередную колонку. можно повесить ToF сенсоры для упрощения восприятия глубины и расстояния до объекта, что бы не гонять постоянно камеру, а использовать редко только для распознавания объекта, ну и много чего можно еще придумать =)


    1. NitroID Автор
      04.10.2026 08:10

      Классные модули! Читал про их архитектуру. На больших моделях круто справляется. Но я пока для нынешних DIY-экспериментов модуль **Raspberry Pi AI HAT+ 2** для малинки закажу (жду 11.11 на алишке), думаю на первое время будет достаточно.

      ToF смотрел. Но тут как раз цель чтоб голова двигалась. Даже прятки умудряются устроить (для этого пришлось и команды типа "Найди меня" и доворот типа реального поиска сделать). В общем идей для него море. Я хотел чтоб она автономно работала. И расчитывал на 4-6 18650. Временно отказался. Т.к. места прям впритык. Модель я буду дорабатывать в любом случае, но размеры печати принтера так же ограничены, Как разработаю новую 3-Д модель под автономность, то и модули\сенсоры можно будет добавлять.

      Вторая часть статьи почти дописана.


      1. Ka463
        04.10.2026 08:10

        Тоже отличный выбор, главное разгрузить центральный процессор, а если еще запихать ESP32-P4 на обработку видео и работу с экраном, то вообще остается непаханое поле для реализации любых фичь =)


  1. ooptimum
    04.10.2026 08:10

    Классный проект, который вполне может со временем превратиться в продукт. Не знаю, вывезет ли RPi5 нагрузку, но если бы я пилил такое, то на следующем этапе сделал бы память, чтобы модель помнила старые диалоги и предпочтения “клиента”. По диалогам можно сделать RAG, а для запоминания предпочтений можно прикрутить Honcho или нечто подобное. Тогда можно будет задавать не только сиюминутные вопросы, но и говорить что-то вроде: “Помнишь, мы с тобой обсуждали…?” Возможно, для этого придется завести небольшой домашний сервер. :)