|
|
# 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-источник.
|