Skip to content

Latest commit

 

History

History
166 lines (115 loc) · 8.87 KB

File metadata and controls

166 lines (115 loc) · 8.87 KB

Запуск на роботе

🇬🇧 English version

Деплой обученной модели на Raspberry Pi и запуск детекции носков с камеры.

Деплой на RPi

Рекомендуемый путь деплоя описан в launch.md и использует встроенный CLI:

./main.py deploy rpi5

Используй эту страницу после деплоя для работы с веб-панелью, локальной детекцией и удалённым GPU-инференсом.

Ручной fallback через rsync

Если проект нужно копировать вручную, fallback-сценарий такой:

rsync -avz --exclude .venv --exclude frontend/node_modules --exclude __pycache__ --exclude .git \
  ~/work/SocksTank/ rpi5:~/sockstank/

Веб-панель управления (рекомендуемый способ)

Перед тем как использовать ssh rpi5 ниже, убедись, что host alias rpi5 резолвится на твоей dev-машине. При необходимости настрой ~/.ssh/config и /etc/hosts, как описано в infrastructure.md.

Основной способ работы с роботом — через веб-панель:

ssh rpi5
cd ~/sockstank
sudo -E nohup python3 main.py serve --model models/yolo11_best_ncnn_model --conf 0.5 > /tmp/sockstank.log 2>&1 &

Открыть в браузере: http://rpi5:8080

Веб-панель включает: живое видео с YOLO-детекцией, управление моторами, сервоприводами, LED, телеметрию (дистанция, ИК-сенсоры, температура CPU).

sudo -E необходим для доступа к камере и GPIO (флаг -E наследует пользовательский PYTHONPATH).

Запуск детекции (legacy)

Запись видео с детекцией в файл:

ssh rpi5
cd ~/sockstank
sudo -E python3 main.py detect --model models/yolo11_best_ncnn_model --conf 0.5

Параметры

Параметр По умолчанию Описание
--model auto (.pt на dev/GPU, ncnn на RPi) Путь к модели (.pt для GPU, ncnn директория для RPi)
--output detect.mp4 Выходной видеофайл
--conf 0.5 Порог уверенности (0.0–1.0). Детекции с уверенностью ниже порога игнорируются
--frames 300 Максимальное количество кадров для записи
--width 1280 Ширина кадра (px)
--height 720 Высота кадра (px)
--fps 3 Частота кадров камеры

Пример с ncnn-моделью

Если модель экспортирована в ncnn (см. тренировка):

sudo ./main.py detect --model models/yolo11_best_ncnn_model --conf 0.5  # NCNN для RPi

Удалённый инференс (GPU-сервер)

Инференс можно перенести на удалённый GPU-сервер (например, blackops с RTX 4070 SUPER — 314.8 FPS vs 14.9 FPS на RPi 5). Робот отправляет кадры по HTTP, сервер возвращает детекции.

Режимы инференса

В веб-панели (http://rpi5:8080) в секции Inference есть три кнопки:

Режим Описание
auto Если GPU-сервер онлайн — используется он, иначе fallback на локальный
local Всегда локальный инференс (NCNN на RPi)
remote Всегда удалённый инференс (ошибка если сервер недоступен)

Быстрое правило:

  • auto — основной режим на каждый день;
  • local — когда отлаживаешь путь на RPi или когда недоступны сеть/GPU-хост;
  • remote — только если ты явно хочешь принудительно использовать GPU-сервер.

Добавление GPU-сервера через UI

  1. Открыть веб-панель → секция Inference в правой колонке
  2. Нажать + Add GPU Server
  3. Заполнить форму:
    • Host — IP или hostname GPU-сервера (например 192.168.0.188)
    • Port — порт inference-сервера (по умолчанию 8090)
    • Username — SSH-пользователь
    • AuthSSH Key (путь к ключу, по умолчанию ~/.ssh/id_rsa) или Password
  4. Нажать Test для проверки подключения (покажет GPU и модель)
  5. Нажать Save для сохранения

Сервер появится в списке с индикатором статуса:

  • зелёный — online
  • оранжевый — starting
  • серый — offline

Кнопки Start / Stop запускают и останавливают inference-сервер на GPU-хосте через SSH. Кнопка × удаляет сервер из списка.

Конфигурация серверов сохраняется в gpu_servers.json.gitignore).

Запуск через CLI

# На GPU-сервере (blackops)
cd ~/work/SocksTank
python3 -m server.inference_server --port 8090  # на Linux использовать python3; автоматически выберет models/yolo11_best.pt на GPU/dev-хостах

API

Метод Эндпоинт Описание
GET /api/inference Статус инференса (режим, backend, ms)
PUT /api/inference/mode Переключить режим (auto/local/remote)
GET /api/gpu/servers Список GPU-серверов
POST /api/gpu/servers Добавить GPU-сервер
DELETE /api/gpu/servers/{host} Удалить GPU-сервер
POST /api/gpu/servers/{host}/test Проверить подключение
POST /api/gpu/servers/{host}/start Запустить inference-сервер
POST /api/gpu/servers/{host}/stop Остановить inference-сервер

Как работает детекция

  1. Камера ov5647 захватывает кадры через picamera2
  2. Каждый кадр передаётся в модель YOLO для обнаружения носков
  3. Вокруг обнаруженных носков рисуются bounding box'ы с подписью класса
  4. Обработанные кадры записываются в видеофайл detect.mp4

Просмотр результатов

Видеофайл detect.mp4 сохраняется в текущей директории на RPi. Скопировать на свой компьютер:

scp rpi5:~/sockstank/detect.mp4 .

Открыть любым видеоплеером (VLC, mpv и т.д.).

Интеграция с управлением танком

Робот управляется через car.py из комплекта Freenove. Он поддерживает несколько режимов:

  • mode_ultrasonic — обход препятствий: ультразвуковой сенсор определяет расстояние до объектов. Если < 45 см — робот сдаёт назад и поворачивает
  • mode_infrared — следование по линии: ИК-сенсоры отслеживают линию на полу. При обнаружении объекта на расстоянии 5–12 см — захват клешнёй
  • mode_clamp — управление клешнёй: подъём, опускание, захват

Веб-панель (main.py serve) уже объединяет детекцию с управлением — можно управлять роботом через браузер, видя результаты детекции в реальном времени. Полностью автономный режим (поиск + подъезд + захват без участия человека) — следующий этап разработки.


← Предыдущая README Следующая →
Запуск проекта Вернуться к README Бенчмарки инференса