TSM - IoT în gaming: procesarea informațiilor în F1 SimRacing

Bogdan Marcu - DevOps Engineer @ Cognizant


Internetul obiectelor (IoT) desemnează, în sens larg, orice dispozitiv care poate fi conectat fără fir la internet. În forma sa actuală, IoT se referă la obiectele inteligente dotate cu senzori, software și tehnologii care le permit să comunice date, fie pentru a oferi informații utilizatorilor, fie pentru a declanșa automat acțiuni. Dacă în trecut conexiunile se realizau în principal prin Wi-Fi, astăzi rețelele moderne precum 5G oferă capacitatea de a transmite volume mari de date rapid și eficient, aproape oriunde.

În ultimii ani, piața simulatoarelor de curse a cunoscut o expansiune accelerată, alimentată de interesul tot mai mare pentru sim racing și eSports. Potrivit unui raport recent, valoarea globală a pieței simulatoarelor de curse a fost estimată la 0,45 miliarde USD în 2023, cu o prognoză de creștere până la 1,9 miliarde USD în 2033, având o rată anuală compusă de creștere (CAGR) de 15,49%.

Această evoluție este susținută de adoptarea pe scară largă a tehnologiilor avansate precum platforme de mișcare, volane cu feedback de înaltă fidelitate și căști VR, care oferă o experiență de joc realistă și captivantă. În paralel, popularitatea competițiilor de eSports bazate pe jocuri de curse precum Gran Turismo sau F1 a atras un număr tot mai mare de jucători și spectatori, consolidând poziția sim racingului ca formă legitimă de competiție digitală.

Simulatoarele nu mai sunt doar un hobby pentru pasionați, ci au devenit instrumente de antrenament pentru piloți profesioniști și platforme de divertisment în centre comerciale și evenimente internaționale. Această tendință reflectă o transformare profundă în modul în care cursele auto sunt experimentate și învățate în era digitală.

Cu aceste evoluții în minte atât în ceea ce privește tehnologia IoT, cât și creșterea spectaculoasă a sim racingului și a eSports-ului, devine evident că integrarea unor sisteme inteligente în simulatoare nu mai este doar o opțiune, ci o necesitate. Unul dintre cele mai promițătoare domenii de aplicare este detecția automată a accidentelor în cadrul jocului simulator F1 2023, folosind o arhitectură IoT.

Un astfel de sistem ar putea colecta date în timp real de la senzori montați pe volan, pedale, scaun și chiar pe platforma de mișcare, pentru a identifica bruscări, opriri neașteptate sau deviații de la traiectoria normală. Aceste date ar fi transmise către un modul de analiză care, folosind reguli predefinite, ar putea detecta un posibil accident și ar reacționa corespunzător fie prin alertarea utilizatorului.

Această abordare nu doar că sporește realismul experienței, dar oferă și un cadru ideal pentru testarea și perfecționarea sistemelor de siguranță utilizate în cursele reale de Formula 1.

Design

În ceea ce privește designul, am decis sa urmez o arhitectură de microservicii scalabilă și asincronă, construită cu ajutorul tehnologiei Kafka pentru procesul de streaming și implementată în JavaScript. La baza acestui sistem se află senzorul oficial F1 2023, care transmite metrici în timp real prin protocolul UDP către componenta Gateway. Această componentă are ca scop recepționarea tuturor pachetelor transmise de senzorul din joc, pachete care conțin informații precum detalii despre sesiune, detalii despre mișcare, detalii despre mașina pilotului, sortarea acestor pachete în funcție de scop și publicarea lor în topicurile specifice de Kafka. Ulterior acestor pași, datele o să fie consumate de către microservicii specifice precum cel de telemetrie în direct și cel de detectare al accidentelor.

Implementare

Kafka

În cadrul arhitecturii aplicației, Kafka joacă un rol central în gestionarea fluxurilor de date în timp real. Am definit două topicuri principale: f1.telemetry și f1.motion, fiecare responsabil pentru un tip specific de informații provenite din simularea F1. Kafka este administrat cu ajutorul Zookeeper, care se ocupă de coordonarea și menținerea stării clusterului Kafka. Pentru a monitoriza și interoga cozile de mesaje din aceste topicuri, am utilizat o interfață grafică (UI) dedicată, care ne permite să facem poll pe topicuri, să vizualizăm mesajele și să verificăm în timp real dacă datele sunt procesate corect de microservicii.

Gateway

O dată cu receptarea pachetelor prin intermediul protocolului UDP am folosit documentația oficială a senzorului împreună cu o librărie creată de raweceek-temeletry numită f1-23-udp găsită pe GitHub care ne ajută să adaptăm pachetele de bytes la obiecte JSON care apoi pot fi publicate pe topicurile de Kafka. Am creat un microserviciu node.JS cu un producer de Kafka și serverul importat cu ajutorul librăriei și am stabilit două rute: carTelemetry și motion. Pentru ruta de carTelemetry, am ales să public mesajele în topicul "f1.telemetry", iar pentru ruta de motion am ales topicul "f1.motion". Odată cu configurarea acestor rute, pentru deploymentul acestei aplicații am decis să folosesc un RaspberryPI. Aplicația este configurată ca un serviciu systemd, ceea ce îi permite să pornească automat la inițializarea sistemului (boot-up).

Setarea senzorului

Pentru a putea trimite pachete prin protocolul UDP am pregătit consola de jocuri cu jocul F1 2023 cu modul de joc Time Trial. Odată ajunși în garaj am navigat către meniul de setări și am selectat "Telemetry Settings".

Pentru a putea atinge scopul nostru am setat UDP Telemetry pe "On", am setat adresa IP a RaspberryPI-ul configurat anterior la care o să trimitem toate pachetele de telemetrie și portul serverului care ascultă pentru pachetele UDP.

Crash Detection

Odată cu popularea celor două topice putem trece la crearea microserviciilor de tip consumer care se conectează la streamul de date specific. Pentru micro serviciul de crash-detection am conectat consumerul de Kafka la topicul f1.motion. Acest topic ne oferă informații precum poziția mașinii pe hartă pe axele x, y și z , direcția, velocitatea sau forțele G asupra mașinii. Cu aceste date transmise în timp real putem să stabilim algoritmul cu care detectăm accidentele. Algoritimul pe care l-am găsit se bazează pe stabilirea unor praguri în cazul velocității și al forțelor G. Dacă aceste praguri sunt depășite de influxul de date atunci cel mai probabil a avut loc un accident. Pentru a calcula aceste valori s-au aplicat următoare formule matematice care se bazează pe distanța euclidiană:

Limitele maxime admise pentru valorile obținute sunt: 10 unități pentru forța G și 30 unități pentru velocitate.

Live Telemetry & Cockpit Dashboard

Pentru serviciul de live-telemetry am subscris la topicul de f1.telemetry unde putem găsi informații precum viteza de deplasare, RPM-ul motorului, treapta de viteză, gradul de accelerare și de frânare sau direcția volanului. Pentru a vizualiza aceste informații într-un mod și mai facil am decis crearea unui dashboard cu ajutorul ReactJS și WebSockets. Principiul este asemănător ca și în cazul microservciului de detectare al accidentelor, în care consumăm datele din topicul Kafka de f1.telemetry. Pentru a conecta interfața ReactJS la fluxul de date în timp real, am implementat un client WebSocket care se conectează direct la un server ce transmite datele din Kafka. Acest server acționează ca un intermediar între micro serviciul de procesare și dashboardul frontend, trimițând datele imediat ce sunt disponibile. Am ales WebSockets în locul unei soluții clasice cu HTTP deoarece avem nevoie de transmisie continuă și în timp real. HTTP funcționează pe principiul request-response, ceea ce ar însemna să interogăm serverul periodic (polling), introducând latență și consum inutil de resurse. În schimb, WebSocket menține o conexiune deschisă, bidirecțională, prin care serverul poate trimite date imediat ce sunt disponibile, fără ca frontendul să ceară explicit.

Următorii Pași

Următorii pași vizează crearea unui datalake care să centralizeze toate datele relevante din sesiunile de telemetrie, cu scopul de a dezvolta modele de predicție. Aceste modele vor putea simula timpii de tur în funcție de variabile precum setarea cauciucurilor, configurația mașinii sau tipul circuitului. Procesul implică colectarea și stocarea datelor brute, urmată de pre-procesarea și curățarea acestora. Ulterior, se vor aplica tehnici de machine learning pentru antrenarea modelelor, care vor fi validate și testate pentru a asigura acuratețea predicțiilor. În final, aceste modele vor fi integrate într-un sistem de simulare capabil să ofere estimări realiste ale performanței în diverse scenarii.

Concluzie

În concluzie, această arhitectură bazată pe microservicii, Kafka și WebSockets oferă o soluție scalabilă și eficientă pentru procesarea și vizualizarea datelor de telemetrie în timp real din F1 SimRacing. Prin utilizarea topicurilor f1.telemetry și f1.motion, gestionate de Zookeeper, am reușit să separăm logic fluxurile de date și să le consumăm în mod controlat. Interfața UI pentru Kafka ne-a permis să monitorizăm cozile și să validăm integritatea datelor transmise. Dashboardul ReactJS conectat prin WebSockets asigură o experiență interactivă și rapidă, reflectând fidel comportamentul mașinii în simulare. Următorul pas este extinderea sistemului printr-un datalake și integrarea de modele predictive, care să permită simularea performanței în funcție de variabile precum cauciucuri, setup sau circuit, deschizând astfel drumul către o analiză avansată și optimizare strategică în SimRacing.

Bibliografie

  1. https://www.sap.com/romania/products/technology-platform/what-is-iot.html

  2. https://www.sphericalinsights.com/reports/racing-simulator-market

  3. https://github.com/raweceek-temeletry/f1-23-udp