Clește premiază notele de 10. #Tehnologiacontează

Ești pasionat de tehnologie. Știm asta pentru că altfel nu ai fi aici acum. Și noi suntem pasionați de tehnologie, nu mai vorbim de Clește. Deja am stabilit cu tine un punct comun, yay! Pe planeta lui Clește, pasiunea se hrănește și se întreține constant. De aceea, Clește vrea să ii răsplătească pe cei mai muncitori și entuziasmați studenți care îi trimit proiectele lor cu vouchere si premii in bani. Gândește-te la acest roboțel ca la un colecționar de artă rară, doar că arta rară e de fapt tehnologia utilizată de studenți. I-a șoptit un porumbel virtual cu algoritmi zis și Google că studenții români sunt printre cei mai bine clasați participanți europeni la mondialele de Robotică. Atât i-a trebuit să audă. Așa a luat naștere campania lui, #Tehnologiacontează.

Clește nu a așteptat prea mult, iar Ștefan Ciprian Popescu devine cel de-al doilea student care răspunde provocării lansate cu un an în urmă. Ștefan a îmbinat utilul cu plăcutul și a creat un mini-vehicul ce se controlează singur și este capabil să se oprească la întâlnirea indicatorului STOP.
Fiecare dintre noi este atras într-un fel sau altul de automobile, dar Clește este cel mai încântat de acest proiect ingenios. Pentru amatorii de proiecte interesante sau pentru studenții în căutare de inspirație, iată aici un alt proiect de nota 10:

Ștefan a fost amabil să ne răspundă la câteva întrebări legate de proiectul lui:

Care este utilitatea proiectului tău?

Implementarea unui sistem capabil de controlul autonom al unui vehicul. În altă ordine de idei, o mașinuță care „să știe” cum să conducă pe baza liniilor de trafic și a semnului de stop.

Ce componente ai folosit?

Pentru controlul celor 4 motoare cu reductor, am utilizat modulul L298N. Acesta a fost alimentat cu ajutorul a 8 baterii de tip AA. Puntea H a fost controlată cu ajutorul unui Arduino UNO. Sistemul descris reprezintă un „Slave Device”. „Master Device”-ul este constituit dintr-un Raspberry PI4 de 4GB (alimentat de un powerbank capabil de un output de 3A/5V) și o camera video Omni Vision OV5647 (RaspiCam). Toate componentele au fost montate pe un sașiu de tip 4WD.

Ce te-a determinat să demarezi proiectul? 

Proiectul reprezintă lucrearea mea de licență, în cadrul facultății CSIE (ASE).

Cât timp a necesitat finalizarea acestuia? 

Am alocat aproximativ 2 luni proiectului, în cadrul căruia am avut și un prim prototip eșuat. Acesta avea doar 2 motoare, și nu utiliza placa Arduino UNO, controlul punții H fiind doar din partea Raspberry. Având în vedere lipsa experienței cu produsele hardware, întregul proces a fost unul de forma „trial and error”.

Ai lucrat în echipă sau pe cont propriu?

Am lucrat singur la proiect, însă răspunsurile primite pe diverse forumuri în cadrul unor greșeli au fost extrem de utile.

Descrie procesul de lucru.

Planul meu era unul relativ simplu. Sau cel puțin, așa mi l-am imaginat: „Un Raspberry Pi, o cameră și câteva motoare. Ce poate să fie atât de greu?” În procesul asamblării mașinii, m-am lovit de destul de multe probleme însă în cele din urma le-am dus până la capăt. Voiam să mă apuc cât mai repede de partea mea preferată: proiectarea unei aplicații. În cele din urmă, RaspiV2 (porecla vehiculului) arăta în felul următor: 4 motoare, controlate de un modul L298N alimentat de 8 baterii (pentru o tensiune de 12V) și un Arduino Uno pentru controlul acestuia. Placa de dezvoltare a fost alimentată cu ajutorul pinilor din partea Raspberry Pi4. Comunicarea dintre Pi4 și Uno a fost făcută cu ajutorul a 4 pini GPIO folosind codificarea 8421 (codul binar). Având în vedere semnalul pe un pin, acesta poate avea valoarea 0 sau 1. Așadar, numărul maxim de comenzi pe care Pi le poate trimite plăcii Uno este de 15 (număr maxim pe 4 biți). Camera video a fost atașată computerului RaspberryPi, alimentat de un powerbank capabil de un output de 3A/5V.
Din punct de vedere al aplicației proiectate, am utilizat limbajul C++ și librăria OpenCV. Pe scurt, traseul din fața mașinii este transformat într-o perspectivă „ca din avion” (sau „bird view”) și transformat într-un spațiu de culoare alb-negru. În continuare, imaginea suferă încă 2 transformări: o filtrare pe baza intensității de alb (pentru evidențierea liniilor de trafic) și o transformare Canny care conturează marginile liniilor. Având traseul „interpretat” de vehicul, am calculat diferența între centrul imaginii și centrul traseului. Aceasta reprezintă chiar intensitatea și direcția curbei, prin valorea și semnul rezultatului.
Pentru interpretarea semnului de stop, am antrenat o rețea neuronală de tip Cascade Classifier cu ajutorul matricilor HAAR. Cu ajutorul a 40 imagini pozitive (care conțin semnul de stop) și a 350 de imagini negative (fotografii cu traseul, ce NU conțin semnul de stop). Pe baza dimensiunii semnului de stop, am calculat distanța dintre vehicul și obiect pentru trimiterea semnalului de stop plăcii Uno.

Ce provocări ai întâlnit?

Poate cea mai mare provocare a fost dorința mea de a utiliza un Raspberry PI4 și nu un alt model din această gamă. Având în vedere consumul ridicat al acesteia, creearea unei surse de alimentare pentru întreaga mașină a fost un challenge. Inițial am încercat să folosesc un singur powerbank cu o capacitate de 20.000 mAh, însă în ciuda utilizării unui capacitor de 1000μF nu am putut rezolva căderea de tensiune la pornirea motoarelor. În cele din urmă, am hotărât să separ circuitul în două surse separate: un powerbank de 10.000 mAh pentru Raspberry și 8 baterii pentru motoare.

Ai deviat de la planul inițial?

Având în vedere stilul meu de lucru haotic și lipsa unui plan bine pus la punct, au apărut câteva devieri. Mașina inițială (sau RaspiV1) avea 2 motoare controlate direct de Raspberry și o singură sursă de alimentare. Rezultatul a fost un vehicul destul de lent și greoi, care de multe ori își pierdea curentul.
În momentul în care am adăugat încă 2 motoare, a apărut o noua problemă: mașina nici măcar nu mai pornea. Daca inițial vehiculul se oprea în timpul execuției, acum la fiecare turație de motor, placa RaspberryPi rămânea fară curent și își dădea restart. Acesta a fost momentul în care mi-am dat seama că trebuie să regândesc sursa de alimentare a mașinii și chiar șasiul în sine, având în vedere lipsa spațiului.
Au existat și modificări din punct de vedere software: inițial mi-am dorit să utilizez limbajul Python pentru a antrena modele convolutionale în detectarea semnelor de circulație și în determinarea intensității curbei liniei de trafic. Având în vedere calitatea imaginilor surprinse prin cameră (care erau blurry din cauza mișcării) acest mod de lucru a reprezentat un eșec. În cele din urmă am hotărât să utilizez limbajul C++ pentru detectarea în mod direct a liniilor de trafic și să aplic o altă abordare machine learning, modelul de tip cascadă (Cascade Classifier) pentru detectarea semnului de stop.

Ștefan ne-a trimis și un mic video, o demonstrație cu proiectul lui:

demo

Dacă te-a inspirat ideea lui Ștefan și accepți provocarea lui Clește , #Tehnologiacontează, umple-ți coșul de cumpărături cu piesele de care ai nevoie pentru proiectul tău de 10 și trimite-i lui Clește dovada rezultatului final! Nu vei rămâne nerăsplătit!

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *