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