# RUNBOOK: запуск и эксплуатация ## 1. Назначение Этот документ нужен, чтобы новый человек мог: - понять, что делает проект; - подготовить окружение; - запустить проект локально; - запустить проект в Docker; - выбрать источник видео; - выбрать backend выдачи команд; - включить испытательный UDP-протокол. ## 2. Что делает проект Проект решает задачу сопровождения цели в видеопотоке. Базовая схема такая: 1. Видео поступает из файла, камеры, RTSP или UDP. 2. `YOLO` ищет объект. 3. `ByteTrack` ведет ID трека. 4. `Kalman` и `KLT` сглаживают движение и удерживают цель при кратких провалах детекции. 5. `guidance.py` строит экранную точку наведения и управляющие команды. 6. `autopilot_bridge.py` отправляет команды наружу. ## 3. Минимальные требования ### Для локального запуска - Windows 10/11 или Linux - Python 3.12 - NVIDIA GPU для быстрого режима - установленный CUDA-совместимый `torch` - модель `best.pt` в корне проекта ### Для Docker - Docker Engine или Docker Desktop - для GPU: NVIDIA драйвер на хосте - для GPU: NVIDIA Container Toolkit ## 4. Структура запуска Проект не запускается через CLI-параметры. Есть два способа настройки: ### Вариант 1. Прямое редактирование файлов - `config.py` - `config_intercept.py` Этот вариант проще для локальной разработки. ### Вариант 2. Переменные окружения Используется для: - Docker - запуска из shell без правки файлов Поддерживаемые env-переменные описаны в [CONFIG_REFERENCE_RU.md](CONFIG_REFERENCE_RU.md). ## 5. Локальный запуск на Windows ### 5.1. Создание окружения Пример: ```powershell py -3.12 -m venv .venv .\.venv\Scripts\Activate.ps1 python -m pip install --upgrade pip ``` ### 5.2. Установка зависимостей CPU/GPU-зависимости проекта не сведены в отдельный локальный `requirements.txt`, поэтому ставятся вручную. Пример для CUDA 12.8: ```powershell python -m pip install torch torchvision --index-url https://download.pytorch.org/whl/cu128 python -m pip install -r requirements-docker.txt ``` Если нужен `MSP`, нужен `pyserial`. Если нужен `MAVLink`, нужен `pymavlink`. Они уже входят в `requirements-docker.txt`. ### 5.3. Проверка модели Убедитесь, что файл: ```text best.pt ``` находится в корне проекта и `MODEL_PATH` указывает на него. ### 5.4. Выбор источника В `config.py` настройте `SOURCE`. Примеры: ```python SOURCE = 0 SOURCE = "rtsp://192.168.1.10:8554/live" SOURCE = "udp://@0.0.0.0:5600" SOURCE = r"C:\videos\sample.mp4" ``` ### 5.5. Выбор backend команд В `config_intercept.py` настройте: ```python AUTOPILOT_BACKEND = "json" ``` Доступные значения: - `json` - `mavlink` - `msp` - `proto_udp` ### 5.6. Запуск ```powershell python main.py ``` ## 6. Локальный запуск на Linux Пример: ```bash python3 -m venv .venv source .venv/bin/activate python3 -m pip install --upgrade pip python3 -m pip install torch torchvision --index-url https://download.pytorch.org/whl/cu128 python3 -m pip install -r requirements-docker.txt python3 main.py ``` Для USB-камеры обычно используется: ```python CAP_BACKEND = cv2.CAP_V4L2 SOURCE = 0 ``` ## 7. Запуск без правки `config.py` через env ### Windows PowerShell ```powershell $env:FPV_SOURCE = "0" $env:FPV_MODEL_PATH = "D:\PycharmProjects\YOLOTrain\BYTETRACK\TEST\fpv_tracker_optimized\best.pt" $env:FPV_AUTOPILOT_BACKEND = "proto_udp" $env:FPV_PROTO_UDP_ENABLE = "1" $env:FPV_PROTO_UDP_HOST = "192.168.1.50" $env:FPV_PROTO_UDP_PORT = "5005" python main.py ``` ### Linux bash ```bash export FPV_SOURCE=0 export FPV_MODEL_PATH=/path/to/best.pt export FPV_AUTOPILOT_BACKEND=proto_udp export FPV_PROTO_UDP_ENABLE=1 export FPV_PROTO_UDP_HOST=192.168.1.50 export FPV_PROTO_UDP_PORT=5005 python3 main.py ``` ## 8. Docker-запуск ### 8.1. Что уже упаковано Образ включает: - Python 3 - CUDA runtime - `torch` - `torchvision` - `ultralytics` - `opencv` - `pymavlink` - `pyserial` - код проекта - `best.pt` ### 8.2. Сборка ```bash docker compose build ``` После сборки интернет для старта контейнера не нужен. ### 8.3. Запуск ```bash docker compose up ``` ### 8.4. Изменение режима запуска Проще всего править `environment` в `docker-compose.yml`. Ключевые параметры: - `FPV_SOURCE` - `FPV_AUTOPILOT_BACKEND` - `FPV_PROTO_UDP_ENABLE` - `FPV_PROTO_UDP_HOST` - `FPV_PROTO_UDP_PORT` - `FPV_SHOW_OUTPUT` - `FPV_SAVE_INFER_VIDEO` ### 8.5. Примеры #### Камера ```yaml FPV_SOURCE: "0" ``` #### RTSP ```yaml FPV_SOURCE: "rtsp://192.168.1.10:8554/live" ``` #### UDP-видео ```yaml FPV_SOURCE: "udp://@0.0.0.0:5600" ``` #### Видео-файл внутри контейнера Смонтируйте каталог с видео и укажите: ```yaml FPV_SOURCE: "/data/input/test.mp4" ``` ## 9. Важные замечания по Docker и камере ### Linux Для прямой камеры часто нужно явно пробросить устройство: ```yaml devices: - /dev/video0:/dev/video0 ``` ### Windows Docker Desktop Обычная webcam часто недоступна напрямую Linux-контейнеру. На Windows лучше использовать: - RTSP-источник - UDP-источник - внешний capture-источник, доступный как сеть ## 10. Выбор backend выдачи команд ### `json` Самый простой режим. Что делает: - записывает текущее управляющее состояние в `autopilot_cmd.json` Когда использовать: - отладка - интеграция с внешним процессом через файл ### `mavlink` Что делает: - отправляет команды по MAVLink Что нужно: - доступный endpoint - `pymavlink` ### `msp` Что делает: - отправляет RC-команды по MSP Что нужно: - COM-порт или `/dev/ttyUSB0` - `pyserial` ### `proto_udp` Что делает: - отправляет бинарный UDP-пакет по вашему испытательному протоколу Подробности: [PROTOCOL_UDP_RU.md](PROTOCOL_UDP_RU.md) ## 11. Какие файлы появляются после запуска - `out_infer_*.mp4` — видео с отрисовкой - `track_log_*.csv` — покадровый лог логики выбора цели - `track_summary_*.json` — итоговая сводка - `guidance_state.json` — состояние guidance - `autopilot_cmd.json` — внешний файл команд для backend `json` ## 12. Что проверять после первого запуска 1. Открывается ли источник видео. 2. Загружается ли модель `best.pt`. 3. Есть ли детекции на экране. 4. Создается ли `out_infer_*.mp4`, если включена запись. 5. Создается ли `guidance_state.json`, если включен export. 6. Доходит ли UDP/MAVLink/MSP до вашей внешней системы. ## 13. Рекомендуемый порядок первого ввода в эксплуатацию 1. Запуск на видеофайле. 2. Проверка логов и `out_infer_*.mp4`. 3. Запуск с backend `json`. 4. Проверка `guidance_state.json` и `autopilot_cmd.json`. 5. Переключение на `proto_udp`. 6. Только после этого переход на live-источник.