Proyecto base y documentación para analizar telemetría de competición (GR Cup / SRO) y visualizar insights por sectores de pista, con IA orientada a coaching en tiempo real y post‑sesión.
- Banners rápidos (sitios oficiales)
- Descripción general
- Documento técnico (MASTERDOC)
- Pistas y mapas
- Fuentes de datos
- Proveedores de telemetría
- Cómo correr localmente
- Exportar a PDF
- GitHub del autor
- Licencia
- Créditos y referencias
- Modo IA (Gemini) y seguridad
- Entrenamiento offline y artefactos
- Uso por fuente: Demo, CSV y WebSocket
- Instalación y despliegue (PC, tablet, vehículo)
- Demostración en video (YouTube)
- Preguntas frecuentes (FAQ)
Nota: Algunos circuitos no publican mapas de pista "oficiales" de libre acceso; se incluyen páginas oficiales de mapas del recinto o configuraciones. Donde exista un PDF oficial, se enlaza.
Este repositorio acompaña la aplicación web "Race Telemetry AI Coach" (Vite) y la documentación técnica del proyecto. El objetivo es procesar telemetría (velocidad, RPM, frenos, aceleraciones, dirección, GPS, lapdist) y ofrecer:
- Segmentación por sectores S1.a/S1.b ... S3.b, coherente con los "análisis por secciones" del hackathon.
- Mapas de riesgo por sector y recomendaciones de conducción.
- Gráficas de vueltas, tiempos y eventos (frenada, aceleración, cambios de marcha).
- Integración con IA para estimar oportunidades de mejora y detectar anomalías de sensores (ECU/VBOX).
- Entrenamiento offline sobre datasets locales (∼20GB) produce artefactos ligeros por pista (ej.:
public/DataFiles/models/riskModel.json,trackModels.json). - El runtime aplica esos artefactos: pesos y umbrales por componente, normalizaciones y longitudes por pista.
- Integración generativa opcional: si defines
VITE_API_KEY, el servicioGeminipuede generar recomendaciones textuales; si no, se usa el motor de riesgo heurístico con calibración.
- Activación desde la UI:
- En el Dashboard, barra superior, botón
Configurar IA. - Pega tu clave en
Clave Geminiy pulsaGuardar. - Indicador cambia a
Gemini listo.
- En el Dashboard, barra superior, botón
- Verificación en el asistente:
- Pulsa
Analizar vuelta. Si la IA está activa, aparece el badgeFuente IA: Gemini; si no,Fuente IA: Motor de Riesgo.
- Pulsa
- Referencias de código:
- Controles de UI:
components/Header.tsx:126-147. - Detección de clave y fallback:
services/geminiService.ts:4-18ycomponents/AIAssistant.tsx:31-36. - Badge de fuente:
components/AIAssistant.tsx:59-63.
- Controles de UI:
- Seguridad:
- La clave pegada en la UI se guarda en
localStoragedel navegador y NO se sube a GitHub. - Alternativa: definir
VITE_API_KEYen el entorno del sistema o del proveedor de despliegue. - No incluyas la clave en archivos versionados.
- La clave pegada en la UI se guarda en
- Objetivo: evitar procesar ∼20GB en tiempo real y reducir falsos positivos. Se procesan offline y se exportan artefactos por pista.
- Artefactos soportados por la app:
public/DataFiles/models/riskModel.json: pesos (tire/engine/brake) y umbrales (engineHigh/engineCritical/tireWearHigh/fuel*) por pista.public/DataFiles/models/trackModels.json: normalizaciones (máximos realistas despeed/rpm/brake/steer), sectorización y longitud de vuelta.
- Carga y uso en runtime:
- Loader de modelos:
services/modelLoader.ts:65-92. - Motor de riesgo que aplica pesos/umbrales:
services/riskEngine.ts:86-95,167-182. - Precarga al cambiar de pista:
components/Dashboard.tsx:23-28.
- Loader de modelos:
- Cómo verificar que se aplican:
- Modifica
riskModel.jsonpara tu pista (ej. Barber) y recarga: el panel del asistente mostrará los nuevos pesos/umbrales y cambiarán las alertas. - Panel informativo del asistente:
components/AIAssistant.tsx:66-70.
- Modifica
- Selección de fuente en el Header:
components/Header.tsx:75-84. - Demo:
- Fuente
demousa datos simulados coherentes para mostrar UI y alertas.
- Fuente
- CSV (Barber incluido):
- Coloca tu CSV y mapping:
public/DataFiles/barber/R1_barber_telemetry_data.csvpublic/DataFiles/barber/mapping.json
- Adaptador CSV:
services/telemetryAdapter.ts:95-190. - Conversión de unidades y mapeo de columnas:
services/telemetryAdapter.ts:62-79,222-233.
- Coloca tu CSV y mapping:
- WebSocket (tiempo real desde logger/ECU):
- Adaptador WS:
services/telemetryAdapter.ts:235-260. - Conecta tu logger que emita frames con el contrato
TelemetryDataPoint.
- Adaptador WS:
- Desarrollo local:
npm installnpm run devy abrirhttp://localhost:5173/.
- Build de producción y vista previa:
npm run buildnpm run preview(servidor estático de prueba).
- Tablet del piloto (PWA/browser):
- Servir el
dist/en un servidor accesible vía Wi‑Fi del paddock/coche. - Abrir en Chrome/Safari y usar “Agregar a pantalla de inicio” (PWA) para acceso rápido.
- Fuente
wssi conectas al logger en el vehículo;csvpara reproducir sesiones.
- Servir el
- Sin “ejecutable” nativo:
- Esta app es web. No incluye
.exe/.apkpor defecto. - Opciones futuras: empaquetar con
Electron/Taurio usar un contenedor connginxpara servirdist/en dispositivos embebidos.
- Esta app es web. No incluye
- Claves y seguridad:
- Usa
Configurar IAen la UI o variables de entorno del proveedor. Evita subir claves a Git.
- Usa
- Objetivo: mostrar telemetría en vivo/reproducida, alertas de riesgo, análisis del asistente y la activación de Gemini.
- Guion sugerido:
- Inicio: Dashboard, explicar selector de fuente (
demo/csv/ws) y selector de pista. - CSV Barber: seleccionar
Source: csvy pistaBarber. Verás gauges, mapa y barra de progreso moviéndose. - Artefactos offline: mostrar panel del asistente con
Modelo de riesgo cargado para Barber(pesos/umbrales activos). - IA: pulsar
Configurar IA, pegar clave dehttps://aistudio.google.com/apikey, guardar. PulsarAnalizar vueltay mostrar el badgeFuente IA: Geminiy las recomendaciones textuales. - Alertas: provocar o explicar alertas visuales (motor/neumáticos/frenos/combustible) en
VisualAlerts. - Cierre: cambiar a otra pista con artefactos distintos (
cota) y repetir análisis para comparar.
- Inicio: Dashboard, explicar selector de fuente (
- Enlace del video:
- Pega tu URL aquí cuando esté publicado:
https://youtu.be/TU_ENLACE_DEMO - También puedes añadirlo al banner superior o a la sección “Descripción general”.
- Pega tu URL aquí cuando esté publicado:
- ¿Qué clave debo usar y dónde la obtengo?
- Es la API key de Gemini. Obténla en
https://aistudio.google.com/apikey.
- Es la API key de Gemini. Obténla en
- ¿Se sube la clave a GitHub si la pego en la UI?
- No. Se guarda en
localStoragedel navegador y no forma parte del repo. En producción usa variables de entorno (VITE_API_KEY).
- No. Se guarda en
- ¿Cómo borro la clave?
- Dashboard →
Configurar IA→ vacíaClave Gemini→Guardar; olocalStorage.removeItem('gemini_api_key')en consola.
- Dashboard →
- ¿Cómo preparo
riskModel.jsonpara una pista nueva?- Crea una entrada con
weightsythresholdscalibrados, por ejemplo:{ "mi_pista": { "weights": { "tire": 0.50, "engine": 0.28, "brake": 0.22 }, "thresholds": { "overallHigh": 0.65, "engineHigh": 105, "engineCritical": 110, "tireWearHigh": 0.92, "tireWearMedium": 0.76, "fuelCriticalPct": 0.07, "fuelHighPct": 0.12 } } } - La app aplicará estos valores en
services/riskEngine.ts:86-95,167-182.
- Crea una entrada con
- ¿Cómo uso CSV vs. WebSocket?
- CSV: coloca
public/DataFiles/<pista>/*.csvymapping.json. El adaptador está enservices/telemetryAdapter.ts:95-190. - WebSocket: conecta tu logger que emita frames con el contrato
TelemetryDataPoint(services/telemetryAdapter.ts:235-260).
- CSV: coloca
- ¿Hay ejecutable (.exe/.apk)?
- No incluido por defecto. Esta app es web (Vite/React). Puedes empaquetar con
Electron/Taurio servirdist/connginx.
- No incluido por defecto. Esta app es web (Vite/React). Puedes empaquetar con
- ¿Cómo usar sin internet en el vehículo?
- Sirve
dist/en un hotspot local (paddock/vehículo). Abre en la tablet (Chrome/Safari) y usa “Agregar a pantalla de inicio”. Fuentewspara tiempo real.
- Sirve
- ¿Compatibilidad de dispositivos?
- Navegadores modernos (Chrome 116+, Safari 16+, Edge). Pantallas 10–13" recomendadas para cockpit; modo
high/ultracontraste en exteriores.
- Navegadores modernos (Chrome 116+, Safari 16+, Edge). Pantallas 10–13" recomendadas para cockpit; modo
Revisa el documento técnico completo en raceTelemetryAi/MASTERDOC.md, con diagramas UML, diseño de BD, flujos de datos y fórmulas del motor de riesgos.
- Barber Motorsports Park: https://barberracingevents.com/
- Circuit of The Americas (COTA): https://circuitoftheamericas.com/campus-map/
- Indianapolis Motor Speedway (IMS): https://www.indianapolismotorspeedway.com/events/indy500/plan-ahead/maps-hub
- Road America: https://www.roadamerica.com/maps
- Sebring International Raceway: https://www.sebringraceway.com/track-maps/
- Sonoma Raceway: https://www.sonomaraceway.com/fans/maps/
- Virginia International Raceway (VIR): https://virnow.com/track/configurations/
Si necesitas track maps vectoriales, consulta también las secciones de "Créditos y referencias" al final.
- Serie SRO / GT World Challenge America (oficial): https://www.sro-motorsports.com/gt-world-challenge-america y https://www.sroamerica.com/
- GR Cup North America (TGRNA, oficial): https://www.grcupseries.com/ y comunicado 2025: https://pressroom.toyota.com/toyota-gazoo-racing-north-america-unveils-2025-gr-cup-series-schedule/
- Paquetes del hackathon 2025 (zip) por circuito: Barber, COTA, Indianapolis, Road America, Sebring, Sonoma, VIR.
- MoTeC (dash/logger/ECU): https://www.motec.com.au/site/what-we-do
- AIM Technologies (MX series, X‑Log, expansiones): https://www.aimtechnologies.com/mx-series/
- Bosch Motorsport (data loggers C60/C70/C80): Ejemplo C80: https://www.bosch-motorsport.com/content/downloads/Raceparts/en-GB/242692107319146635.html
- CAN bus (estándar de comunicación ECU): visión general: https://en.wikipedia.org/wiki/CAN_bus
Requisitos:
- Node.js >= 18
- npm o pnpm
Pasos:
- Instala dependencias:
npm install - Arranca desarrollo:
npm run dev - Abre
http://localhost:5173/en el navegador.
Estructura de datos sugerida (sirviendo estáticos desde public/DataFiles/):
public/DataFiles/
barber/
R1_barber_telemetry_data.csv
mapping.json
cota/
...
models/
riskModel.json
trackModels.json
config/
calibration.json
trackPaths.json
Notas:
- Los CSV pesados se colocan localmente en
public/DataFiles/<pista>/y no se versionan. - Los artefactos de modelos (
models/*.json) y configuración (config/*.json) sí deben existir para que la app cargue normalizaciones y umbrales.
- Opción 1: Extensión "Markdown PDF" de tu IDE.
- Opción 2:
pandoc(Windows):- Instala pandoc.
pandoc README.md -o README.pdfpandoc MASTERDOC.md -o MASTERDOC.pdf
- Autor: Bernardo Adolfo Gómez Montoya —
https://github.com/badolgm. - Comandos básicos (PowerShell):
git initgit add .git commit -m "docs: README y MASTERDOC iniciales"git branch -M maingit remote add origin https://github.com/TU_USUARIO/NOMBRE_REPO.gitgit push -u origin main
Este proyecto se publica bajo licencia MIT. Consulta raceTelemetryAi/LICENSE.
- SRO / GT World Challenge America (oficial): https://www.sro-motorsports.com/gt-world-challenge-america
- SRO America: https://www.sroamerica.com/
- GR Cup (oficial): https://www.grcupseries.com/
- Comunicado TGRNA 2025 (oficial): https://pressroom.toyota.com/toyota-gazoo-racing-north-america-unveils-2025-gr-cup-series-schedule/
- COTA Campus Map (oficial): https://circuitoftheamericas.com/campus-map/
- Road America Map (oficial): https://www.roadamerica.com/maps
- Sebring Track Maps (oficial): https://www.sebringraceway.com/track-maps/
- Sonoma Maps (oficial): https://www.sonomaraceway.com/fans/maps/
- VIR Configurations (oficial): https://virnow.com/track/configurations/
- IMS Maps Hub (oficial): https://www.indianapolismotorspeedway.com/events/indy500/plan-ahead/maps-hub
- Barber — sitio oficial del parque/museo: https://barberracingevents.com/ y https://www.barbermuseum.org/barber-motorsports-park/
- MoTeC — página oficial: https://www.motec.com.au/site/what-we-do
- AIM Technologies — MX Series: https://www.aimtechnologies.com/mx-series/
- Bosch Motorsport — C80 data logger: https://www.bosch-motorsport.com/content/downloads/Raceparts/en-GB/242692107319146635.html
- CAN bus — descripción general: https://en.wikipedia.org/wiki/CAN_bus