Special izarea : Calculatoare [604455]
1
UNIVERSITATEA “LUCIAN BLAGA” DIN SIBIU
FACULTATEA DE INGINERIE
DEPARTAMENTUL DE CALCULATOARE ȘI INGINERIE
ELECTRICĂ
PROIECT DE DIPLOMĂ
Absolvent: [anonimizat] : Calculatoare
– Sibiu, 2017 –
2
UNIVERSITATEA “LUCIAN BLAGA” DIN SIBIU
FACULTATEA DE INGINERIE
DEPARTAMENTUL DE CALCULATOARE ȘI INGINERIE
ELECTRICĂ
Controlul unei drone
folosind dispozitive bazate pe
gesturi
Îndrumător științific: Asistent Dr. Ing. Alexandru Butean
Absolvent: [anonimizat] : Calculatoare
– Sibiu, 2017 –
3
4
Cuprins
1. Introducere ………………………….. ………………………….. ………………………….. ……….. 6
1.1 Prezentarea temei – titlul, domeniul de aplicare ………………………….. …………… 6
1.2 Motivația alegerii temei ………………………….. ………………………….. ………………. 6
1.3 Cerințe generale ………………………….. ………………………….. ………………………….. 7
1.4 Utilitate ………………………….. ………………………….. ………………………….. …………. 7
2. Considerații teoretice 20 -25 pagini ………………………….. ………………………….. ….. 8
2.1 Drone ………………………….. ………………………….. ………………………….. ……………. 8
2.2 Leap Motion ………………………….. ………………………….. ………………………….. ….. 8
2.2.1 Leap Motion API ………………………….. ………………………….. …………………… 9
2.3 Microcontrolere ………………………….. ………………………….. ………………………… 12
2.3.1 Arduino ………………………….. ………………………….. ………………………….. …….. 14
2.3.2 Raspberry Pi ………………………….. ………………………….. ………………………….. 15
2.4 Windows 10 IoT ………………………….. ………………………….. ……………………….. 17
2.5 SPI interface? ………………………….. ………………………….. ………………………….. . 17
3. Rezolvarea temei de proiect 40 – 50 pagini ………………………….. …………………. 18
3.1 Cercetări în domeniu ………………………….. ………………………….. …………………. 18
3.1.1 Gesture Control of Drone Using a Motion Controller ………………………….. . 18
3.2 Proiectarea sistemului – 10 pagini ………………………….. ………………………….. . 19
3.2.1 Analiza și specificarea cerințelor ………………………….. ………………………… 19
3.2.2 Logica implementării ………………………….. ………………………….. ……………. 21
3.2.3 Arhitectura sistemului ………………………….. ………………………….. …………… 23
3.3 Dezvoltarea apli cației – 20 pagini ………………………….. ………………………….. .. 27
3.3.1 Mediul de dezvoltare – min 5 pagini (ce tool -uri, ce limbaje, ) ……………. 27
3.3.2 Structura modulelor – cod , explicatii ………………………….. ………………….. 28
3.3.3 Interfata cu utilizatorul (print screen -uri) ………………………….. ……………. 28
3.4 Experimente si rezultate (optional) ………………………….. ………………………….. 29
5
4. Concluzii 3 pagini ………………………….. ………………………….. ………………………… 30
4.1 Gradul de indeplinire a obiectivelor ………………………….. …………………………. 30
4.2 Dific ultăți întâmpinate ………………………….. ………………………….. ……………….. 30
4.3 Dezvoltări ulterioare ………………………….. ………………………….. ………………….. 30
5. Bibliografie și Referințe ………………………….. ………………………….. ……………………… 31
5.1 Bibliografie ………………………….. ………………………….. ………………………….. ……… 31
5.2 Imagini ………………………….. ………………………….. ………………………….. …………… 31
6. Anexe ………………………….. ………………………….. ………………………….. …………….. 33
6
1. Introducere
1.1 Prezentar ea temei – titlul, domeniul de aplicare
Titlul.
Acest proiect de diplomă urmărește implementarea unei nou mod de a interacționa cu
diferite dispozitive teleghidate. În cazul de față, este vorba de controlul unei drone . Dispozitivul
cu care am lucrat în realizarea acestei lucrări de diplomă este o mini d ronă, o jucărie, cumpărată
dintr -un magazin online .
Domeniul de aplicare.
Soluția acestei lucrări de diplomă este viabilă atât la nivel industrial, cât și la nivelul
persoanelor pasionate de jucării teleghidate care caută noi moduri și provocări în a inte racționa
cu acestea.
1.2 Motivația alegerii temei
Am ales această temă de diplomă deoarece include mai multe arii din interesul meu
personal, cum ar fi sistemele inco rporate, internetul lucrurilor ș i robotica. De asemenea am vrut
să lucrez cu cele mai no i tehnologii apărute în aceste domenii și căutam un proiect potrivit și
destul de complex pentru a le pune în aplicare.
Un alt motiv pentru care am ales această temă, este faptul că în rând cu tehnologia,
trebuie să evolueze și modurile prin care interacți onăm cu aceasta. Astfel, evoluând, de la
apăsatul butoanelor am ajuns în ziua de astăzi ca standardul să fie ecranele tactile. Am ajuns să
interacționam vocal cu dispozitivele, să avem asistenți digitali ori ca realitatea din jurul nostru
sa fie augmentată sau chiar virtualizată. De aceea, prin această temă de diplomă, doresc să
găsesc o soluție ca în loc să țin în mână o telecomandă care de cele mai multe ori este greoaie,
atât din punctul de vedere al greutății cât și al modului de folosire, să avem mâini le libere și să
ne controlăm dispozitivul prin gesturile realizate.
7
De asemenea, această soluție vine și în ajutorul persoanelor care nu au o dexteritate
ridică la nivelul degetelor pentru a putea opera o telecomandă obișnuită dar totuși doresc să
interacț ioneze cu astfel de dispozitive telecomandate.
1.3 Cerințe generale
În lucrarea de față dorim realizarea unei soluții hardware -software cât mai generale, în
care blocurile structurale ale soluției de față să poată fi ușor schimbate sau modificate pentru a
fi adaptate noilor cerințe care pot apărea în viitor .
Astfel , dorim ca soluția noastră să nu depindă de modul de interacțiune, să permit ă mai
multe moduri de comunicație între module și de asemenea să poată fi aplicată cat mai ușor fără
mari modificări c ât mai multor dispozitive deja existente pe piață.
De asemenea dorim ca utilizatorul să poată să folosească soluția noastră cât mai ușor și
să poată începe interacțiunea cu dispozitivul în cauză cât mai repede după pornirea aplicației
software
1.4 Utilita te
Utilitatea acestei soluții constă in faptul ca este facilă schimbarea dispozitivului ce vrem
sa îl controlăm prin intermediul gesturilor. Soluția de față nu se resumă doar asupra dronei ce
a fost folosită la realizarea acestui proiect de diplomă, ci or icărei drone și nu numai. De
asemenea poate fi folosită în controlul oricărui dispozitiv ce este controlat printr -o
telecomandă.
8
2. Considerații teoretice 20 -25 pagini
– aici puneți toate subiectele de teorie pe care v -am rugat sa le documentați
2.1 Dron e
2.2 Leap Motion
Controlerul Leap Motion este un periferic USB lansat în vara anului 2013. Acesta a fost
proiectat să fie așezat cu fața în sus pe o suprafață fizică. De asemenea poate fi atașat unor
ochelari pentru realitate virtuală. Folosind două c amere infra roșu monocrome, acest dispozitiv
poate observa o zonă emisferica [Figura 1]. Distanța maxima la care dispozitivul percepe
mediul este de aproximativ un metru . Un studiu realizat in 2013 acuratețea acestui controler s –
a dov edit a fi de 0.7 milimetri [1].
Alt dispozitiv care folosește o tehnologie asemănătoare este Kinect , dezvoltat de cei de
la Microsoft . Diferența dintre cele două dispozitive constă în faptul că Leap Motion are o zonă
observabi lă mai mica dar rezoluția mai bună, fiind adecvat pentru urmărirea mișcării mâinilor
în special, pe când Kinect are o zonă observabila de dimensiunea unei sufragerii și urmărește
mișcarea întregului corp.
In prezent, kit -ul de dezvoltare oferit suportă o m ultitudine de limbaje de programare
(C, C++, C#, Java, Objective -C, P ython, JavaScript) cat și integrarea cu diferite motoare
grafice (Unity, Unreal Engine) [2].
Figura 1
9
2.2.1 Leap Motion API
Sistemul Leap Motion recunoaște si urmăreșt e mâna și degetele utilizatorului. Senzorii
dispozitivului sunt direcționați în sus de -a lungul axei -Y atunci când acesta este în poziția
standard de operare. Detecția și urmărirea mișcării se realizează cel mai bine atunci când
senzorii au o vedere clară și contrast ridicat asupra siluetei obiectului.
Sistemul de coordonate folosit de Leap Motion este unul definit de regula mâinii drepte .
Originea sistemului de coordonate se află deasupra dispozitivului fizic. Axele X si Z se află în
planul orizontal iar axa Y in planul vertical. Axa X se află de -a lungul laturii mai lungi a
controlerului. Valorile axei Z cresc înspre utilizator iar cele ale axei Y cresc în sus [Figura 2].
Mărimile fizice măsurate de către Leap Motion sunt: distanță, timp, viteză și unghi.
Unitățile de măsura folosite sunt milimetri pentru distanță, microsecunde pentru timp,
milimetri/secundă pentru viteză și radiani pentru unghi.
Controlerul Leap Motion urmărește mâinile și degetele, oferind actualizări regulat e a
datelor aferente obiectelor din câmpul de vizualizare sub forma unui cadru. La baza API -ului
controlerului Leap Motion stă clasa Frame , care detaliază proprietățile modelului de date ale
obiectelor capturare la un moment de timp .
Modelul de date a mâin ii este reprezentat de către clasa Hand . Această clasă conține
informații despre identitatea mâinii, poziția acesteia, de care braț este atașată, lista degetelor
asociate palmei respective, viteza de mișcare cât și alte caracteristici. Orientarea mâinii es te
dată de proprietățile PalmNormal și Direction [Figura 4]. Atunci când anumite părți ale mâinii
Figura 2
10
nu sunt vizibile, sistemul Leap Motion se folosește de un model intern al unei mâini umane
pentru a prezice mișcarea acestora. În ac est fel, lista degetelor asociate unei mâini va conține
tot timpul informație despre toate cele cinci degete. Predicția parților ascunse ale mâinii se face
pe baza zonelor vizibile a mâinii, modelul intern și pe baza observațiilor anterioare. De reținut
este faptul că mișcările subtile a le degetelor ascunse sub palmă în timp ce aceasta se află cu
fața în jos , de exemplu, nu vor putea fi detectate. De asemenea , o palmă cu fața în sus poate fi
confundată cu o palmă cu fața în jos în cazul unor întoarceri bruște a palmei. Test. O alta
proprietate importantă a clasei Hand este Confidence . Aceasta indică cât de bine datele
observate se încadrează în modelul intern.
În lista de obiecte de tip Hand a obiectului Frame pot exista mai mult de doua elemente
în cazul în care în câmpul de vizualizare al dispozitivului Leap Motion sunt vizibile și mâinile
altui utilizator sau obiecte care au forma asemănătoare mâinilor. Pentru o urmărire optimala a
obiectelor se recomandă prezența a cel mult două mâini în zona de observ are.
Pentru reprezentarea brațului , sistemul Leap Motion folosește clasa Arm . Aceasta
furnizează informații despre orientarea, lungimea, lățimea și capetele unui braț. Atunci când
cotul utilizatorului nu este vizibil în cadru, sistemul aproximează poziția acestuia bazându -se
pe observațiile anterioare și pe proporțiile tipice ale corpului uman.
Sistemul Leap Motion oferă informații despre fiecare deget al fiecărei mâini din cadru.
Degetele sunt reprezentate de către clasa Finger . Asemănător celorlalte obiec te urmărite de
către sistem, caracteristicile degetelor sunt la rândul lor aproximate în cazul în care acestea nu
sunt vizibile. Degetele sunt identificate după tipul lor: degetul mare, arătător, mijlociu, inelar
si cel mic (respectiv: thumb, index, middle , ring, and pinky ).
Poziția vârfului și direcția generală înspre care un deget este îndreptat este dată de către
proprietățile TipPosition și Direction [Figura 3]. De asemenea, clasa Finger deține informații
despre cele 4, resp ectiv 3 în cazul degetului mare, oase anatomice din care este format un deget.
Figura 4 Figura 3
11
Fiecare os este reprezentat de către un obiect de tipul Bone . Acestea sunt , în ordine de la baza
mâinii spre vârful degetelor :
metacarpal (metacarpian),
proximal (falangă proxi mală),
intermediate (falangă medială)
distal (falangă distală).
De observat este faptul că modelul sistemului Leap Motion diferă de modelul anatomic
al unei mâini în cazul degetului mare. În realitate, degetul mare este format doar din 3 oase,
lipsind fa langele medial. Cu toate acestea, pentru ușurință în programare, modelul degetului
mare conține încă un os de tip metacarpian de lungime 0 pentru ca toate degetele indiferent de
tipul acestuia să conțină câte 4 oase componente . În urma acestui lucru, osul metarpian din
punct de vedere anatomic este de tipul proximal iar cel anatomic proximal este de tipul medial
în cadrul modelului Leap Motion.
Înafara de mâinile unui utilizator, sistemul Leap Motion mai poate urmări și diferite
instrumente. Acestea tre buie să aibă forma cilindrică și să fie subțiri, mai bine zis, să semene
cu un creion. În comparație cu un deget, aceste instrumente trebuie să fie mai lungi, mai subțiri
și mai drepte. Instrumentele sunt definite de clasa Tool .
Figura 5
12
Folosind toate datele de pana acum, sistemul Leap Motion poate recunoaște diferite
gesturi făcute cu mâna sau cu degetele [Figura 5]. Acestea sunt observate pentru fiecare deget
sau instrument în parte , prezent în scenă. La momentul actual, patru mișcări s unt recunoscute
de către sistem:
Cerc – o mișcare circulară a unui deget
Glisare – o mișcare liniară lungă a mâinii și degetelor acesteia
Apăsare a tastei – o mișcare a unui deget asemănătoare cu apăsarea unei taste a
unei tastaturi
Apăsarea ecranului – o mișcare de apăsare asemănătoare atingerii unui ecran
tactil vertical
Fiecare din cele patru gesturi are câte o clasă specifică derivată din clasa Gesture .
Pentru a activa ace astă funcționalitate, la inițializarea sistemului Leap Motion trebuie specificat
că se dorește și detecția gesturilor.
Dacă nu se dorește o detecție exactă a elementelor din scenă ci doar o aproximație a
mișcărilor de bază . Aceste mișcări presupun scalare, rotație și translație. Aceste mișcări sunt
calculate între doua obiecte de tip Frame sau Hand . Aceste date sunt folositoare atunci când
vrem ca utilizatorul să poată aplica diferite transformări asupra unor obiecte din aplicație și nu
dorim să urmărim fiecare mână și deget din scenă.
Pe lângă datele prelucrate de către sistemul Leap M otion , se pot prelua imaginile
neprelucrate direct de la senzorii și camerele dispozitivului. Aceste imagini conțin date pentru
corecția distorsiunii imaginii cauzate de lentile sub forma unor puncte de calibrare. Formatul
imaginilor este alb -negru, reprez entând valorile intensității luminoase infraroșu .
2.3 Microcontrolere
Un microcontroler este un mini calculator într -un singur circuit integrat. Mai sunt
numite și sistem pe un cip. Un astfel de dispozitiv conține unul sau mai multe procesoare,
memorie și intrări /ieșiri programabile. Microcontrolerele sunt folosite in sisteme dedicate cât
și în dispozitive autonome de mici dimensi uni cum ar fi dispozitive medicale implantabile,
telecome nzi, jucării, diferiți roboti și utilaje. Cum plaja de aplicabilitate e ste mare, și
13
performanțele acoperă o gamă largă de specificații, înce pând de la frecvente de 4 kHz până la
peste 1 GHz.
Un micro controler este de obicei caracterizat de numărul de pini generali de
intrare/ieșire (GPIO – general purpose input/output ). De as emenea, pinii uni microcontroler
sunt împărțiți în pini analogici sau digitali. Acești pini sunt programabili software într -una din
cele doua stări, de intrare sau de ieșire. În cele mai multe cazuri sunt folosiți ca și pini de intrare
pentru citirea difer itor senzori. Î n modul de ieșire pot fi controlate LED -uri, motoare sau
indirect, alte dispozitive de putere mare. Cum mulți senzori produc semnale analogice, un
microcontroler are nevoie și de un convertor analog digital. O caracteristică mai puțin întâln ită
este prezența unui convertor digital analog. Pe lângă convertoare, multe microcontrolere au
incorporate cronometre folosite la generarea de întreruperi la intervale regulate de timp. Un
altă trăsătură importantă este prezența unui bloc PWM, care reduce presiunea asupra
procesorului atunci se dorește comanda unor motoare de exemplu. De multe ori, valorile
analogice la ieșire sunt generate sub forma semnalelor PWM , eliminând astfel nevoia unui
convertor digital analog . Pentru comunicația cu alte dispoziti ve, microcontrolere au incluse și
un bloc UART ( Universal Asynchronous Receiver/Transmiter), reducând astfel resursele
necesare procesorului pentru realizarea acestui lucru. Acest lucru permite comunicarea in
diferite formate digitale cum ar fi USB, I2C, SPI, folosite de alte dispozitive.
La început, programarea acestora se făcea in cod mașină, dar cu timpul s -a trecut la
limbaje de nivel înalt cum ar fi C/C++, Python, JavaScript etc. Mulți dintre producătorii
microcontrolerelor produc și oferă programele necesare programării dispozitivelor proprii
pentru o adopție mai ușoară de către programatori. Microcontrolere recente oferă funcții de
depanare cat și manipularea stării interne a acestuia în timp ce rulează.
Printre cele mai cunoscute și ușor accesibile microcontrolere ce pot fi folosite la o gamă
foarte l argă de aplicații sunt Arduino ș i Raspberry Pi. Cu acestea s -au realizat proiecte de la
automatizarea locuințe lor , roboți autonomi ș i până la televizoare deștepte .
14
2.3.1 Arduino
Arduino este o platf orma open -source de electronice bazată pe o folosire ușoară, pentru
a putea fi accesibile și unor persoane începătoare. Programarea se face într -un limbaj foarte
asemănător și bazat pe C/C++. De asemenea se oferă si propriul IDE, Arduino Software (IDE)
[Figura 7] care este disponibil pe cele 3 sisteme de operare, Windows, Linux și Macintosh
OSX. De asemenea, este disponibil și un editor online, accesibil dintr -un browser. În cazul în
care nu dorim să programăm în Arduino Software ( IDE) și dorim un editor cu mai multe
funcționalități, există de exemplu plug -inul Visual Micro pentru Visual Studio sau extensia
Platform IO pentru editorul Atom.
Fiind o platformă open -source, se găsesc o mulțime de librării și exemple de folosire a
diferitor senzori și dispozitive compatibile cu plăcile Arduino în mediul online , lucru ce ajută
în special persoanele care abia au intrat în acest ecosistem .
Fișierele sursa pentru Arduino au extensia .ino și sunt denumite schițe (sketch) . Acest
fișier trebu ie să conțină cele doua funcții importante pentru a putea fi compilat, acestea fiind
setup() și loop() [Figura 7]. Funcția setup() este apelată o singură data la inițializarea plăcii ,
iar funcția loop() , după cum îi spune și numel e, rulează în continuu la nesfârșit, fiind apelată
după terminarea funcției setup() .
Setarea unui pin digital în modul de intrare sau de ieșire se face cu ajutorul funcției
pinMode() care primește ca parametrul numărul pinului din fișa tehnica (ex ‘2’ pen tru pinul
Figura 7 Figura 6
15
nr. 2) și modul în care dorim, definit de constantele INPUT și OUTPUT . Pentru citirea și
scrierea pinilor digitali avem funcțiile digitalRead() și respectiv digitalRead() . Asemănător
pentru pinii analogici avem funcțiile analogRead() și respectiv analogWrite() . Funcția
analogWrite() este suportată doar de anumiți pini ai plăcilor Arduino deoarece aceasta
generează un semnal de tip PWM. Foarte puține plăci de dezvoltare Arduino suportă generarea
unor semnale cu adevărat analogice din cauza lipsei c onvertoarelor digital analogic.
Prin folosirea funcțiilor delay() și delayMicroseconds() se pot introduce întârzieri în
sistem . Cu funcțiile milis() și micros() se află informații despre timpul sistemului , având ca și
referință momentul în care placa a fost alimentată sau resetată .
Plăcile Arduino suportă activarea și dezactivarea întreruperilor. Dezactivarea
întreruperilor va face ca anumite funcții legate de contorizare și timp să nu mai funcționeze
corect și comunicația poate fi ig norată în cazul în car e aceasta este bazată pe întreruperi. Cu
toate acestea, dezactivarea întreruperilor permite executarea cât mai rapidă a unei secțiuni
critice din program. Pentru activarea și dezactivarea întreruperilor se folosesc funcțiile
interrupts() și respectiv noInt errupts() .
O altă proprietate a plăcilor Arduino este suportul pentru întreruperile externe. În
funcție de tipul de placă Arduino, doar anumiți pini suportă întreruperi externe . Acest lucru
permite atașarea unei rutine fără parametri și care nu returnează nimic unui pin cu suport pentru
întreruperi externe care să se execute atunci când valoarea pinului respectiv îndeplinește o
anumita condiție. Constantele predefinite care specifică când o rutină de întrerupere să se
execute sunt: LOW , CHANGE , RISING , FALL ING și HIGH . Atașarea unei rutine de
întrerupere se face folosind funcția attachInterrupt() . Rutinele de întrerupere nu pot fi
întrerupte la rândul lor decât în cazul în care permiten noi acest lucru folosind funcția
interrupts() . În interiorul acestor rut ine de întrerupere valoarea returnată a funcției milis () nu
se va mai incrementa iar funcția delay() nu va mai funcționa. Pentru a partaja datele între rutina
de întrerupere și programul principal se folosesc variabile globale declarate sa și volatile .
Pentru detaș area unei rutine de întrerupere se folosește funcția detachInterrupt() .
2.3.2 Raspberry P i
Raspberry Pi reprezintă o serie de calculatoare integrate pe o singură placă de
dezvoltare, fiind dezvoltate în Regatul Unit de către Fundația Raspberry Pi pentru a promova
16
știința calculatoarelor în scoli. Modelul original a fost mult mai popular decât se așteptau, fiind
cumpărat și în alte piețe decât cea țintă. Dimensiunea acestor calculatoare sunt apropiate de
cele ale unui card bancar. Cele mai actuale modele sunt Raspberry Pi 3 [Figura 8] și Raspberry
Pi Zero W. Succesul acestora este datorat și prețului mic, fiind de 35$ pentru Raspberry Pi 3 și
respectiv 10$ pentru Raspberry Pi Zero W.
Hardware -ul acestor placi este performan t, putând fi considerat un mini calculator,
având posibilitatea rulării unui sistem de operare, conectarea oricărui dispozitiv pe interfața
USB a acestuia, accesarea internetului cat și conectarea unui display.
Primul model Raspberry Pi avea un procesor AR M cu un singur nucleu de 700 MHz și
procesor grafic dedicat pe când Raspberry Pi 3 are un procesor ARM pe 64 de biți cu patru
nuclee, funcționând la o frecvență de până la 1.2GHz. Procesoarele plăcilor Raspberry Pi
suportă over -clocking -ul, dar fiind nevoi e și de o metodă răcire. Capacitatea memoriei RAM
variază de la 256 MB până la 1GB , fiind partajată atât CPU -ului cat și GPU -ului. Conexiunea
la internet se realizează prin conectarea prin USB a unor adaptoare Ethernet sau WiFi pentru
modelele vechi, sau d irect prin portul Ethernet sau chipul WiFi integrat în cazul modelelor noi.
Chipul WiFi integrat permite și conexiunea Bluetooth. Controlerul video generează rezoluții și
poate decoda video -uri până la HD și Full HD , conexiunea cu monitorul fiind prin inte rmediul
portului HDMI . Scăzând frame -rate-ul se pot obține și rezoluții mai mari decât Full HD, dar
asta nu presupune că GPU -ul poate decoda video -uri la astfel de rezoluții. Până în momentul
actual, nici un model Raspberry Pi nu conține un ceas de timp re al integra t. Pentru aceasta,
Raspberry Pi poate prelua acest timp de pe un server în cazul prezenței unei conexiuni la
internet sau poate fi introdus de către utilizator la pornirea acestuia. Pentru stocare a datelor și
a sistemului de operare este folosit un slot pentru un card MicroSDHC iar de la modelul
Raspberry Pi 3 se poate încărca sistemul de operare și direct de pe un dispozitiv USB. Pentru
conectarea senzorilor și a altor dispozitive hardware de nivel jos, plăcile Raspberry Pi au cate
40 de pini dintre care 24 sunt GPIO pentru I/O, restul având funcții specifice pentru interfețe
de comunicație și alimentare sau împământare. Fiecare pin GPIO poate fi configurat ca și pin
de întrerupere, în funcție de evenimente, sensibil la nivelul de tensiune sau c and acesta
tranzitează din HIGH în LOW .
17
Fundația Raspberry Pi recomandă folosirea a Raspbian, o distribuție de Linux, ca și
sistem de operare. Alte sisteme de operare populare pentru Raspberry Pi sunt Ubuntu MATE
și Windows 10 IoT Core. Pe lângă aceastea , mai sunt o mulțime de sisteme de operare mai
mult sau mai puțin generale sau dedicate unui anumit scop cum ar fi imprimarea 3D, server,
desktop sau network routing.
Cum Raspberry Pi folosește un sistem de operare, programarea acestuia, presupune de
fapt scrierea unei aplicații software ce rulează sub acel sistem. Acest lucru permite folosirea
diferitor limbaje de programare, IDE -uri și SDK -uri pentru acest lucru.
Pentru alimentarea sistemului Raspberry Pi este nevoie de o sursa de curent de 5V la
2.5A pen tru a putea alimenta atât placa cât și dispozitivele periferice conectate la aceasta.
2.4 Windows 10 IoT
2.5 SPI interface?
Figura 8
18
3. Rezolvarea temei de proiect 40 – 50 pagini
3.1 Cercetări în domeniu
3.1.1 Gesture Control of Drone Using a Motion Controller
Autori:
Ayanava Sarkar, Ganesh Ram R.K, Ketul Arvindbhai Patel, Geet Krishna Capoor
Ideea principală:
În acest studiu, prezentăm punerea în aplicare a utilizării unui controler de mișcare
pentru a controla mișcarea unei drone prin simple gesturi umane. Pentru această implementare
am folosit Leap Motion ca și controler de mișcare și drona Parrot AR 2.0. Drona Parrot AR
este un rotor cu patru elice, gata de a fi folosită după ce a fost cumpărată și care are un sistem
Wi-Fi la bord. Drona Parrot AR este con ectat la calculator prin Wi -Fi, iar controlerul Leap
Motion este conectat direct la calculator prin portul USB. Controlerul de mișcare Leap Motion
recunoaște gesturile mâinilor utilizatorului și le transmite calculatorului . Calculatorul rulează
ROS (Robot Operating Syst em) în Linux, care este folosit ca și platformă pentru această
implementare. Python este limbajul de programare utilizat în interacțiunea cu drona Parrot AR
pentru a transmite gesturile simple ale mâinii. În implementarea noastră, am scris cod Python
pentru a interpreta gesturile mâinilor capturate de controlerul Leap Motion și le transmitem
pentru a controla mișcarea dronei Parrot AR prin aceste gesturi [3].
Rezultate :
19
3.2 Proiectarea sistemului – 10 pagini
3.2.1 Anali za și specificarea cerințelor
Detecția gesturilor utilizatorului aplicației se va face cu ajutorul controlerului Leap
Motion. Acest lucru va presupune implementarea SDK -ului aferent controlerului Leap Motion
într-o aplicație desktop care să interpreteze , să prelucreze comenzile utilizatorului și să le
transmisă mai departe dronei.
Drona pe care dorim să o controlăm cu controlerul Leap Motion este o dronă ieftină,
accesibilă oricui și de asemenea fabricată în China. Ca multe astfel de drone, cum a fost
preze ntat și în capitolul 2.1 al acestei lucrări de diplomă, aceasta are un protocol personalizat
de control radio. Aceste protocoale personalizate nu sunt documentate în mediul online și acest
lucru face grea implementarea acestora. Chiar daca am reuși acest l ucru, vom reuși doar
controlul unui singur model de dronă sau dispozitiv comandat prin radio. O altă piedică pe care
am întâlnit -o în această direcție de dezvoltare este că pe piață există mai multe modele de
circuite radio folosite în fabricarea dispoziti velor comandate prin radio. Dacă am fi continuat
în această direcție, pentru a putea satisface una din cele mai importante cerințe, aceea de a putea
adapta ușor soluția curentă la dispozitivele actuale, ar fi trebuit sa implemen tez cât mai multe
din acele protocoale specifice fiecărui dispozitiv, inclusiv prezența mai multor circuite radio și
acest lucru nu ar mai fi fost în temă cu titlul lucrării.
Astfel, direcția de dezvoltare în care am mers a fost găsirea unei soluții ce presupune o
ușoară modificare a telecomenzii dispozitivului. În acest mod, prin câteva operații, ori care
telecomandă poate fi ușor modificată pentru a putea fi interfațată cu modul ul de comandă prin
gesturi.
20
Telecomenzile uzuale ce se găs esc în comerț au la bază de preluare a comenzil or de la
utilizator prin intermediul a două joystick -uri [Figura 10]. Fiecare dintre a cestea permit
mișcarea pe doua axe. Principul ce stă la baza acest ora este o rezistență variabile care este
modificată, în mod mecanic, de către utilizator [Figura 9]. Mai bine zis, circuitul electric al
unei axe al joystick -ului este de fapt un divizor de tensiune [Figura 11]. Uitându -ne la Figura
11, putem considera rez istența R 1 ca fiind partea de deasupra acului albastru , iar rezistența R2
partea de sub acul albast ru. Cum (R1 + R2) și tensiunea U 1 vor fi constante, tensiunea U 2 va fi
proporțională cu rezistența R2 . Ideea de bază a soluției prezentate în lucrarea de față va consta,
de fapt , în înlocuirea acestor joystick -uri cu potențiometre digitale.
Cum nu vom putea comanda a cele potențiometre digitale direct cu ajutorul
calculatorului, vom avea nevoie de un microcontroler care să realizeze acest lucru. Acest
microcontroler va prelua comenzile de la calculator și va comanda potențiometrele digitale. De
asemenea dorim ca acest microcontroler să poată comunica ușor , fără fir, atât cu un calculator
cât și cu un alt dispozitiv mobil , cum ar fi un smartphone sau smartwatch.
Ca și concluzie al acestui subcapitol, vrem:
Să înlocuim joystick -urile telecomenzii dronei cu potențiometre digitale
Figura 10 Figura 9
𝑈2=𝑅2
𝑅1+𝑅2𝑈1
Figura 11
21
Să realizăm o aplicație desktop care să interpreteze și să prelucreze comenzile
utilizatorului, care apoi să fie transmise microcontrolerului
Să realizăm o aplicație pentru un microcontroler care să primească comenzile
de la calculator și sa coman de mai departe potențiometrele digitale
Comunicația între cele două aplicații să fie fără fir
3.2.2 Logica implementării
Hardware .
În primul rând trebuie să alegem cu ce potențiometre vom lucra. Din păcate, singurele
potențiometre digitale accesi bile au fost modelul MCP4131 [Figura 12], fabricate de către
Microchip Technology. Fiecare dintre acest chip conține câte o singură rețea de rezistoare
rezultând că vom avea nevoie de 4 astfel de chip -uri. Aceste potențiometre dig itale sunt
comandate printr -o interfață SPI și nu suportă daisy -chaining. Ieșirea fiecărui potențiometru va
fi legată la intrările corespunzătoare joystick -urilor telecomenzii. Acestea vor corespunde celor
patru comenzi ce caracterizează controlul dronei: throttle, roll, pitch și yaw.
În cazul modului de comunicație fără fir avem de ales doar între Wi -Fi sau Bluetooth ,
din moment ce acestea sunt suportate nativ de orice calculator . Din moment ce dorim ca
microcontrolerul nostru să poată fi conectat și la al te dispozitive decât calculatorul, vom alege
Bluetooth -ul ca și mod de comunicare fără fir. Un microcontroler care îndeplinește toate aceste
cerințe – Bluetooth, interfață SPI – fără plăci de extensie adiționale este Raspberry Pi 3.
Figura 12
22
Pentru a putea realiza ușor prototipul magistralei SPI dintre Raspberry Pi 3 și a
celorlalte conexiuni necesare celor 4 potențiometre digitale, vom folosi o placă breadboard și
fire de legătură tată -tată și tată -mamă. De asemenea vom mai avea nevoie și de accesul facil la
pinii controlerului Raspberry Pi 3 din moment ce acesta se va afla într -o carcasă, și pentru
aceasta vom folosi un cablu de extensie.
Software .
Sistemul de operare ce va rula pe Raspberry Pi 3 este Windows 10 IoT. Acest lucru va
permite folosirea aceluiași li mbaj atât pentru aplicația ce va rula pe Raspberry Pi cât și pentru
aplicația ce va rula pe calculator. Limbajul în care vom programa este C# .
Din moment ce pe Raspberry Pi, de cele mai multe ori nu vom avea acces la interfața
vizuală cu utilizatorul, apli cația de pe acesta va trebui să fie cât mai simplă. Din acest motiv,
aplicația ce rulează pe Raspberry Pi [Figura 13] va accepta orice cerere de conexiune prin
Bluetooth. Aceasta va funcționa ca un server ce așteap tă conectarea unui singur client. Când
un client s -a conectat, acesta va începe să preia mesajele primite , le va decodifica și apoi va
comanda mai departe cele patru potențiometre digitale prin interfața SPI.
Aplicația de pe calculator [Figura 14] va trebui să se conecteze la microcontrolerul
Raspberry Pi. După ce conexiunea s -a realizat, aceasta va începe să interpreteze comenzile
primite sub formă de gesturi de la utilizator și să le transmită mai departe microcontrolerului.
De la controlerul Leap Motion avem nevoie de poziția mâinii , normala și direcția acestea.
Aceste date trebuie prelucrate astfel încât să reprezinte o comandă validă pentru cele 4
potențiometre digitale.
23
3.2.3 Arhitectura sistemului
În primul rând trebuie să realizăm arhitectura hardware a sistemului. Sistemul hardware
va fi alcătuit din microcontrolerul Raspberry Pi 3, cele patru potențiometre și telecomanda
modificată a dronei . Astfel trebuie realizată magistrala SPI și alimentarea celor patru
potențiomet re digitale. Cum potențiometrele folosite nu suportă daisy -chaining, vom avea
nevoie de câte un pin de CHIP SELECT pentru fiecare dintre acestea. Pinii corespunzători
fiecărui potențiometru sunt cei din Tabelul 1.
Potențiometru d igital MCP4131
Pin # Nume Pin Descriere
1 𝐶𝑆 CS, sau Chip Select, numit și SS (slave select) este
pinul prin care se selectează chip -ul curent prin interfața SPI .
Este activ în LOW . Când pe aces t pin este un sem nal LOW
înseamnă că chip -ul este sele ctat iar HIGH înseamnă că nu este
selectat .
Figura 14 Figura 13
24
2 SCLK SCLK este pinul Shared/Serial Clock. Reprezintă linia
de ceas a magistralei SPI .
3 SDI/SDO Acești pin sunt pinii de date de intrare și de ieșire , de
asemenea cunoscuți ca MOSI și MISO.
4 VSS Acesta este pinul de împământare . Se conectează la
GROUND.
5 PA0 Un terminal al potențiometrului . De obicei aici se
alimentează cu HIGH.
6 PW0 Intre acest pin si pinul PB0 vom avea tensiunea
variabilă care am comandat -o potențiometrului .
7 PB0 Al doilea terminal a l potențiometrului . De obicei se
conectează la GROUND.
8 VCC Este pinul de alimentare al potențiometrului .
Tabelul 1
Cum tensiunile de pe pinii microcontrolerul Raspberry Pi sunt de 3.3V cu excepția unor
pini de ieșire pentru al imentare de 5.0V, potențiometrele noastre vor trebui alimentate tot la
3.3V pentru a funcționa corect. Astfel pinii 8 al fiecărui potențiometru vor fi conectați la o
ieșire de 3.3V PWR iar pinii 4 la un GND al microcontrolerului Raspberry Pi.
Microcontrole rul Raspberry Pi 3 are 2 interfețe pentru magistrale SPI [Figura 15], SPI0
și SPI1 . Vom alege magistrala SPI1 a acestuia. Această magistrală SPI are nativ doar un singur
pin de CS , SPI1 CS0 respectiv pinul GPIO 16. Cum în proiectu l nostru avem nevoie de patru
pini pentru CS, înseamnă că nu vom putea folosi acest pin. Toți pinii 2 ai potențiometrelor vor
fi conectați la pinul GPIO 21 iar pinii 3 la pinul GPIO 20, care reprezintă SPI1 SCLK respectiv
SPI1 MOSI . Pinul GPIO 19 nu este f olosit deoarece nu vom citi nimic de la cele patru
25
potențiometre. În continuare , mai avem nevoie de încă patru pini pentru pinii CS, de exemplu,
GPIO 5, GPIO 6, GPIO 13 și GPIO 26.
Tensiunea între terminalele PA0 și PB0 ale potențiometrelor este independ entă de
tensiunea de alimentare a acestora . Tensiunea acest a va depinde de tensiunea cu care sunt
alimentate joystick -urile telecomenzii. Pentru a afla această tensiunea, ea trebuie măsurată cu
un voltmetru la bornele unei axe ale un ui joystick. Tensiunea aceasta în cazul telecomenzii cu
care am realizat acest proiect este de 3.3V . De aceea, vom lega pinul 5 al potențiometrului tot
la unul din pinii 3.3V PWR al microcontrolerului Raspberry Pi, iar pinul 7 la GND.
Pinii 6 ai potențiometrelor, respec tiv PW0 v or reprezenta ieșirile acestora ce vor fi
conectate la intrările telecomenzii pentru cele patru comezi: throttle, roll, pitch și yaw.
Figura 15
26
Pentru a avea același nivel de tensiunea între telecomandă și controlerul Raspberry Pi
3, mai trebuie încă o conexiunea între un pin GND al acestuia și GROUND -ul telecomenzii.
Realizând toate conexiunile electrice de mai sus, s chema rezultată este cea din Figura
16. În schema respectivă se poate observa magistrala SPI, modul de alimentare al
potențiometrelor digitale și cele 5 fire care vor fi conectate la telecomandă. Schema a fost
realizată folosind programul Fritzing. Legenda schemei este următoarea:
Fir roșu – 3.3V
Fir negru – GROUND
Fir alb – CS pentru fiecare dintre cele patru potențiometre digitale
Fir albastru – SPI1 SCLK
Fir portocaliu – SPI1 MOSI
Fir verde – semnalul de ieșire al potențiometrelor digitale
Figura 16
27
– Arhitectură module software
– software pe pc
– diagrama clase
– explicatii cu ce face fiecare metoda in mare
– software pe R PI
– diagrama clase
– explicatii cu ce face fiecare metoda in mare
– shared code between the two projects
– diagrama clase
– explicatii cu ce face fiecare metoda in mare
3.3 Dezvoltarea aplicației – 20 pagini
3.3.1 Mediul de dezvoltare – min 5 pagini (ce tool -uri, ce limbaje, )
– Git pentru versionare
– instalare SDK Leap Motion
– instalare componente necesare pentru dezvoltarea pentru windows iot
– Visual Studio 2017 & Resharper plugin
– configurare proiect desktop
– include Leap Motion sdk
– include windows RT sdk
– configurare proiect R Pi + include IoT sdk
28
– configurare proiect cod comun intre cele doua aplicatii
– Windows IoT pentru R Pi
– instalare windwos iot pe R PI
3.3.2 Structura modulelor – cod , explicatii
– aplicație desktop
– cum a m folosit Leap M otion sdk
– implementare a unui Bluetooth client
– implementare procesarea datelor de la leap motion
– secvente cod
– aplicație R pi
– implementarea unui Bluetooth server
– configurarea pinilor, magistralei SPI
– trimiterae comenzilor pe ma gistrala SPI
– secvente cod
– poze la partea hardware
– explicarea cum funcționează un breadboard
3.3.3 Interfata cu utilizatorul (print screen -uri)
– momentan aplicatie de pe R Pi nu are UI
– aplicatie de pe PC e doar consola
29
3.4 Experimente si rezul tate (optional)
– putin delay
– raspuns intarziat
– depinde de tipul, configurația și complexitatea dronei
30
4. Concluzii 3 pagini
4.1 Gradul de indeplinire a obiectivelor
– momentan fara UI pentru aplicatia desktop, aplicatia este consola
4.2 Dificultăț i întâmpinate
– none so far
4.3 Dezvoltări ulterioare
– conectarea la un telefon mobil si controlarea dronei cu accelerometrul
– smartwatch
– control de la distanta mare prin internet
31
5. Bibliografie și Referințe
5.1 Bibliografie
[1] F. Weichert, D. Bachmann, B. Rudak și D. Fisseler, „Analysis of the
Accuracy and Robustness of the Leap Motion Controller,” Sensors, vol. 13, nr. 5,
p. 6380 –6393, 2013.
[2] „Leap Motion – Developer,” [Interactiv]. Available:
https://developer.leapmotion .com/documentation/index.html?proglang=current.
[Accesat Aprilie 2017].
[3] A. Sarkar, G. R. R.K, K. A. Patel și G. K. Capoor, „Gesture control of drone
using a motion controller,” în 2016 International Conference on Industrial
Informatics and Computer S ystems , Sharjah, 2016.
5.2 Imagini
[Figura 1] https://www.leapmotion.com/product/vr/#113
https://www.leapmotion.com/product/desktop#107
[Figura 2]
https://developer.leapmotion.com/documentation/csharp/devguide/Leap_Overvi ew.ht
ml
[Figura 4], [Figura 3]
https://developer.leapmotion.com/documentation/csharp/devguide/Leap_Overv iew.html
[Figura 5]
https://developer.leapmotion.com/documentation/v2/csharp/devguide/Leap_Overview
.html
[Figura 6] https://www.arduino.cc
32
[Figura 7] personal
[Figura 8] https://www.raspberrypi.org
[Figura 9] https://www.quora.com/What -is-the-function -of-a-variable -resistor
[Figura 10] https://www.sparkfun.com/products/9032
[Figura 11] http://www.rasfoiesc.com/inginerie/electronica/Divizorul –
rezistiv13.php
[Figura 12]
https://cdn.sparkfun.com/datasheets/Components/General%20IC/22060b.pdf
[Figura 13] personal
[Figura 14] personal
[Figura 15]
https://developer.microsoft.com/enus/windows/iot/ docs/pinmappingsrpi
[Figura 16] personal
33
6. Anexe
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Special izarea : Calculatoare [604455] (ID: 604455)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
