Мода на ИИ-помощников, кажется, достигла пика. Даже далёкие от темы люди интересуются, что такое OpenClaw и как его установить. Более продвинутые пользователи покупают Mac Mini M4 — 16 Гб единой памяти и нейропроцессорные ядра позволяют запускать локальные модели, а устройство при этом тихое и энергоэффективное.
Ограничения OpenClaw
У OpenClaw есть не только преимущества, но и серьёзные недостатки. Речь не о безопасности, а о системных требованиях. Минимум — 2 Гб ОЗУ, рекомендуется 4 Гб. Плюс нужен как минимум 4-поточный CPU, иначе возможны проблемы с параллельными задачами.
На сцену выходят китайские разработчики из Sipeed — те самые, кто создал миниатюрный NanoKVM. «Подержите наше Tsingtao», — словно заявили они, представив PicoClaw: ИИ-ассистент, которому хватает 10 Мб ОЗУ и одноядерного CPU с частотой 600 МГц. Сегодня — тест этого чуда китайской инженерии на Arduino Uno Q.
Что такое PicoClaw
PicoClaw — это не альтернатива OpenClaw. Он не справляется со сложными сценариями, но идеален для простых задач. Может работать с локальными моделями, с моделями на удалённом ПК с GPU или напрямую с облачными сервисами вроде ChatGPT и Claude.
Проект создан в рамках экосистемы Sipeed, специализирующейся на дешёвых платах на архитектуре RISC-V. Например, LicheeRV Nano построен на SoC SOPHGO SG2002: два ядра RISC-V C906 (1 ГГц и 700 МГц), всего 256 Мб ОЗУ.
Такие ограничения исключают тяжёлые среды вроде Node.js. Вместо этого PicoClaw почти полностью написан на Go. Это резко снижает потребление памяти. Любопытно, что 95% кода сгенерировано ИИ, а platform-specific части доработаны вручную.
Например, в Makefile есть патч для сборки под MIPS: Go по умолчанию не ставит флаг EF_MIPS_NAN2008, а ядро Ingenic X2600 требует его. Патч вручную меняет 4 байта в e_flags — чисто для совместимости.
Оптимизации в основном стандартные: build tags для исключения тяжёлых зависимостей, флаги линковщика без таблицы символов и DWARF. Это сократило размер бинарника почти на треть. Сборщик мусора работает в штатном режиме — без нестандартных настроек.
PicoClaw — не конкурент OpenClaw, а «киллер-фича»: ИИ-ассистент на плате за 10 долларов. Поддерживаемые архитектуры впечатляют: Windows, Linux, macOS, FreeBSD, NetBSD, Android. Возможна даже установка на Nintendo Wii с NetBSD — интересно? Пишите в комментариях.
Установка и запуск
Arduino Uno Q работает под Debian, поэтому установка стандартна. На момент написания актуальна версия 0.2.1. Скачиваем пакет с GitHub и устанавливаем через dpkg.
Выполняем базовую настройку — аналог openclaw onboard. Или сразу редактируем конфиг, указав используемые модели и каналы связи: Slack, Telegram, IRC — для любителей ретрокомпьютинга.
Я выбрал локальную модель qwen3-4b-thinking-2507 через LM Studio. Запускаю сервер на домашнем ПК и указываю модель в двух местах конфига PicoClaw. Затем запускаю сам ассистент.
Отображение статуса
Uno Q — не просто одноплатник. У него есть MPU и MCU STM32U585, а также встроенная LED-матрица на 104 светодиода. Разрешение маленькое (8×13), но идея — отображать статус PicoClaw через анимации.
Где брать статус
У PicoClaw нет полноценного API для внешнего мониторинга. Есть только:
- /health — жив/мертв;
- /ready — готов/не готов.
А мне нужно отображать: «думает», «принимает», «отправляет», «свободен». Таких состояний в PicoClaw нет. Форкнуть и добавить /status — сложно и долго.
Решение: читать stdout. Туда выводятся строки вроде Processing message from, LLM response, Routed message, Published outbound response. Перенаправляю stdout в файл и пишу простой HTTP-сервер, который отслеживает эти строки и выдаёт нужный статус.
Добавил сброс статуса через 4 секунды — иначе он «залипает».
Встроенная LED-матрица
Матрица: 8 строк × 13 столбцов. Управление — через библиотеку Arduino_LED_Matrix. Инициализация в скетче стандартна.
Создаю пять анимаций:
- Thinking — «эффект матрицы» (пиксели бегут вниз);
- Receiving — антенна со сходящимися волнами;
- Sending — антенна с расходящимися волнами;
- Ready — статичное изображение краба;
- Clear — пустой экран.
Сначала пробовал шестерёнку для «думает» — на таком разрешении неразборчиво. «Матрица» смотрится лучше.
Анимации — это последовательность кадров. Для антенны использовал одни и те же кадры (ant0–ant5), но в разном порядке — экономия кода.
MPU и MCU: как передавать статус
Связь между MPU (Linux) и MCU (STM32U585) — через UART. MCU использует Serial1, Linux — /dev/ttyS0. Прямой полнодуплексный канал.
Поверх UART — RPC-протокол на основе MsgPack (бинарный аналог JSON). При компиляции скетчей подтягиваются библиотеки MsgPack, ArxContainer, ArxTypeTraits — для сериализации.
Самый сложный слой — arduino-router. Он работает на MPU как демон, держит /dev/ttyS0 открытым и выступает брокером между Python-кодом (на MPU) и скетчами (на MCU). Без него не было бы мультиплексирования: несколько Python-процессов не смогли бы делить UART.
Router также обеспечивает устойчивость к перезапускам контейнеров. Иначе каждый рестарт требовал бы повторного handshaking с MCU.
Плюс — независимость от языка. Хотите писать не на Python, а на другом ЯП? Реализуйте MsgPack-клиент к роутеру. MCU всё равно — он общается по RPC.
Контейнеры и сеть
App Lab запускает приложения в Docker-контейнерах. А PicoClaw и сервер статусов — на хосте. Проблема: при обновлении App Lab может измениться IP-адрес шлюза. Хардкодить — плохо.
Решение: скрипт автоопределения IP через /proc/net/route. Читаем маршрут по умолчанию, извлекаем шлюз, конвертируем из hex. Если ошибка — fallback на 172.17.0.1 (стандартный Docker bridge).
Теперь соединение устойчиво к смене адресов.
Сборка воедино
Финальный пайплайн:
- Запуск PicoClaw;
- Запуск сервера статусов;
- Перенаправление логов;
- Отправка статуса на MCU через роутер.
Создан скрипт start_picoclaw.sh с поддержкой запуска и остановки:
#!/bin/bash
stop_all() {
echo "Останавливаем..."
pkill -f "picoclaw gateway" 2>/dev/null
pkill -f state_server.py 2>/dev/null
pkill -f "tee /home/arduino/picoclaw.log" 2>/dev/null
echo "Готово"
}
start_all() {
picoclaw gateway 2>&1 | tee /home/arduino/picoclaw.log &
python3 /home/arduino/state_server.py &
echo "Всё запущено"
}
case "$1" in
stop) stop_all ;;
*) start_all ;;
esac
Добавил автозапуск через cron:
@reboot sleep 10 && /home/arduino/start_picoclaw.sh
Теперь после включения питания через 10 секунд запускаются PicoClaw и сервер статусов.
Заключение
Этот эксперимент показал, насколько эффективным может быть лёгкий ИИ-ассистент. PicoClaw — отличная альтернатива OpenClaw для простых задач. Пишу ему в Telegram, он обращается к локальной модели или в облако, выбирает решение и возвращает ответ.
Всё это работает быстро, бесшумно и с низким энергопотреблением. А LED-матрица позволяет с первого взгляда понять, занят ли помощник — можно ли задать вопрос или попросить выполнить действие, например, создать файл.
А вы пробовали PicoClaw? Делитесь впечатлениями в комментариях.