mirror of
https://github.com/Horizontal42/f1-telemetry.git
synced 2026-11-10 15:22:03 +03:00
141 lines
11 KiB
Markdown
141 lines
11 KiB
Markdown
[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).
|