В последнее время всё более и более набирает силу одна техническая революция, о которой, наверняка, малоизвестно широкому кругу, поэтому, думаю, что интересующимся робототехникой будет интересно узнать о том, что, по сути, прямо сейчас наблюдается смена парадигмы — где от логики жёсткого программирования наблюдается переход к реакции на множество ситуаций, где для этого происходит внедрение использования нейросетей, для запуска на микроконтроллерах.
Итогом этого становится то, что ещё вчера достаточно простые и «не умные» роботы — заметно умнеют и получают возможность реагировать на множество изменяющихся условий окружающей среды. И, что особенно интересно — всё это на самых слабых и дешёвых микроконтроллерах! ;-)
Итак, о чём идёт речь?
Но для начала, хотелось бы сказать несколько слов в качестве введения…
Написать об этой теме меня побудило то, что не так давно, осуществляя вялый серфинг по одному из маркетплейсов мне на глаза попалась шагающая робособака (к сожалению, ссылку не сохранил).
Такого добра в последнее время чуть ли не «из каждого утюга», и, казалось бы, ну и что тут такого? Собака и собака… Однако, что-то меня побудило зайти в её описание, посмотреть картинки, и, кликнуть по видео, которое тоже было приложено.
С первых же кадров, мне стало понятно — что-то тут не то: собака уверенно бежала, и причём, в отличие от совсем дешёвых поделок, где алгоритм переставления ног и само физическое исполнение ног реализовано таким образом, что собака, передвигаясь по горизонтальной поверхности, даже в теории не может упасть — здесь, в отличие от этого варианта, сразу было видно, что дело вовсе не в этом и она бежит чуть ли не галопом (не знаю как правильно это назвать), — в общем, уверенно вставая не на все ноги во время бега и удерживая равновесие при этом!
То есть, было видно, что используется какой-то продвинутый алгоритм управления бегом и, что особенно удивляло, цена: она не превышала что-то порядка двух-двух с половиной тысяч рублей (могу несколько соврать, но где-то в этом районе)!
Всё происходящее вызвало у меня довольно живой интерес, потому что мои собственные интересы, так или иначе крутятся вокруг микроконтроллеров, робототехники и всего что про это.
Сразу хочу отметить, что информация ниже, будет, наверное, в большей степени интересна тем, кто хотел бы только двигаться в этом направлении, чем профессионалам.
Таким образом, если у вас есть чем дополнить или поправить информацию ниже, буду только рад, так как весьма заинтересован в этом сам! ;-)
Я сразу вспомнил прочитанные когда-то (в конце 2010-х примерно) статьи и изученные подходы, про TinyML (Tiny Mashine Learning) — использование подходов машинного обучения на слабых микроконтроллерах.
Кстати говоря, если вы до этого не сталкивались, то по ссылке выше вы сможете найти очень большое количество информации по TinyML, в сжатом, структурированном виде!
К слову, там же, по ссылке выше, в разделе «Важные этапы» (Milestones) можно найти очень интересный исторический взгляд, на то, откуда всё стартовало и как развивается.
Для меня, например, ознакомление с этой информацией было интересно тем, что мне стало ещё более понятно, почему я сам столкнулся с этой темой только в конце 2010-х — так как именно тогда Google выпустила TensorFlow Lite— специальный фреймворк для запуска моделей машинного обучения на встраиваемых устройствах; тогда как до этого происходили, в основном, академические изыскания (по крайней мере, насколько можно судить по истории развития).
В те года муссировались в основном относительно простые применения (по крайней мере, в широком доступе, не в узкоспециализированных профессиональных сообществах):
Дверной звонок, в который можно позвонить и который откроет дверь по голосу своего хозяина (срез спектра частот (в одном или нескольких местах, то есть, анализ идёт не всего произносимого) голоса хозяина, произносящего ключевое слово для открытия двери) — в итоге быстрый анализ на слабом железе;
Распознавание лица хозяина на видео (попиксельный анализ, ограниченного количества пикселей, не всей картинки) — в итоге быстрый анализ на слабом железе.
Тем не менее, если мы обратимся к хорошей картинке оттуда же, то мы сможем в общих чертах быстро понять, как осуществляется процесс разработки, в данный момент*:
*Лично мне самому было бы ещё интересно узнать, когда именно сложилась такая практика, однако конкретные данные на этот счёт я не нашёл. :-)

Сразу нужно отметить, что схема выше слишком упрощённая, так как не хватает, как минимум, ещё одного предварительного этапа — собственно самого создания робота (тоже, кстати, довольно интересный и важный этап, ниже мы ещё рассмотрим его тоже).
Однако, пока, для себя можем отметить, что несмотря на то, что постулируется запуск нейросетей на слабых микроконтроллерах, на предварительном этапе, всё равно требуется мощный компьютер, для обучения модели.
Итак, насколько можно судить по анализу текущей ситуации, процесс интеграции нейросети в микроконтроллер, выглядит следующим образом:
Так как мне самому гораздо ближе механическая часть робота — то есть, удержание равновесия и т д., то посмотрим именно с этой стороны; к тому же, мы и рассказ начали как раз с этого — с бега «умной робособаки». :-)
1 этап.
Для начала, надо определиться, какого типа робот нас интересует: двуногий, многоногий, какая-то абстрактная рука-манипулятор для производства?
После чего, необходимо создать виртуальную модель этого робота.
Думаю, что, на этом этапе особо выигрышно себя почувствуют те, кто занимался 3d печатью и моделированием трёхмерных объектов в любом инженерном CAD-e — так как задача заключается именно в этом: в инженерной среде разработки строится полная трёхмерная копия требуемого робота (уже реально существующего в физическом мире или полностью только лишь трёхмерная модель, которая будет в дальнейшем распечатываться с помощью 3d печати).
Тут надо сделать оговорку, что среда должна иметь возможность последующего экспорта 3d модели вовне, например, в формате URDF (Unified Robot Description Format).
Если среда не имеет такой возможности по умолчанию, то должен быть установлен соответствующий плагин (если это возможно для этой среды).
После чего, если робот имеет движущиеся части — прямо в этой среде эти движущиеся части явным образом назначаются, а также задаются ограничения: например, что рука манипулятор может сгибаться «в локте» только в пределах от 0 до 90°, и вращаться в основании на 360°.
Таким образом, мы видим (и мне самому этот нюанс очень нравится) — что рассматриваемая методика позволяет «оживить», по сути, любого произвольного робота, например, какого-нибудь робота-пришельца из игры! :-)
Далее, построенная 3d модель экспортируется в формат URDF или иной, который может принять среда для обучения (о ней ниже; (например, .mjcf, если будет, к примеру, использоваться среда MuJoCo).
Интересный момент здесь тот, что экспортированная модель будет содержать все сочленения, и среда для обучения автоматически распознает не только саму модель, но и все сочленения робота, со всеми их ограничениями, предварительно заданными в инженерном CAD-е.
2 этап
Теперь, когда есть построенная модель, она импортируется в среду обучения, о которой следует сказать сначала несколько слов…
Дело в том, что процесс обучения робота, если бы производился в реальной жизни, потребовал бы большого количества времени, и (возможно) «большого количества роботов» :-В — так как они бы неизбежно повреждались в процессе обучения, например, если робот должен устойчиво стоять, а во время обучения он будет падать миллионы раз, то, сами понимаете, чего от него останется!
Таким образом, был придуман интересный подход: пускай робот обучается в виртуальной среде, для чего мы и сняли полную его 3d копию, с реально существующего в жизни робота — в первом случае; или же, с нуля построили трёхмерную модель, чтобы затем, распечатать её с помощью 3d печати, и загрузить туда обученную модель — во втором случае.
Такой подход, кроме непосредственно безопасности для самого физического робота, позволяет существенно ускорить и все процессы — в реальной жизни это могло бы занять очень много времени, тогда как виртуальной среде, на мощной платформе, подобное обучение может занять весьма мало времени, — возможно, часы.
И даже мало того: в подобных средах можно запускать одновременно несколько потоков тренировки одного и того же робота, в результате чего, требуемый опыт набирается намного быстрее (весь опыт как бы скапливается всё равно в одно хранилище)!
К настоящему моменту сложился целый ряд виртуальных сред, — своеобразных «тренировочных залов» для роботов, где они и учатся осуществлять целевое действие(я): MuJoCo, NVIDIA Isaac Sim, PyBullet — здесь перечислены не все возможные.
Однако, сама виртуальная среда тренировки — это всего лишь место, в котором имитируется физика и нейросети там нет!
Нейросеть подключается отдельно, в виде библиотеки, например, Stable-Baselines3, которая настраивается нужным для пользователя образом, и, через специальный интерфейс (Gymnasium или «Gym»), начинает общаться с этой средой, где нейросеть как бы является тем, кто отдаёт команды, а виртуальная среда — тем, кто выполняет команды, возвращая нейросети, что получилось в итоге (сделали попытку встать… упс, встать не вышло и сенсоры показывают вот это:…; ок, пробуем тогда вот так… и т.д.).
В процессе поисков я тут нашёл несколько ссылок, которые на практике поясняют, как этот процесс выглядит в разных тренировочных средах и, думаю, что они будут полезны интересующимся: MuJoCo, NVIDIA Isaac Sim-первая ссылка, NVIDIA Isaac Sim-вторая ссылка, PyBullet.
3 этап
Теперь, когда робот обучен делать то, что нужно, из Stable-Baselines3 экспортируются обученные веса, в универсальном формате onnx, из которого затем они трансформируются просто в массив байт.
4 этап
Теперь, этот простой массив чисел необходимо правильно интерпретировать, для чего в микроконтроллер загружается библиотека TensorFlow Lite и загружаются сами веса.
Остаётся только включить всё это в свой код, подключить к исполнительным устройствам (ноги, руки и т.д.) и робот будет делать то, чему его и обучили, — например, при движении на четырёх ногах (как робособака из примера в начале статьи), — она будет передвигаться вполне себе реалистично, «поражая своим равновесием окружающих» :-)))
Ну и, в качестве некоторого мотивирующего видео :-) прикладываю те, которые показаны ниже и, думается, что теперь вы стали чуть лучше понимать, как получить нечто подобное самостоятельно:
Как мы видим, всё более чем реально, и может быть вполне себе исполнено даже на простых и недорогих микроконтроллерах, наподобие тех же самых esp32 (в сети полно примеров).
Из этого, кстати говоря, вполне может себе получиться небольшой и очень интересный бизнес, так как устройства получаются крайне привлекательные для широкой публики, где малая цена устройства, в сочетании с его «умом» могут сделать его очень интересным! ;-)
И обычно так и происходит — взять хотя бы тот же открытый проект OpenCat, основанный в комнате общежития и получивший широкое распространение из-за своей доступности многим:

Размещайте облачную инфраструктуру и масштабируйте сервисы с надежным облачным провайдером Beget.
Эксклюзивно для читателей Хабра мы даем бонус 10% при первом пополнении.

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

vokuzh_by
28.05.2026 11:09Написать об этой теме меня побудило то
Ну и, в качестве некоторого мотивирующего видео :-) прикладываю теА точно Вы? Проверьте, у Вас похоже LLM-ка сбежала и на аккаунт вошла, чистый текст от нейрослопа (вот просто абсолютно все триггеры собрали, которые llm-ки пишут, хоть редактируйте для вида)...

cnet Автор
28.05.2026 11:09Всегда все свои тексты пишу сам, не нужно видеть то, чего нет. ;-)
И даже больше того, недавно апнул себе комп именно под это (в том числе). Постоянно вожусь с микроконтроллерами. И даже прямо в данный момент :-D
Челюсть упала бы у многих, если скажу что делаю:-)))"Небольшие умные машины за копейки" (условные) - это прям вкуснота, какой мало. По крайней мере, я так считаю :-)
Скажем, не электросамокат - а небольшой коник складной, чтобы верхом ездить. И не за 1,5 млн руб - а за, скажем, рублей 50-70 тыщ. :-)))
seberditbase
Дайте ссылку на собачку.