Lucrare de diplomă [306340]

Lucrare de diplomă

‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾

Robot FPV cu procesare video a [anonimizat]: [anonimizat].dr. [anonimizat] 4

CAPITOLUL 1. ELEMENTE CONSTRUCTIVE 5

1.1. Schema bloc a dispozitivului electronic 5

1.2. Placa Arduino 6

1.3. Shieldul de motoare L298N 9

1.4. Motoare 10

1.5. Modulul Bluetooth HC-05 11

1.6. Camera 13

1.7. Bateria și convertorul de tensiune 14

1.8. Probleme întâmpinate 14

CAPITOLUL 2. DEZVOLTARE SOFTWARE 16

2.1. Dezoltare software pe platforma Arduino 16

2.2. Aplicații utilizate 18

CAPITOLUL 3. PROCESOARE VIDEO 22

3.1. Stabilirea punctelor de interes cu algoritmul SURF (Speeded-Up Robust Features) 22

3.2. Găsirea corespondențelor între imagini 25

3.3. Crearea panoramei 27

3.4. Procesarea videoului 29

3.5. Rezultate obținute 30

CONCLUZII 36

BIBLIOGRAFIE 37

INDEX 39

LISTĂ FIGURI:

Figura 0.1. Model de robot FPV. Imagine preluată din sursa [1]. 4

Figura 1.1. Schema bloc a dispozitivului electronic 5

Figura 1.2. Schema pinilor plăcii Arduino. Imagine preluată din sursa [8]. 7

Figura 1.3. Identificarea pinilor plăcii Arduino. Imagine preluată din sursa [2]. 8

Figura 1.4. Schema electronică a conexiunii dintre placa Arduino și schieldul de motoare L298N. Imagine preluată din sursa [3]. 10

Figura 1.5. Componența unui motor. Imagine preluată din sursa [4]. 11

Figura 1.6. Pinii modulului Bluetooth HC-05. Imagine preluată din sursa [5]. 12

Figura 1.7. Conectarea modulului HC-05 cu placa Arduino 13

Figura 1.8. Regulatorul de tensiune. Imagine preluată din sursa [6]. 14

Figura 2.1. Interfață de conectare a aplicației 18

Figura 2.2. Interfața de control a aplicației Arduino Bluetooth 19

Figura 2.3. Interfața aplicației Alfred (în modul cameră de supraveghere) 20

Figura 2.4. Interfața aplicației Alfred (în modul Viewer) 21

Figura 3.1. Descriptor împărțit în subregiuni 23

Figura 3.2. Proprietățile unui obiect SURFPoints 24

Figura 3.3. Puncte cheie detectate în imagine 25

Figura 3.4. Puncte comune găsite între două imagini 26

Figura 3.5. Panorama rezultată din contextul 1 32

Figura 3.6 Panorama rezultată din contextul 2 34

Figura 3.7. Panorama rezultată 36

INTRODUCERE

Lucrarea de licență ”Robot FPV cu procesare video a imaginilor” are ca scop procesarea imaginilor video transmise de către robot și transformarea acestora în imagini tip panoramă.

Conceptul de FPV (“First Person View”) definește transmiterea video a [anonimizat] o controlează, [anonimizat].

Lucrarea este structurată în 4 [anonimizat] a dispozitivului.

[anonimizat]. Ultima parte a lucrării este reprezentat de concluzii și viitoare îmbunătățiri ce ar putea fi aduse.

[anonimizat], cercetarea anumite locuri (ex. peșteri, [anonimizat], munți) sunt prea periculoase sau costisitoare pentru om. [anonimizat], ajutând și pentru situațiile de evitare a obstacolelor.

Figura 0.1. Model de robot FPV. Imagine preluată din sursa [1].

CAPITOLUL 1. ELEMENTE CONSTRUCTIVE

În primul capitol al lucrării voi prezenta în mod detaliat descrierea tehnică a fiecărei piese care intră în componența robotului FPV, dar și a conexiunilor dintre ele, punând accentul pe placa de bază a dispozitivului, și anume, placa Arduino Uno.

Schema bloc a dispozitivului electronic

Figura 1.1. Schema bloc a dispozitivului electronic

Principalii factori care au influențat în alegerea componentelor au fost:

compatibilitatea cu celelalte piese folosite

dimensiunea fiecărei piese, aceasta influențând dimensiunea finală a robotului

costurile

Lista de componente utilizate:

Descrierea detaliată a fiecărei piese în parte va fi prezentată în secțiunile următoare.

Placa Arduino

Arduino este o platformă open source utilizată pentru construirea de proiecte electronice. Aceasta constă atât dintr-o placă de circuite programabile fizic (adesea numită și microcontroler), cât și software sau IDE (Integrated Development Environment) care rulează pe computer, folosit pentru a scrie și a încărca codul pe placa fizică.

Platforma Arduino a devenit destul de populară pentru persoanele care sunt începătore în domeniul electronicii, dar și pentru cei experimentați, fiind foarte ușor de folosit. Spre deosebire de majoritatea plăcilor de circuite programabile anterioare, Arduino Uno nu are nevoie de o placă hardware separată pentru a încărca codul – pur și simplu se poate utiliza un cablu USB.

Descriere tehnică

Arduino Uno este o platformă bazată pe microcontrolerul ATmega328. Acesta are în componență:

14 pini de intrare / ieșire (dintre care 6 pot fi utilizate ca ieșiri PWM)

6 intrări analogice

un cristal de cuarț de 16 MHz

o conexiune USB

o mufă de alimentare

un conector ICSP

un buton de resetare.

Figura 1.2. Schema pinilor plăcii Arduino. Imagine preluată din sursa [8].

Input și Output

Fiecare dintre cei 14 pini digitali de pe Arduino Uno poate fi utilizați atât ca intrare cât și ca ieșire, folosind funcțiile pinMode (), digitalWrite () și digitalRead (). Aceștia funcționează la o tensiune de 5 volți. Fiecare pin poate furniza sau primi maxim 40 mA și are o rezistență internă (deconectată în mod implicit) de 20-50 kOhmi. În plus, unii pini au funcții specializate cum ar fi (Figura 1.2Figura 1.3):

Serial: 0 (RX) și 1 (TX). Folosiți pentru a recepționa (RX) și a transmite (TX) date seriale TTL.

Întreruperi externe: 2 și 3. Acești pini pot fi configurați pentru a declanșa o întrerupere.

PWM (Pulse Width Modulation): 3, 5, 6, 9, 10 și 11. Asigură ieșirea PWM pe 8 biți cu funcția analogWrite ().

SPI (Serial Peripheral Interface): 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Aceste pini sprijină comunicarea SPI, care, deși este dată de hardware-ul de bază, nu este inclusă în prezent în limbajul Arduino.

LED (Light Emiting Diode): 13. Există un LED de test încorporat, conectat la pinul digital 13

Platforma Arduino Uno are 6 intrări analogice, fiecare furnizând 10 biți (adică 1024 valori diferite). În plus, unii pini au funcționalități specifice (Figura 1.3):

I2C: 4 (SDA) și 5 (SCL). Suportă comunicarea cu I2C (TWI) utilizând biblioteca Wire.

AREF. Tensiunea de referință pentru intrările analogice; folosit cu funcția analogReference ().

Reset. Este setat la LOW când se dorește resetarea microcontrolerul.

Figura 1.3. Identificarea pinilor plăcii Arduino. Imagine preluată din sursa [2].

Sursa de alimentare

Arduino Uno poate fi alimentat prin conexiunea USB sau cu o sursă externă de alimentare. Alimentarea externă (non-USB) poate proveni de la un adaptor AC-DC sau un acumulator.

Placa poate funcționa pe o sursă externă de 6 până la 20 de volți.

Pinii de alimentare sunt după cum urmează:

VIN: tensiunea de intrare a plăcii Arduino atunci când este utilizată o sursă externă de alimentare (diferită de conexiunea USB sau altă sursă de alimentare regulată).

5V: sursa de alimentare folosită pentru alimentarea microcontrolerului și a altor componente de pe placă.

3V3: sursă de alimentare de 3.3 volți.

Memoria

Atmega328 are 32 KB de memorie flash pentru stocarea codului sursă (dintre care 0.5 KB sunt folosiți pentru bootloader). De asemenea, acesta are 2 KB de SRAM și 1 KB de EEPROM (care poate fi citit și scris cu biblioteca EEPROM).

Shieldul de motoare L298N

Din cauza faptului că prin intermediul plăcii Arduino nu se pot acționa în mod direct motoarele, astfel încât să poată fi puse în mișcare, am utilizat shieldul L298N pe post de aplificator de putere.

Shieldul poate fi alimentat direct de la Arduino sau de la o sursă externă de alimentare și se conectează în mod direct prin intermediul a patru pini digitali (3, 5, 6 si 9).

În funcție de necesitatea motoarelor (acesta se alimentează doar cât are nevoie în funcție de viteza de rotire, numărul motoarelor, etc.), alimentarea driverului L298N se face prin pinii VIN si GND.

Figura 1.4. Schema electronică a conexiunii dintre placa Arduino și schieldul de motoare L298N. Imagine preluată din sursa [3].

Motoare

Pentru realizarea imaginii panoramice, dispozitivul electronic necesită o deplasare autonomă care se realizează cu ajutorul a patru motoare de curent continuu (DC) conectate la shieldul L298N descris pe larg în subsecțiunea anterioară. Un motor de curent continuu transformă energia electrică în energie mecanică, producând astfel mișcarea roților, viteza fiind dată de numărul de rotații pe minut (RPM).

Motoarele de curent continuu au o armătură rotativă care funcționează ca un electromagnet cu doi poli. Este conectat un comutator rotativ care ajută la inversarea direcției curentului la fiecare jumătate de ciclu, astfel încât polii să poată fi împinși sau trași de magneții permanenți conectați în afara motorului.

Componența unui motor (Figura 1.5):

Rotor – partea care se rotește și are magneții montați într-un model radial

Stator – partea care nu se rotește și are electromagneții

Figura 1.5. Componența unui motor. Imagine preluată din sursa [4].

Modulul Bluetooth HC-05

Bluetooth este un standard de tehnologie fără fir pentru schimbul de date pe distanțe scurte (folosind undele radio UHF cu lungime de undă scurtă) de la dispozitivele fixe și mobile și construirea rețelelor personale. Intervalul este de aproximativ 10 metri.

Principalul scop al folosirii Bluetooth-ului este controlarea de la distanță a robotului, prin intermediul telefonului.

Modulul Bluetooth HC-05 este un modul Master / Slave. Implicit, setarea din fabrică este slave. Modulele slave nu pot iniția o conexiune cu alt dispozitiv Bluetooth, dar pot accepta conexiuni. Modulul master poate iniția o conexiune cu alte dispozitive.

În acest proiect, modulul HC-05 este folosit în modul slave, acesta acceptând conexiunea inițiată de telefon.

Figura 1.6. Pinii modulului Bluetooth HC-05. Imagine preluată din sursa [5].

Pentru conexiunea Bluetooth am utilizat modulul HC-05. Acesta are 6 pini după cum urmează (Figura 1.6):

ENABLE (1): Când este LOW, modulul HC-05 este dezactivat, ceea ce înseamnă că modulul nu se aprinde și nu reușește să comunice. Atunci când este lăsată ”în aer” sau este conectată la 3.3V, modulul este activat, adică modulul rămâne activ și are loc și comunicarea.

VCC (2): Tensiunea de alimentare de la 3.3V la 5V.

GND (3): Pin de împământare.

TXD și RXD (4 și 5): Acești doi pini acționează ca o interfață UART pentru comunicare.

STATE (6): Acesta funcționează ca un indicator de stare. În cazul în care modulul nu este conectat/asociat cu orice alt dispozitiv Bluetooth, semnalul este LOW. În această stare, LED-ul clipește continuu, ceea ce denotă că modulul nu este asociat cu alte device-uri. Când modul este conectat cu orice alt dispozitiv Bluetooth, semnalul este HIGH. În această stare, LED-ul clipește cu o întârziere constantă, de exemplu, 2 secunde întârziere, care indică faptul că modulul este asociat.

Conectarea modului HC-05 cu placa Arduino (Figura 1.7):

pinii Vcc și Gnd ai modulului HC-05 se conectează la pinii Vcc și Gnd de pe placa Arduino

pinul TXD se contectează cu pinul RX de la Arduino (pin digital 0)

pinul RXD se conectează la pinul TX de la Arduino (pin digital 1)

Figura 1.7. Conectarea modulului HC-05 cu placa Arduino

Camera

Pentru reducerea costurilor, dar și pentru a oferi o soluție mai facilă și la îndemâna oricui, am ales să folosesc pe post de cameră un telefon mobil. Transmisiunea live a imaginilor se face prin intermediul aplicației Alfred (descrisă în secțiunea 2 a capitolului 2), aceasta fiind responsabilă și de înregistrarea videoului care urmează a fi procesat pentru transformarea lui în panoramă.

Bateria și convertorul de tensiune

Pentru alimentarea circuitului am ales folosirea a două baterii de 9V, una care este conectată la platforma Arduino, iar cealaltă care să asigure funcționarea în mod direct a shieldului de motoare.

Ținând cont de faptul că modului Bluetooth HC-05 acceptă doar o tensiune de 3.3V pentru intrările RX și TX, iar Arduino oferă o tensiune de 5V, a fost nevoie de folosirea unui regulator de tensiune care să transforme cei 5V de intrare în 3.3V la ieșire.

Figura 1.8. Regulatorul de tensiune. Imagine preluată din sursa [6].

1.8. Probleme întâmpinate

În construcția fizică a unui dispozitiv sunt inevitabile problemele legate de compatibilitate, surse de alimentare sau control de la distanță.

Camera

Inițial, am dorit utilizarea unui ArduinoCam care să fie conectat la placa Arduino în mod direct, iar imaginile să fie stocate în memoria internă a platformei, ulterior putând fi descărcate în laptop și procesate.

Folosirea acestei metode ducea la apariția a trei mari probleme:

Persoana care controla robotul nu putea să vadă live parcursul robotul, astfel încât să poată evita obstacolele; pilotul putea vedea doar ulterior videoul descărcat pe laptop.

Arduino are o memorie relativ mică, astfel încât stocarea unui video suficient de mare încât să permită transformarea lui într-o imagine panoramică este aproape imposibilă.

Platforma Arduino nu este destinată utilizării camerei video, acest lucru putând îngreuna foarte mult procesarea video a imaginilor obținute.

Bateria

Inițial, pentru alimentarea întregului circuit foloseam o singură baterie, aceasta fiind insuficientă pentru a alimenta placa Arduino, motoarele și modului Bluetooth în același timp.

Rezolvarea acestei probleme a venit prin conectarea a două baterii separate, una care să alimenteze în mod direct placa Arduino, iar cealaltă pentru alimentarea shieldului de motoare L298N.

CAPITOLUL 2. DEZVOLTARE SOFTWARE

Acest capitol se bazează pe prezentarea aplicațiilor utilizate în proiect (aplicația pentru controlul robotului și aplicația pentru controlul camerei), dar și descrierea codului Arduino încărcat pe placă.

2.1. Dezoltare software pe platforma Arduino

Pentru programarea platformei Arduino Uno, am ales să utilizez limbajul de programare Arduino datorită conexiunii facile dintre partea de hardware și cea de software. În plus, în limbajul de programare Arduino se regăsesc foarte multe funcții specifice, care ajută la implementarea codului.

Partea cea mai importantă din codul scris este reprezentată de funcția go, aceasta fiind cea care produce mișcarea motoarelor prin intermediul shieldului L298N.

Fiecărui motor i se poate atribui o putere cuprinsă între -255 și 255, unde:

valoarea 0 însemnă că motorul nu funcționează.

valoarea 255 fiind viteza maximă pe care o poate produce un motor.

valoarea -255 reprezintă aceeași viteză doar că rotația axului motorului se va face în sens invers.

Ținând cont de parametrii primiți prin intermediul funcției go prezentate mai sus (speedLeft și speedRight), prin funcția analogWrite se transmite motorului o valoare, astfel încât să poată fi luată o decizie asupra direcției în care să meargă robotul.

Prin aplicația Arduino Bluetooth (care va fi descrisă în secțiunea următoare), fiecărui buton îi va fi atribuită o valoare, iar în funcție de aceasta, programul va executa o anumită secvență de cod. De exemplu, atunci când valoarea transmisă prin intermediul Bluetooth-ului este ”F” ( command=F ) se va executa următorul case al instrucțiunii switch:

,

efectul produs fiind pornirea motoarelor la cu o viteză maximă, făcând robotul să înainteze. Comanda va fi executată până când se va primi o altă valoare prin intermediul aplicației Arduino Bluetooth.

2.2. Aplicații utilizate

Aplicație pentru controlul robotului

Pentru controlul de la distanță al robotului am ales utilizarea aplicației Arduino Bluetooth. Aceasta se poate instala pe orice tip de telefon, iar din interfață se poate face conexiunea cu modului Bluetooth HC-05 (Figura 2.1), care este deja conectat la Arduino, implicit la shieldul de motoare L298N.

Din momentul în care se face conexiunea între cele două device-uri, controlarea robotului devine foarte simplă. Se poate seta pentru fiecare buton din aplicație (Figura 2.2) câte o valoare care să fie ulterior transmisă, prin intermediul tehnologiei Bluetooth, către platforma Arduino. Cu ajutorului codului descris în secțiunea anterioară, valoarea transmisă este preluată și procesată, iar în funcție de aceasta este îndeplinită o acțiune.

De exemplu, prin apăsarea tastei ”^” (Figura 2.1), se va transmite către platforma Arduino valoarea ”F”, iar acesta va fi procesată și va efectua punerea în mișcare a motoarelor astfel încât robotul să înainteze în față.

Figura 2.1. Interfață de conectare a aplicației

Arduino Bluetooth

Figura 2.2. Interfața de control a aplicației Arduino Bluetooth

Aplicație pentru utilizarea camerei

Am ales utilizarea unei aplicații care, instalată pe orice tip de smartphone, îl poate transforma într-o cameră de supraveghere.

Aplicația Alfred, permite controlul camerei telefonului prin intermediul altui telefon sau al laptopului, condiția fiind ca ambele device-uri să fie conectate la același cont de Google. În acest fel, telefonul montat pe robot devine cameră de supraveghere, iar laptopul/smartphone-ul devine Viewer.

Tot prin intermediul aplicației există și posibilitatea de a activa funcția de ”Motion Detection”, o specificație foarte importantă dacă dorim ca robotul să filmeze doar atunci când este detectată mișcarea.

Figura 2.3. Interfața aplicației Alfred (în modul cameră de supraveghere)

După ce cele două device-uri au fost conectate (device-ul considerat cameră de supraveghere și device-ul considerat Viewer), transmisiunea live este pornită, oferind utilizatorului si anumite funcționalități, cum ar fi (Figura 2.4):

înregistrarea video

aprinderea lanternei

schimbarea camerei

rotirea imaginii

zoom in/out

posibilitatea de a face poze

Cea mai importantă funcționalitate oferită de aplicație (pe lângă funcția de cameră de supraveghere) este înregistrarea video, aceasta fiind absolut necesară pentru salvarea și prelucrarea videoclipului rezultat și transformarea lui într-o imagine panoramică.

Figura 2.4. Interfața aplicației Alfred (în modul Viewer)

După înregistrarea videoclipului, acesta poate fi salvat direct în memoria device-ului care a fost folosit pe post de Viewer.

CAPITOLUL 3. PROCESOARE VIDEO

Algoritmul de procesare al imaginilor video presupune prelucrarea unui videoclip filmat cu ajutorul robotului și transformarea acestuia într-o imagine de tip panoramă.

Pentru scrierea codului am utilizat ca mediu de dezvoltare Matlab, deoarece acesta permite o utilizare facilă a funcțiilor de inteligență vizuală.

Principiul de bază al algoritmului este potrivirea a două imagini pe baza unor corespondențe și lipirea lor, astfel încât imaginea rezultată să aibă o continuitate.

Procesul poate fi împărțit în trei pași:

Detecția automată a punctelor cheie. Aceeași caracteristică, pentru aceeași imagine, trebuie să fie identificată din orice unghi am privi, indiferent de rotație, translație sau scalare.

Descrierea punctelor. Fiecare punct de interes trebuie sa aibă o descriere unică, care sa nu depindă de scară sau rotație.

Găsirea corespondențelor în imagini, în funcție de punctele cheie detectate.

3.1. Stabilirea punctelor de interes cu algoritmul SURF (Speeded-Up Robust Features)

Detectarea punctelor de interes este procesul în urma căruia se extrag caracteristici unice dintr-o imagine, astfel încât să putem detecta, pe baza punctelor cheie descoperite, același obiect, dar în cadre diferite.

Deși punctele de interes reprezintă doar un procent mic dintr-o imagine, acestea pot fi utilizate pentru a minimiza cantitatea de date procesate pentru găsirea caracteristicilor comune dintre două imagini.

Vecinătatea fiecărui punct de interes este reprezentată de un vector caracteristic. Acesta se numește descriptor și trebuie să fie distinctiv dar, în același timp, să nu fie influențat de zgomot, erori de detecție sau deformări geometrice.

În algoritmul SURF (Speeded-Up Robust Features), detectarea punctelor de interes se bazează pe matricea Hessiană, definită astfel:

unde L este convoluția dintre derivația Gaussiană de gradul doi și imaginea I.

Următorul pas este stabilirea descriptorilor. Se atribuie o orientare punctului cheie, se construiește o regiune pătrată în jurul acestuia și se rotește în funcție de orientarea stabilită. Regiunea găsită va fi împărțită în subregiuni mai mici, de 4 × 4 (Figura 3.1).

Valorile absolute ale răspunsurilor | dx | și | dy |, împreună cu suma vectorului, formează un descriptor patru-dimensional (Figura 3.1).

Figura 3.1. Descriptor împărțit în subregiuni

Pentru detectarea caracteristicilor din imagini, am ales aplicarea funcției detectSURFFeature din Matlab, care necesită ca imaginile folosite să fie de tip grayscale.

Funcția returnează un obiect de tip SURFPoints (Figura 3.2) care conține informații despre caracteristicile SURF detectate în imaginea de intrare.

Figura 3.2. Proprietățile unui obiect SURFPoints

În funcție de punctele de interes obținute prin intermediul funcției detectSURFFeature (Figura 3.3), se extrag descriptorii și locațiile acestora și se rețin în cele două variabile features și points. Acest proces este efectuat utilizând funcția extractFeatures care este deja implementată în Matlab.

În această etapă a dezvoltării software deja s-au detectat punctele cheie din prima imagine (Figura 3.3), urmând să trecem la etapa de găsire a corespondențelor între aceasta și următoarele imagini date ca input.

Figura 3.3. Puncte cheie detectate în imagine

3.2. Găsirea corespondențelor între imagini

În cele din urmă, se găsesc vectorii descriptori care să fie comuni unor imagini diferite, iar corespondența este bazată pe o distanță între vectori (distanța Euclidiană).

Ținând cont de faptul că toate imaginile trebuie procesate, acestea vor fi selectate pe perechi si se vor căuta corespondențele între imaginea curentă și imaginea anterioară.

Având toate inițializările necesare, se pot stabili corespondențele între imagini prin intermediul funcției matchFeatures din Matlab, care returnează indicii punctelor de interes care se potrivesc.

Figura 3.4. Puncte comune găsite între două imagini

În funcție de punctele cheie comune găsite între cele două imagini, se poate stabili transformarea geometrică care trebuie aplicată, astfel încât cele două imagini să poată fi lipite. Se pot alege trei tipuri de transformare, diferența dintre ele fiind dată de numărul minim de perechi de puncte care se potrivesc.

Apelul funcției permite definirea unui număr maxim de încercări, astfel încât transformarea să fie aleasă în funcție de existența a cât de multor puncte de interes comune între imagini.

3.3. Crearea panoramei

Următorul pas este calcularea limitelor pentru fiecare transformare, astfel încât, prin calcularea mediilor si sortarea lor, să se poată stabili o ordine de procesare a imaginilor.

În cazul în care ordinea imaginilor nu este cea de la citirea acestora și ar trebui modificată, atunci transformările lor se vor interschimba.

Calcularea dimensiunilor panormei finale (lungime și lățime) se bazează pe calcularea valorilor minime și maxime ale imaginilor procesate.

Ținând cont că au fost stabilite toate variabilele necesare pentru crearea panoramei, se procesează fiecare dintre imagini și cu ajutorul funcția imwarp se aplică imaginii curente transformarea geometrică corespunzătoare.

Pentru lipirea imaginilor se folosește blender, care presupune suprascrea valorile pixelilor unei imagini cu valorile pixelilor unei alte imagini (proprietate dată de setarea parametrului Operațior ca fiind Binary mask).

3.4. Procesarea videoului

Ținând cont de faptul că robotul va oferi ca output un video, a fost nevoie de prelucrarea acestuia și împărțirea lui în frame-uri, astfel încât să se poată face trecerea către o imagine panoramică.

Pentru alegerea frame-urilor potrivite care vor intra în componența imaginii de tip panoramă, am ales să iau în calcul două opțiuni:

Alegerea manuală a frame-urilor (selectarea imaginilor date ca input se face de către utilizator)

Utilizatorul poate selecta oricâte imagini, care sunt adăugate în folderul frames. Panorama se construiește pornind de la primele două imagini, rezultatul acestora fiind lipit cu următoarea imagine, procedeul repetându-se până la terminarea tuturor imaginilor din folder.

Alegerea automata a frame-urilor (este selectat fiecare al x-lea frame)

Un proces în care utilizatorul nu contribuie la alegerea imaginilor presupune repetarea selecției fiecarui al x-lea frame (unde x este un număr ales de către utilizator), din folder-ul în care acestea au fost salvate. Selectarea imaginilor ce intră în compunerea panoramei se face în acest fel automat, dar există riscul ca, în cazul în care x este un număr prea mare, programul să nu găsească corespendențe între cele două imagini.

Rezultate obținute

Context

Robotul a fost plasat în cadrul unei clădiri, pe o balustradă destul de îngustă, la înălțime, loc în care omul nu ar putea avea acces.

Imagini date da input

Imaginea de la care s-a pornit conține ca obiecte de interes un scaun, un birou și o balustradă.

A doua imagine are ca puncte comune cu prima, scaunul și balustrada. În plus, este adăugat în partea dreapta, un perete.

Imaginea a treia exclude scaunul, adaugă încă un nou obiect (laptopul) și păstrează ca elemente comune balustrada și peretele.

În aceastpă imagine, obiectele comune se rezumă la balustradă, colțul laptopului și perete. Este adăugat un nou obiect și anume, dulapul.

Corespondențele dintre imaginea anterioară și cea curentă se vor baza pe laptop și dulap.

În ultima imagine, este adăugat în colțul din dreapta, un pahar, iar elementele comune cu imaginea anterioară ramân dulapul și laptopul.

Rezultatul obținut

Rezultatul obținut conține toate obiectele detectate în imaginile date ca input (biroul, scaunul, balustrada, peretele laptopul, dulapul și paharul), iar acestea sunt suprapuse, astfel încât imaginea panoramică finală să aibă o continuitate.

Figura 3.5. Panorama rezultată din contextul 1

Context

Robotul a fost plasat pe un pod de lemn instabil, peste un râu. Ținând cont de faptul că podul era șubred, acesta nu este un context în care omul ar putea avea acces.

Imagini date ca input

Imaginea 1

Imaginea 2

Imaginea 3

Imaginea 4

Imaginea 5

Rezultatul obținut

Deși imaginile sunt asemănătoare și obiectele detectate sunt de aceeși natură (colțurile stâncilor, cascada, copaci), lipirea și suprapunerea dintre ele a fost făcută încât imaginea panoramică creată să aibă o continuitate.

Figura 3.6 Panorama rezultată din contextul 2

Context

Într-un cadru în care accesul omului nu era permis, dar se dorea o imagine panoramică a peisajului, s-a putut trimite cu ușurință robotul pentru a înregistra videoul și a-l prelucra ulterior.

Imagini date ca input

Prima imagine dată ca input are foarte multe obiecte de interes (se pot detecta multe puncte cheie) cele mai importante bazându-se pe muntele din fundal și casa din dreapta.

Continuitatea cu imaginea anterioară se bazează pe elementele prezentate anterior, casa, muntele și acoperișul leagănului.

Chiar dacă frame-ul al treilea este la o distanță destul de mare față de primele două (au dispărut foarte multe elemente distinctive), corespondența s-a putut face prin prezența casei în imagine.

În ultima imagine s-a mai adăugat un element (casa din dreapta).

Rezultatul obținut

Dând ca input imaginile prezentate anterior, pe baza punctelor de interes detectate și a corespondențelor dintre acestea, imaginea panoramică rezultată este suficient de bună, aceasta incluzând toate imaginile inițiale și suprapunerile dintre ele fiind făcute corect.

Figura 3.7. Panorama rezultată în contextul 3

CONCLUZII

Robotul FPV cu procesare de imagini video are la bază procesarea unor videouri preluate cu ajutorul unui dispozitiv controlat de la distanță și transformarea acestuia într-o imagine panoramică. Construcția dispozitivului, programarea lui cât și prelucrarea imaginilor video au fost realizate de către mine, cu excepția componentele mecanice și electronice care au fost achiziționate de pe piață.

Prin realizarea acestui proiect am aprofundat domeniul electronicii și cel al roboticii, domeniul tehnologiei informației, dar și domeniul inteligenței vizuale, această lucrare fiind una dintre cele mai complexe, realizate de mine până în prezent.

Luând în considerare că acest proiect servește pe post de demo și că nu poate fi folosit neapărat într-un mediu real, necontrolat, aș avea următoarele propuneri pentru îmbunătățirea acestuia:

Ținând cont de contextele în care ar putea fi folosit robotul și terenul accidentat pe care ar trebui să meargă, aș propune ca pe viitor roțile și carcasa să fie schimbate astfel încât să se poată adapta oricărui mediu înconjurător (de exemplu, în interiorul unei peșteri, unde există obstacole, acestea să poată fi depășite cu succes).

Modului Bluetooth ar trebui înlocuit cu alt modul care să ofere robotului un control pe o distanță mai mare de 10 metri.

Uneori blițul camerei ar putea fi insuficient într-un mediu întunecat, așa că montarea unor LED-uri puternice ar fi o soluție bună pentru spațiile închise, fără lumină.

Pe viitor, mergând pe același principiu de procesare video, dispozitivul electronic poate fi înlocuit cu succes de o dronă, aceasta fiind mult mai capabilă să evite obstacolele, nefiind dependentă de teren. În plus, controlul la distanță nu ar mai impune neapărat o problemă, oferind pilotului o libertate de control mult mai mare.

BIBLIOGRAFIE

DOCUMENTE ELECTRONICE

[1] Starter kit robot educativ

https://edutech.atlantistelecom.com/robot-educativo-starter-kit-bluetooth-makeblock-3244.1004

[2] Arduino Pins

Arduino UNO startup Tutorial

[3] Smart Robot car part dc motors L298N

http://farhek.com/jd/7h1d085/part-robot/5p58n0/

[4] Brushless DC Motor: Construction and Working Principle

https://www.electricaltechnology.org/2016/05/bldc-brushless-dc-motor-construction-working-principle.html

[5] HC-05 Bluetooth Module Pinout

HC-05-Bluetooth-Module-Pinout

[6] Nine volt battery

https://en.wikipedia.org/wiki/Nine-volt_battery

CĂRȚI

[7] Mark S. Nixon and Alberto S. Aguado (2013), Feature Extraction & Image Processing for Computer Vision

[8] Massimo Banzi and Michael Shiloh (2014), Getting Started with Arduino 3rd Edition.

[9] Simon Monk (2012), Programming Arduino Getting Started with Sketches.

ARTICOLE

[10] Comparison of Feature Detection and Matching Approaches: SIFT and SURF https://www.researchgate.net/profile/Darshana_Mistry/publication/314285930_Comparison_of_Feature_Detection_and_Matching_Approaches_SIFT_and_SURF/links/58bfda4292851c7b7275f20c/Comparison-of-Feature-Detection-and-Matching-Approaches-SIFT-and-SURF.pdf

[11] Jacob Toft Pedersen, SURF: Feature detection & description http://cs.au.dk/~jtp/SURF/report.pdf

[12] Comparison of Feature Detection and Matching Approaches: SIFT and SURF https://www.researchgate.net/profile/Darshana_Mistry/publication/314285930_Comparison_of_Feature_Detection_and_Matching_Approaches_SIFT_and_SURF/links/58bfda4292851c7b7275f20c/Comparison-of-Feature-Detection-and-Matching-Approaches-SIFT-and-SURF.pdf

[13] SURF: Speeded Up Robust Features http://www.vision.ee.ethz.ch/~surf/eccv06.pdf

[14] Kevin Dowling (January 1997), Power Sources for Small Robots http://www.ri.cmu.edu/pub_files/pub1/dowling_kevin_1997_1/dowling_kevin_19 97_1.pdf

[15] D. G. Lowe, Distinctive image features from scale-invariant keypoints. Int. J. Comput. Vision, 60(2):91110

https://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf

INDEX

UHF (Ultra high frequency), 11

SPI (Serial Peripheral Interface), 8

MISO (Master In Slave Out), 8

MOSI (Master Out Slave In), 8

SCK (Serial Clock), 8

SS (Slave Select), 8

PWM (Pulse Width Modulation), 6,8

LED (Light Emiting Diode)

SDA (data line), 8

SCL (clock line), 8

I2C (Inter-Integrated Circuit), 8

AREF (Analog Reference), 8

TWI (Two Wire Interface), 8

AC-DC (Alternating Current/Direct Current), 9

VIN (Input Voltage), 9

SRAM (Static Random Access Memory), 9

EEPROM (Electrically Erasable Programmable Read-Only Memory), 9

GND (Ground), 9, 12, 13

RPM (Rotations Per Minute), 10

DC (Direct Current), 10

Similar Posts