TSM - Lecția principală: o mașină nu e doar o mașină

Rareș Lemnariu - Technical Lead @ Centrul de Inginerie Bosch Cluj


Bosch Future Mobility Challenge (BFMC) a evoluat de la un hackathon local inițiat de către Centrul de Inginerie Bosch din Cluj la un program de dezvoltare pe termen lung, devenind unul dintre cele mai mari concursuri de acest fel organizat de Bosch la nivel global. La baza concursului stau trei concepte principale:

Participanții sunt provocați să dezvolte nu doar algoritmi care permit modelelor de mașini la scară 1/10 să navigheze autonom în medii complexe, asemănătoare orașelor reale, ci și să "construiască" un vehicul complet, acoperind cât mai multe aspecte ale acestuia (evident, la o scară și complexitate redusă). Competiția nu se concentrează exclusiv pe "computer vision", chiar dacă aceasta este o componentă majoră, ci include și:

Kitul de bază pentru participarea la concurs nu este doar un set hardware de pornire, ci include și codul de bază pentru interacțiunea și controlul mașinii, API-uri pentru comunicarea cu infrastructura, servere simulate de infrastructură, aplicații de monitorizare a mașinii și documentații extensive. Studenții sunt încurajați să modifice kitul, atât hardware (în limita a 1000 Euro), cât și software, întreg codul furnizat fiind open source.

Mașinuța efectivă este formată dintr-un computer central (Raspberry Pi) gândit să preia funcțiile autonome, un microcontroller (STM32) pentru interacțiunea cu hardware-ul mașinii, adică motoarele și senzorii, un motor de tip brushless pentru controlul vitezei mașinii, un motor pentru viraj, o cameră, o placă de distribuție a curentului și alți senzori importanți.

Gestionarea eficientă a datelor și comunicarea între procese sunt fundamentale în orice proiect de tip real-time. De asemenea, se știe că acestea sunt prea puțin exersate în facultăți și că studenții nu au lucrat la proiecte de amploare unde să vadă cu adevărat importanța lor. În acest context, am proiectat o arhitectură model bazată pe scalabilitate, viteză de răspuns a sistemului, testabilitate și capacitate de a prioritiza execuția taskurilor în funcție de urgența lor, folosind module de multiprocessing, multithreading, Queues, Pipes și SharedMemory din Python.

Arhitectura sistemului este structurată în jurul a patru cozi (Queues): Critical, Warning, General și Configuration, fiecare deservind niveluri diferite de urgență ale mesajelor. Procesul central, Gateway, gestionează aceste cozi cu o prioritate bine definită. Mesajele sunt tratate în funcție de canalul pe care vin, asigurându-se că cele mai importante sunt procesate imediat. Configurațiile de mesaje, definite într-un fișier de configurare includ detalii precum tipul și proprietarul mesajului, facilitând astfel subscrierea sau dezabonarea la anumite mesaje prin intermediul cozii de Configuration de către alte procese/threaduri. Această abordare modulară permite adăugarea rapidă și eficientă a noilor module sau teste fără a perturba funcționarea normală a sistemului.

Utilizarea Queues permite definirea unor canale de comunicare clar delimitate, optimizând gestionarea mesajelor fără a interfera cu procesele emitente. Pipes sunt folosite pentru a direcționa mesajele direct către procesele abonate, eliminând necesitatea de a filtra mesajele printr-o coadă comună, ceea ce îmbunătățește semnificativ eficiența procesării.

În plus, SharedMemory joacă un rol crucial în menținerea coerenței datelor între procese, permițând accesul simultan la memorie până când datele respective pot fi folosite, cum ar fi în cazul unei comunicări cu un server de infrastructură, asigurând că datele rămân salvate până când conectarea la acesta este efectuată cu succes.

Pe parcursul mai multor ediții ale concursului, am identificat o problemă frecvent întâlnită de mulți studenți: superficialitatea abordată în monitorizarea sistemului, configurarea rapidă și identificarea erorilor în timp real. Pentru a aborda această problemă, am dezvoltat și oferit o interfață pe PC, inspirată de panourile de bord ale mașinilor, care simplifică și facilitează gestionarea activităților. Această interfață include de asemenea și anumite funcționalități care doresc să facă o referire la tool-ul CANalyzer, funcționalitate care să ajute customizarea imediată a vehiculului, fără să necesite modificarea în cod, compilarea și repornirea codului.

Interfața integrează panouri de monitorizare vizuală, oferind informații detaliate cum ar fi localizarea pe hartă, indicatorul de viteză, martori de bord, unghiul de viraj, eroarea față de drum și statusul bateriei, toate bazate pe datele transmise de la vehicul. În ceea ce privește partea de configurare, aceasta permite integrarea configurării avansate și în timp real. Utilizatorii pot ajusta setări precum luminozitatea și contrastul pentru senzorul de la cameră, activa sau dezactiva funcții, modifica parametrii de control al virajului și multe altele, toate într-un mod intuitiv și accesibil.

În contextul competiției, nu i-am încurajat doar pe studenți să dezvolte aplicații și sisteme de diagnoză și de control, ne-am angajat și noi să facem acest lucru, astfel că a apărut aplicația MasteriX, un instrument esențial pentru urmărirea și controlul infrastructurii, pentru a asigura că fiecare dintre cele aproximativ 30 de dispozitive performează conform așteptărilor. La originile concursului, modul nostru de urmărire a fost ca și cel al studenților: 30 de terminale deschise, fiecare cu câte o serie de printuri. În prima fază a proiectului MasteriX, scopul a fost să monitorizăm nu doar funcționalitatea individuală, ci și să integrăm toate sistemele într-un singur tablou de monitorizare. Acesta ne permite să vedem în timp real statusul semafoarelor, al dispozitivelor de localizare, dar și comportamentul pietonilor animați automat.

Pe măsură ce am progresat, interfața MasteriX a evoluat și a primit funcționalități care ne permit nu doar să observăm statusul diferitelor componente, ci și să analizăm informațiile primite direct de la vehicule. Această capacitate de analiză detaliată ne-a ajutat să generăm un heatmap al interacțiunii vehiculelor cu infrastructura, validând astfel eficacitatea modelării și simulării noastre, dar și eficiența detecțiilor și controlului vehiculelor de pe traseu. Acest proces ne-a oferit o perspectivă valoroasă asupra modului în care vehiculele răspund în diferite condiții de trafic, esențială pentru ajustarea și îmbunătățirea continuă a sistemelor noastre, dar și la direcționarea echipelor spre problemele întâmpinate de ceilalți.

Prin MasteriX, ne asigurăm că fiecare dispozitiv nu doar că își îndeplinește rolul, ci contribuie eficient la un ecosistem integrat care susține îmbunătățirea și dezvoltarea continuă în cadrul concursului nostru și nu numai. Această abordare holistică este esențială pentru depășirea provocărilor tehnice și pentru încurajarea unui mediu de testare riguros și inovator pentru toți participanții.