ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 158
Numărul 157 Numărul 156 Numărul 155 Numărul 154 Numărul 153 Numărul 152 Numărul 151 Numărul 150 Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 158
Abonamente

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

Bogdan Marcu
DevOps Engineer @ Cognizant



PROGRAMARE


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

Conferință TSM

NUMĂRUL 157 - Summertime coding

Sponsori

  • BT Code Crafters
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • GlobalLogic

INTERVIU