OpenGrall — это альфа-версия, написанная на чистом Python. Вся достоверная информация о проекте находится только здесь и в официальной статье на Хабре.
Мы НЕ публиковали:
- Версию 2.0 или 2.1
- Пакет
opengrallв PyPI - Код на C++ с Python-биндингами
- Анонсы поддержки Windows в версии 2.1
Если вы видите статьи с примерами кода вроде from opengrall import Robot
или упоминаниями «OpenGrall 2.0 на C++» — это фейковые публикации,
сгенерированные контент-фермами без нашего участия.
Один мозг, много тел.
AI-powered robotics framework / LLM Robot / Voice-controlled robot
OpenGrall — это модульная платформа для создания автономных роботов, управляемых большими языковыми моделями (LLM). Фреймворк не привязан к конкретной платформе: он одинаково хорошо работает на колёсной тележке, гексаподе или квадрокоптере.
Ключевая идея: LLM — это мозг (стратег), а не контроллер. Она говорит «что делать», а не «как крутить моторы». Исполнение делегируется TinyML на ESP32, которая имеет право вето на любую опасную команду.
| Типичная проблема DIY-роботов | Решение в OpenGrall |
|---|---|
| Скрипт: ручная интеграция каждого модуля, написание драйверов для сенсоров. | OpenGrall: модульная архитектура «из коробки». Подключаете сенсор к серверу, описываете его в GRALL_SELF.md — и он уже в системе. |
| Замирание робота: LLM думает 2 секунды — робот стоит. | Асинхронная память сенсоров: Агент принимает решение на основе последних валидных данных, не дожидаясь медленных сенсоров. |
| Перегрузка контекста: Сырые данные лидара (тысячи точек) сжигают токены. | Семантическая компрессия: Данные сжимаются в осмысленные строки с указанием веса и возраста. |
| Отказ сенсора: Камера ослеплена солнцем — робот в ступоре. | Динамическое доверие: Система автоматически снижает вес «сломанного» сенсора и опирается на то, что работает. |
| Зависимость от облака: Нет интернета — робот глух. | Полностью локальный режим: Qwen 2.5 1.5B, VLM и Vosk работают офлайн на смартфоне или Raspberry Pi. |
| Робот не понимает, почему он так поступил. | Объяснимый ИИ: Каждое действие сопровождается полем reasoning. |
OpenGrall умеет работать в двух режимах, переключаясь между ними только когда это нужно.
| Режим | Когда активен | Задача | Контекст |
|---|---|---|---|
| Пилот | Всегда по умолчанию | Управление роботом в реальном времени | Сенсоры, диалог, текущая задача |
| Инженер | По явному запросу пользователя или при необходимости облачных инструментов | Разработка, отладка, генерация кода | Файлы проекта (GRALL_SELF.md, config.py) |
Как это работает:
- Робот работает в режиме Пилота, используя локальную модель (или облачную, если локальной нет).
- Вы говорите: «Гралл, найди драйвер манипулятора и адаптируй под нашу платформу».
- Агент переключается в режим Инженера, выполняет задачу (поиск, генерация кода, правка файлов).
- После завершения агент возвращается в режим Пилота.
Инженер не работает в фоне. Он активируется точечно, не нагружая систему и не мешая основному циклу навигации.
// open_grall/
// ├── core/ # Ядро: SensorMemory, WeightCalculator, ContextBuilder
// ├── sensors/ # Абстракции сенсоров (легко добавить свой)
// ├── memory/ # Память: Диалоги, Маршруты, Эпизоды (инструкции человека)
// ├── vision/ # Зрение: VLM-клиент, Визуальная память объектов
// ├── orchestration/ # Инструменты: 22+ действий (движение, речь, файлы, код)
// ├── agents/ # LLM-клиенты: Ollama (локальные), YandexGPT (облако)
// ├── GRALL_SELF.md # Самоописание робота (габариты, сенсоры, команды)
// ├── config.py # Единый конфигурационный файл
// ├── agent_v5.py # Главный класс робота (мозг)
// └── server_v7.py # WebSocket сервер (нервная система)
Главный принцип: Агент (agent_v5.py) ничего не знает о физике вашего робота. Он знает только:
- Габариты и способ передвижения (из
GRALL_SELF.md). - Список доступных действий (инструменты).
- Данные, которые приходят в
SensorMemoryоб окружении.
Агент способен работать даже с одним единственным датчиком, но для полного раскрытия потенциала мы рекомендуем:
| Сенсор | Роль | Альтернативы |
|---|---|---|
| Лидар | Точная геометрия пространства | Ультразвуковые дальномеры (HC-SR04) |
| Камера + VLM | Визуальное понимание (что это за объект) | YOLO + CLIP |
| Микрофон + Динамик | Голосовое общение | Кнопка / Чат в Telegram |
-
Клонируем репозиторий:
git clone https://github.com/Ferum93/OpenGrall.git && cd OpenGrall
-
Устанавливаем зависимости:
pip install -r requirements.txt
-
Устанавливаем и запускаем Ollama:
Установите Ollama с официального сайта: https://ollama.com
ollama pull qwen2.5:1.5b
ollama pull llama3.2:3b
ollama pull gemma2:9b
-
Укажите модель в
config.py:LLM_MODEL = "qwen2.5:1.5b" # или llama3.2:3b, gemma2:9b, saiga_llama3 и т.д.
-
Запускаем сервер (в первом терминале):
python server_v7.py
-
Запускаем агента (во втором терминале):
python agent_v5.py
Агент автоматически создаст в Ollama кастомную модель grall-robot со всеми инструкциями на основе выбранной вами базовой модели.
Если у вас слабое локальное железо (например, Raspberry Pi или Orange Pi Zero) или вы просто хотите использовать модель гигантского размера (Llama 3 70B/405B, DeepSeek-V3), OpenGrall позволяет легко подключиться к облачным провайдерам.
Поддерживаемые провайдеры:
- YandexGPT — встроенный поиск в интернете, отличный русский язык.
- DeepSeek (в будущем) — OpenAI-совместимый API, глобальная доступность, низкая цена.
- Любой провайдер с OpenAI-совместимым API (Groq, Together.ai, Fireworks.ai, арендованный инстанс на RunPod или Vast.ai).
Как это работает:
- Вы арендуете инстанс с GPU на RunPod, Vast.ai или другом сервисе.
- Разворачиваете там любую LLM с поддержкой OpenAI API (например,
Llama-3.3-70B-Instruct). - В
config.pyуказываете URL вашего инстанса и API-ключ. - OpenGrall автоматически переключается на облачную модель, используя её как «Пилота».
Пример конфигурации для арендованного инстанса:
CLOUD_LLM_PROVIDER = "openai_compatible" # или "yandex" CLOUD_LLM_URL = "https://your-runpod-instance.runpod.ai/v1" CLOUD_LLM_API_KEY = "your-api-key" CLOUD_LLM_MODEL = "meta-llama/Llama-3.3-70B-Instruct"
Таким образом, даже на самом слабом устройстве вы получаете интеллект 70B+ модели, а OpenGrall берёт на себя всю логику взаимодействия с сенсорами и исполнения команд.
В отличие от ROS, где узлы ждут друг друга, в OpenGrall каждый сенсор работает в своём темпе. SensorMemory хранит последнее валидное значение от каждого источника. Агент берёт данные прямо сейчас, не дожидаясь отстающих.
Каждый сенсор имеет вес, который меняется в реальном времени. Лидар загрязнился? Вес падает. VLM ослеплён? Вес падает. Данные устарели? Вес затухает. Агент автоматически опирается на те сенсоры, которым сейчас можно доверять.
Робот запоминает инструкции. Спросили: «Где пульт?», ответили: «На столике». Через неделю в похожей ситуации робот вспомнит и поедет к столику сам, не переспрашивая.
VLM научилась фокусироваться на конкретном объекте. Инструмент focus_on(target) возвращает смещение в градусах, дистанцию и уверенность. Используется для:
- Режима «Follow me» (следование за человеком).
- Возврата на док-станцию по QR-коду.
- Будущего захвата объектов манипулятором.
Робот может читать, создавать и редактировать файлы проекта (write_file, read_file, apply_patch). Перед каждой правкой автоматически создаётся бэкап в .backups.
Проблема классической робототехники:
Десятилетиями инженеры полагались на один максимально точный (и дорогой) сенсор. Если данных было несколько, их слияние требовало сложнейших алгоритмов (Kalman, SLAM).
Решение OpenGrall:
Мы не пишем алгоритмы слияния. Мы просто рассказываем LLM всё, что видим, даже если это противоречивая информация с плавающей достоверностью. LLM сама выступает арбитром.
Пример с ультразвуковым сонаром за $2:
Вы спаяли 3 микрофона и динамик. Модуль публикует в SensorMemory строку: room 4.5m×6.2m, exit 45° 0.9m.
LLM мгновенно сопоставляет это с данными лидара и VLM и приходит к выводу: «Я в комнате 4.5×6.2 метра. Выход справа-спереди. Поеду проверю».
Добавление любого нового сенсора (даже самого «размытого») делает робота экспоненциально умнее.
Мы используем термины, которые люди вводят в поисковиках и AI-чатах:
"Robot with ChatGPT", "LLM Robot framework", "Voice-controlled robot", "Autonomous robot", "Подключить ChatGPT к роботу", "Робот с ИИ на Python", "Ollama robot", "ROS alternative LLM".
Apache License 2.0. Подробности в файле LICENSE.
Создано с помощью DeepSeek и бессонных ночей.