You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MAI/docs/superpowers/specs/2026-06-29-docker-offline-g...

71 lines
3.1 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Docker Offline GPU + Proto UDP Design
## Goal
Упаковать `fpv_tracker_optimized` в один офлайн GPU-контейнер, который может работать с live/video-источниками и переключаемыми backend'ами управления, включая новый испытательный UDP-протокол.
## Scope
- Один Docker-образ для runtime проекта.
- Запуск без интернета после сборки.
- Поддержка `camera`, `rtsp`, `udp`, `video` через переменные окружения.
- Поддержка backend'ов `json`, `mavlink`, `msp`, `proto_udp`.
- Возможность включать и выключать испытательный протокол без смены образа.
## Architecture
### Runtime packaging
- Базовый образ: CUDA runtime + Python.
- Все Python-зависимости ставятся на этапе сборки.
- В образ копируются код проекта, модель `best.pt` и локальная реализация `BYTETracker`.
- Запуск идет через entrypoint-скрипт, который настраивает runtime через env.
### Configuration model
- Существующие значения в `config.py` и `config_intercept.py` остаются как дефолты.
- Для контейнера добавляется слой env-overrides, чтобы не редактировать код под каждый запуск.
- Переключаемые параметры:
- источник видео;
- путь к модели;
- режим отображения/записи;
- backend автопилота;
- параметры испытательного UDP-протокола.
### Protocol backend
- Новый backend в `autopilot_bridge.py`: `proto_udp`.
- Он сериализует состояние цели в фиксированный бинарный UDP-пакет и отправляет на заданный `host:port`.
- Если цели нет, поля пакета передаются нулевыми согласно протоколу.
## Protocol mapping
Сообщение `нейросеть -> блок`:
- `descriptor`: `1`, `uint8`
- `object_id`: `1..255`, `uint8`
- `target_state`: `0..3`, `uint8`
- `offset_y_px`: `int16`
- `offset_x_px`: `int16`
- `offset_y_pct`: `int8`
- `offset_x_pct`: `int8`
- `bbox_area_pct`: `uint8`
Порядок полей фиксированный. Для упаковки используется little-endian бинарный формат.
## Docker artifacts
- `Dockerfile`
- `.dockerignore`
- `requirements-docker.txt`
- `docker-compose.yml`
- `docker/entrypoint.sh`
- `README_docker.md`
## Verification
- Unit-тесты для упаковки UDP-пакета и выбора backend'а.
- Unit-тесты для env-overrides.
- `python -m compileall` по измененным Python-файлам.
- Проверка синтаксиса compose/config файлов локально без сетевых шагов runtime.