Skip to content
raven461Public
forked from Ferum93/OpenGrall

About

OpenSource framework для робота с LLM

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Latest commit

 

History

62 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🤖 OpenGrall — Фреймворк для эффективной интеграции ИИ в управление роботом

License Python Status

⚠️ Официальная информация

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, которая имеет право вето на любую опасную команду.


🎯 Почему OpenGrall, а не просто скрипт с ChatGPT?

Типичная проблема DIY-роботов Решение в OpenGrall
Скрипт: ручная интеграция каждого модуля, написание драйверов для сенсоров. OpenGrall: модульная архитектура «из коробки». Подключаете сенсор к серверу, описываете его в GRALL_SELF.md — и он уже в системе.
Замирание робота: LLM думает 2 секунды — робот стоит. Асинхронная память сенсоров: Агент принимает решение на основе последних валидных данных, не дожидаясь медленных сенсоров.
Перегрузка контекста: Сырые данные лидара (тысячи точек) сжигают токены. Семантическая компрессия: Данные сжимаются в осмысленные строки с указанием веса и возраста.
Отказ сенсора: Камера ослеплена солнцем — робот в ступоре. Динамическое доверие: Система автоматически снижает вес «сломанного» сенсора и опирается на то, что работает.
Зависимость от облака: Нет интернета — робот глух. Полностью локальный режим: Qwen 2.5 1.5B, VLM и Vosk работают офлайн на смартфоне или Raspberry Pi.
Робот не понимает, почему он так поступил. Объяснимый ИИ: Каждое действие сопровождается полем reasoning.

🧠 Гибкая LLM-архитектура: «Пилот» и «Инженер по требованию»

OpenGrall умеет работать в двух режимах, переключаясь между ними только когда это нужно.

Режим Когда активен Задача Контекст
Пилот Всегда по умолчанию Управление роботом в реальном времени Сенсоры, диалог, текущая задача
Инженер По явному запросу пользователя или при необходимости облачных инструментов Разработка, отладка, генерация кода Файлы проекта (GRALL_SELF.md, config.py)

Как это работает:

  1. Робот работает в режиме Пилота, используя локальную модель (или облачную, если локальной нет).
  2. Вы говорите: «Гралл, найди драйвер манипулятора и адаптируй под нашу платформу».
  3. Агент переключается в режим Инженера, выполняет задачу (поиск, генерация кода, правка файлов).
  4. После завершения агент возвращается в режим Пилота.

Инженер не работает в фоне. Он активируется точечно, не нагружая систему и не мешая основному циклу навигации.


🏗️ Модульная архитектура

// 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) ничего не знает о физике вашего робота. Он знает только:

  1. Габариты и способ передвижения (из GRALL_SELF.md).
  2. Список доступных действий (инструменты).
  3. Данные, которые приходят в SensorMemory об окружении.

📦 Рекомендованные сенсоры

Агент способен работать даже с одним единственным датчиком, но для полного раскрытия потенциала мы рекомендуем:

Сенсор Роль Альтернативы
Лидар Точная геометрия пространства Ультразвуковые дальномеры (HC-SR04)
Камера + VLM Визуальное понимание (что это за объект) YOLO + CLIP
Микрофон + Динамик Голосовое общение Кнопка / Чат в Telegram

🚀 Быстрый старт (Запуск на ПК без железа)

  1. Клонируем репозиторий:

    git clone https://github.com/Ferum93/OpenGrall.git && cd OpenGrall

  2. Устанавливаем зависимости:

    pip install -r requirements.txt

  3. Устанавливаем и запускаем Ollama:

    Установите Ollama с официального сайта: https://ollama.com

    Затем загрузите любую модель, подходящую под ваши ресурсы:

    Для слабых устройств (4+ ГБ RAM):

    ollama pull qwen2.5:1.5b

    Для средних устройств (8+ ГБ RAM):

    ollama pull llama3.2:3b

    Для мощных ПК (16+ ГБ RAM):

    ollama pull gemma2:9b

    Вы также можете использовать любую русскоязычную модель,

    например, saiga_llama3 или другие доступные на Hugging Face.

  4. Укажите модель в config.py:

    LLM_MODEL = "qwen2.5:1.5b" # или llama3.2:3b, gemma2:9b, saiga_llama3 и т.д.

  5. Запускаем сервер (в первом терминале):

    python server_v7.py

  6. Запускаем агента (во втором терминале):

    python agent_v5.py

Агент автоматически создаст в Ollama кастомную модель grall-robot со всеми инструкциями на основе выбранной вами базовой модели.


☁️ Продвинутый сценарий: запуск с облачной LLM

Если у вас слабое локальное железо (например, 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).

Как это работает:

  1. Вы арендуете инстанс с GPU на RunPod, Vast.ai или другом сервисе.
  2. Разворачиваете там любую LLM с поддержкой OpenAI API (например, Llama-3.3-70B-Instruct).
  3. В config.py указываете URL вашего инстанса и API-ключ.
  4. OpenGrall автоматически переключается на облачную модель, используя её как «Пилота».

Пример конфигурации для арендованного инстанса:

config.py

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 берёт на себя всю логику взаимодействия с сенсорами и исполнения команд.


📖 Ключевые модули

⏳ SensorMemory (Асинхронная память)

В отличие от ROS, где узлы ждут друг друга, в OpenGrall каждый сенсор работает в своём темпе. SensorMemory хранит последнее валидное значение от каждого источника. Агент берёт данные прямо сейчас, не дожидаясь отстающих.

⚖️ WeightCalculator (Иммунная система)

Каждый сенсор имеет вес, который меняется в реальном времени. Лидар загрязнился? Вес падает. VLM ослеплён? Вес падает. Данные устарели? Вес затухает. Агент автоматически опирается на те сенсоры, которым сейчас можно доверять.

📚 EpisodicMemory (Обучение у человека)

Робот запоминает инструкции. Спросили: «Где пульт?», ответили: «На столике». Через неделю в похожей ситуации робот вспомнит и поедет к столику сам, не переспрашивая.

👁️ Прецизионное зрение VLM (focus_on)

VLM научилась фокусироваться на конкретном объекте. Инструмент focus_on(target) возвращает смещение в градусах, дистанцию и уверенность. Используется для:

  • Режима «Follow me» (следование за человеком).
  • Возврата на док-станцию по QR-коду.
  • Будущего захвата объектов манипулятором.

💾 Файловые инструменты и автобэкапы

Робот может читать, создавать и редактировать файлы проекта (write_file, read_file, apply_patch). Перед каждой правкой автоматически создаётся бэкап в .backups.


🧠 LLM как универсальный «арбитр» противоречивых данных

Проблема классической робототехники:
Десятилетиями инженеры полагались на один максимально точный (и дорогой) сенсор. Если данных было несколько, их слияние требовало сложнейших алгоритмов (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 и бессонных ночей.

About

OpenSource framework для робота с LLM

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages