# 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.