f1-telemetry/README.ru.md
2026-08-07 18:52:55 +03:00

141 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[English](README.md)
# F1 22 / ACC Telemetry Analyzer
Превращает сырую телеметрию круга F1 22 и Assetto Corsa Competizione в компактные Markdown-отчёты для анализа через LLM. Сырой круг — около 1М токенов; отчёты — 1–35k.
```bash
# из папки tool/
python -m telemetry technique "races/Zandvoort/Практика/zandvoort_P1_L7_74.074_ferrari.csv"
# -> races/Zandvoort/Практика/reports/zandvoort_P1_L7_74.074_ferrari_technique.md (~35k токенов)
```
Или просто двойной клик по `run-gui.bat` и кнопка **Generate report**.
## Установка
- Python 3.10+ (только стандартная библиотека — без `pip install`).
- Для GUI нужен Tk; он идёт в стандартном установщике Python на Windows/macOS. CLI работает и без него.
Скачай или склонируй репозиторий. Держи CSV-файлы телеметрии в папке на уровень выше `tool/` (см. [структуру папок](#структура-папок)).
## Что умеет
Шесть режимов. Пять строят отчёты, один переименовывает файлы. Поддерживаются CSV из F1 22 и ACC (GT3/GT4) — игра определяется автоматически из метаданных каждого файла.
| Режим | Вход | Для анализа |
|-------|------|-------------|
| `technique` | один круг | **как** едешь — точки торможения, скорости в апексах, работа газом, блокировки, расход ресурсов |
| `setup` | один круг | **что** настроено — баланс (US/OS), температуры шин, тормоза, rake и крен подвески |
| `compare` | два+ круга | **где** один круг быстрее — дельта по поворотам и накопленная, плюс детерминированный `Verdict` (с топливной поправкой) |
| `race` | папка кругов | вся гонка — темп, деградация в стинтах, износ резины, ERS по кругам (F1) |
| `profile` | папка кругов | **дёшево** (~400 токенов) тенденции пилота по каждому составу (медиана coast/lock/spin на поворот, флаги относительно сессии) + авто-выбор кругов. Универсально: повороты кластеризуются по дистанции апекса, не по индексу |
| `rename` | файлы/папка | вставить тип сессии и номер круга в имя файла (`..._74.074_...` → `..._P1_L7_74.074_...`) |
Отчёты содержат легенду с пояснением каждой колонки, а промпт анализа добавляется в конец файла автоматически — достаточно скинуть файл в LLM. Промпты доступны на RU и EN; выбирается флагом `--lang en` в CLI или переключателем языка в GUI.
**Флаги:** `--no-prompt` убирает встроенный промпт (меньше файлы для агентных конвейеров; в GUI — чекбокс **Включить промпт**). `--force` перегенерирует, даже если свежий отчёт уже есть (иначе прогон пропускается как `cached`). `--game {auto,f1,acc}` переопределяет автоопределение игры (по умолчанию `auto`).
> Оптимальный порядок: сначала `profile` — увидеть хронические тенденции и какие круги важны, затем `technique`/`setup`/`compare` только по этим кругам с `--no-prompt`.
### Отличия ACC от F1 22
Машины GT3/GT4 не имеют гибридной системы, а ACC не экспортирует настройки машины:
- Отчёты `technique` и `race` не содержат разделов DRS / ERS / MGU-K.
- Режим `setup`: экспорт настроек из ACC — все нули, поэтому таблица параметров заменяется пометкой («ACC не экспортирует сетап — анализ построен по телеметрии»); разделы, основанные на телеметрии (баланс в поворотах, шины, тормоза, подвеска), остаются.
- Топливо в **литрах** (GT), а не в кг (F1). Шины — составы Pirelli dry/wet, а не F1 C1–C5.
### Структура папок
```
Telemetry/
races/
F1 22/
Zandvoort/
Practice/ <- CSV-файлы после переименования
zandvoort_P1_L7_74.074_ferrari.csv
reports/ <- отчёты technique/setup/compare
Qualifying/
zandvoort_Q1_L3_74.897_ferrari.csv
reports/
Race/
zandvoort_R_L7_74.152_ferrari.csv
reports/
Race_race.md <- отчёт режима race
ACC/
Hungaroring/
Practice/
hungaroring_P_L1_123.702_ktm_gt4.csv
reports/
tool/ <- этот репозиторий
telemetry/
prompts/
run-gui.bat
```
## Полезное
**GUI** — двойной клик по `run-gui.bat` (или `run-gui.pyw` без окна консоли, либо `python -m telemetry gui`). Окно разделено на две вкладки — **F1 22** и **ACC** — у каждой свои независимые элементы управления и лог. Выбери режим и язык промпта (RU/EN), укажи файл/папку, нажми Generate. Диалог открывается в последней использованной папке для каждого режима отдельно. Кнопка **Rename unprocessed** добавляет тип сессии и номер круга к файлам, у которых их ещё нет, и не трогает остальные. Если игра в файле не совпадает с активной вкладкой, GUI выводит предупреждение, но продолжает работу.
**CLI** — из папки `tool/`:
```bash
python -m telemetry technique races/Zandvoort/Практика/lap.csv
python -m telemetry setup races/Zandvoort/Практика/lap.csv
python -m telemetry compare races/Zandvoort/Практика/lap_a.csv races/Zandvoort/Практика/lap_b.csv
python -m telemetry race races/Zandvoort/Гонка
python -m telemetry profile races/Zandvoort/Гонка # дешёвые тенденции по всем кругам + авто-выбор
python -m telemetry rename races/Zandvoort/Практика # или отдельные файлы
# выбор языка промпта (по умолчанию: ru)
python -m telemetry technique races/Zandvoort/Практика/lap.csv --lang en
# переопределить определение игры (по умолчанию: auto)
python -m telemetry technique ACC/races/Hungaroring/Practice/lap.csv --game acc
# агентный конвейер: убрать промпт, переиспользовать свежие отчёты
python -m telemetry technique races/Zandvoort/Практика/lap.csv --no-prompt
python -m telemetry technique races/Zandvoort/Практика/lap.csv --force # игнорировать кэш
```
Каждый прогон печатает путь к отчёту и оценку токенов:
```
C:\...\Telemetry\reports\lap_technique.md
~33834 tokens (budget 60k)
```
**Rename вставляет токены И распределяет по папкам.** Укажи папку, где лежат CSV (например, `D:\Games\Telemetry\Data\lapdata\f1_2022`) — скрипт:
- Рекурсивно сканирует все подпапки
- Читает метаданные каждого CSV (трасса, тип сессии)
- Вставляет `P1_L7` в имя файла, если там ещё нет обоих токенов
- Перемещает в `races/<трасса>/Practice|Qualifying|Race/`
- Даже уже переименованные файлы, если они лежат не там где надо, перемещаются в нужную папку
- Файл пропускается только если он УЖЕ находится именно в нужной папке
Повторный запуск безопасен — файлы уже на месте не трогаются.
## Входной формат
Телеметрия F1 22 (UDP) или ACC, экспортированная в CSV (F1 22 тестировалось на [F1Laps](https://www.f1laps.com)). UTF-8, 108 каналов, один файл = один круг (F1 22 — ≈1800 строк/круг при ≈29 Гц; круги ACC плотнее, ~14k строк — отчёты остаются компактными за счёт адаптивного ресэмплинга). Для режима `race` сложи все круги гонки в одну папку. Формат CSV одинаков у F1 22 и ACC; игра определяется из поля `Game` в метаданных каждого файла.
## Для разработчиков
Чистый Python на стандартной библиотеке. Конвейер: `parser` → `segments` (+ `corner_metrics`) → `resample` → `report_*`. См. [ARCHITECTURE.ru.md](ARCHITECTURE.ru.md).
```bash
cd tool
python -m pytest -q # прогнать тесты
python -m telemetry gui # запустить GUI
```
Новый режим: добавь `telemetry/report_<mode>.py` с функцией `generate(...) -> (abs_path, tokens)` и одну строку в `telemetry/__main__.py`. Парсер, детекция поворотов, адаптивная трасса и общие блоки отчётов переиспользуются.
## Благодарности
Сделано для разбора личных хотлапов в F1 22 и ACC. Формат экспорта телеметрии — [F1Laps](https://www.f1laps.com). Телеметрия в игре записывается через Telemetry Tool от Iasione.
## Лицензия
MIT — см. [LICENSE](LICENSE).