Reconstrucț ia spațiilor 3D în 2D folosind [621567]

UNIVERSITATEA “PETRU MAIOR” DIN TÎRGU -MUREȘ
FACULTATEA DE ȘTIINȚE ȘI LITERE
SPECIALIZAREA: INFORMATICĂ

LUCRARE DE LICENȚĂ

Reconstrucț ia spațiilor 3D în 2D folosind
telefonul mobil

Coordonator științific : Student: [anonimizat]. univ. dr. habil. Genge Béla Gidofalvi Csaba

2018

1 UNIVERSITATEA “PETRU MAIOR” DIN TG. MUREȘ
LUCRARE DE LICENȚĂ/DISERTAȚIE
FACULTATEA DE ȘTIINȚE ȘI LITERE
Candidat: [anonimizat]: Gidofalvi Csaba
Programul d e studiu: Informat ică Anul absolvirii : 2018
Conducătorul științific : Viza facultății
Conf. univ. dr. habil. Genge B éla
a) Tema lucrării de licență/disertație :
Reconstrucția spațiilor 3D în 2D folosind telefonul mobil
b) Problemele principale tratate :
– Senzori și analiza datelor de la senzorii platformelor And roid.
– Corectarea erorilor de măsurare.
– Fuziunea de senzori.
– Algoritmi pentru citirea și prelucrarea datelor de la senzori.
– Evaluarea experimentală a aplicației.

c) Bibliografia recomandată :
[1] C.S. Roumenin: Parallel -field Hall microsensors: An overview, Sensor & Actuators, vol. 30, no.
1/2, pp. 77, 1992.
[2] C. Schott, R.S. Popovic: Integrated 3 -D Hall magnetic field sensors, in Transducers’99 Tech.
Dig., Sendai, Japan, p. 168, 1999.
[3] D.H. Titterton: Strapdown inertial navigation technology ( 2nd Edition), Institution of
Engineering and Technology, Piscataway, New Jersey, U.S., 2004.
[4] N. Barbour, R. Hopkins, A. Kourepenis, P. Ward: Inertial MEMS System Applications, NATO
RTO Lecture Series, RTO -EN-SET-116, Low -Cost Navigation Sensors and Int egration
Technology, March 2010.
[5] S. Wiak, K. Smólka, M. Dems, K. Komeza: Numerical modeling of 3D intelligent comb drive
accelerometer structure: Mechanical models COMPEL: The International Journal for Computation
and Mathematics in Electrical and Elec tronic Engineering, Vol. 25 Iss: 3, pp. 697 – 704, 2006.
d) Termene obligatorii de consultații : săptămânal
e) Locul și durata practicii : laboratoare specifice din facultate
Primit tema la data de : 26 Mai 2017
Termen de predare : 22 Iunie 2018
Semnătura directorului de departament Semnătura conducătorului

Semnătura candidat: [anonimizat]

2 CUPRINS
Capitolul 1 – Introducere ………………………….. ………………………….. ………………………….. …. 4
1.1 Scopul lucrării ………………………….. ………………………….. ………………………….. ……. 5
1.2 Structura documentului ………………………….. ………………………….. ………………….. 5
1.3 Problemă rezolvată ………………………….. ………………………….. …………………………. 6
Capitolul 2 – Aspecte tehnologice si teoretice ………………………….. ………………………….. … 8
2.1 Dispozitivele portabile ………………………….. ………………………….. …………………….. 8
2.1.1 Telefoane “Inteligente” ………………………….. ………………………….. …………….. 8
2.1.2 Sistemul de operare Android ………………………….. ………………………….. …….. 9
2.2 Senzori ………………………….. ………………………….. ………………………….. ……………… 13
2.2.1 Accelerometru ………………………….. ………………………….. ………………………… 15
2.2.2 Girometru ………………………….. ………………………….. ………………………….. ….. 19
2.2.3 Magnetometru ………………………….. ………………………….. ………………………… 22
Capitolul 3 – Proiectarea aplic ației ………………………….. ………………………….. ……………… 27
3.1. Cerințe ………………………….. ………………………….. ………………………….. …………….. 30
3.2. Corectare erori ………………………….. ………………………….. ………………………….. … 30
3.2.1. Corectare erori în sistemele de navigație inerțiale ………………………….. … 32
3.2.2. Fuziunea de senzori ………………………….. ………………………….. ………………… 33
3.2.3. Normalizare zgomot ………………………….. ………………………….. ……………….. 37
3.3. Prelucrarea datelor ………………………….. ………………………….. ………………………. 39
3.3.1. Citirea datelor provenite de la senzori ………………………….. …………………. 39
3.3.2. Detectarea și numărarea pașilor ………………………….. ………………………….. 42
3.3.3. Aproximarea navigării în spațiu ………………………….. ………………………….. 48
3.3.4. Desenare după date le scanate ………………………….. ………………………….. ….. 50
3.3.5. Salvare pe dispozitiv ………………………….. ………………………….. ……………….. 51
Capitolul 4 – Inplementarea aplicației ………………………….. ………………………….. …………. 53
4.1. Arhitectura internă a claselor ………………………….. ………………………….. ……….. 53

3 4.1.1. Clase de prelucrare a datelor de senzori ………………………….. ………………. 55
4.1.2. Clase pentru detectare și numĂrare pași ………………………….. ……………… 57
4.1.3. Clase de afișare date ………………………….. ………………………….. ……………….. 59
Capitotlul 5 – Rezultate ………………………….. ………………………….. ………………………….. ….. 61
5.1 Rezultatele masurării da telor reale ………………………….. ………………………….. … 61
5.2 Concluzii ………………………….. ………………………….. ………………………….. ………….. 62
Bibliografie ………………………….. ………………………….. ………………………….. ……………………. 63

4 CAPITOLUL 1 – INTRODUCERE
De-a lungul ultimilor cincizeci de ani, evoluția în tehnologia microelectronică a dat
naștere mai multor ere teh nologice: Mainframe, PC + LAN, Informațională Internet și
Dispozitive Portabile “De ștepte ”.
Era Mainframe: primele mașini de calcu l funcționeau pe tuburi de vid, cu o
capacitate de calcul de aproximativ 400 de înmulțiri pe secundă. Fiind fo arte spațioase și
ineficiente, a pariția tranzistoarelor a adus la o avansare în performațele calcul/cost dar tot
fiind foarte costisitoare de într eținut și rulat. Doar companiile mari/organizațiile
guvernamentale își permit să folosească/intrețină asemenea calculatoare.
Era PC+ LAN: Avansările te hnologice au dus la nașterea primelor microprocesoare. În anul
1971 M.E. Hoff, la Intel, s-a inventat un circuit integrat cu 2300 de tranzistoare care era în
esență echivalent cu unitatea centrală de procesare (CPU) al u nui calculator. CPU pe un cip
a fost cunoscut ca microprocesor. Două cipuri de memorie au fost atașate microprocesorului:
unul care să mute d ate în interiorul și în afar a CPU -ului și altu l care să o fere programul de
comandare a procesului. Computerul rudimentar cu scop general nu numai că putea rula un
calculator complex, dar putea și să efectueze mai multe sarcini î n funcție de programul său.
Prima rețea de calculatoare locală a fost introdusă în 1977, sistemul ARC, componentele
fiind alcătuite di ntr-un procesor de fișiere, procesor de aplicații ș i hub -uri, toate conectate
cu un cablu coaxial.
Avansarea rapidă a tehnologiei micropocesoarelor a dus la accelerarea majoră a vitezei și
reducerea dimensiunilor calculatoarelor. Anul 1980 marchează sfârș itul erei PC+ LAN.
Tehnologia informației a cunoscut cea mai rapidă dezvoltare, schimbând în mod
semnificativ viața oamenilor și aducând mari c ontribuț ii la evoluția economică și socială .
Era informațională Internet: avansarea rapidă a microcalculatoarelor și a cerințelor
de comunicare între microcalculatoare a stimulat foarte mult dezvoltarea informaticii de
rețea și a sistemelor de comunicație prin in termediul computerelor. Technologia LAN s -a
dezvoltat rapid în a doua jumătate a anilor 1980. Interconectarea prin LAN a dus la
dezvoltarea rapidă a Rețelelor de arie largă (WAN). De vreme ce computerele personale au
devenit mai ieftine si mai ușor de folo sit la sfârșitul anilor 1980, oricine deținea un modem
putea intra online pe o rețea WAN. NSFNET a servit ca coloana vertebrală din punct de
vede re tehnic pentru Internet. Internetul reprezintă o rețea formată din mai multe rețele. Est e

5 o colecție unică de rețele în lumea întreaga . Dispozitivele conectate la internet utilizează
standarde compatibile de comunicații și înpartașesc capacitatea de a se conecta reciproc și
de a schimba date.
Era dispozitivelor portabile “de ștepte ”. Avan sările te hnologice rapid e la începutul
secolului XXI au permis calculatoarelor personale să devină tot mai mici, astfel încat
utilzatorul îl p oate lua cu el peste tot. Avansă rile în telecomuni cații au permis ca internetul
să fie accesibil peste tot pe glob cu conexiune fără fir.
În zilele noastre orice informație este disponibil ă cu ajutorul dispozitivelor portabile care
sunt cone ctate la internet. Aceste dispoz itive sunt dotate cu procesoare de viteză de calcul
mare, stocare flash , RAM de viteză mare, senzori pentru detectarea mi șcării și a geolocației.
Apariția acestor dispozitive portabi le (tablete/t elefoane “de ștepte ”) a dus la apariția unui nou
tip de industrie: industria aplicațiilor pentru dispoz itive portabile.
În magazinele de aplicații Google Play și iTunes Store sunt pes te 5 milioane de aplicaț ii.

1.1 SCOPUL LUCRĂRII

Scopul lucrări i este de a crea o aplicație pentru sistemul d e operare Android cu
ajutorul căruia se poate reda , sub forma unui desen pe ecranul telefonul, dimensinile și
formele spațiilor interioare 3D î n 2D.
Utilizatorul telefonului va deplasa telefonul din perete în perete și aplicația va mă sura
ruta parcursă d e către utilizator. Datele vor fi afiș ate pe ecranul telefonului sub forma unui
desen te hnic cu dimensiunile afe rente.
Potențiali i utilizatori ai aplicației sunt: arhitecți, designeri de i nterior, zugravi, parche tari,
agenți imobiliari, evaluatori imobil.

1.2 STRUCTURA DOCUMENTUL UI

Capitolul 1 prezintă câteva noțiuni introductive referitoare la problema dată, scopul lucrări i
și setul de cerinț e.

6 Capitolul 2 surprinde aspectele teoretice și exemplifică funcționarea acestora. Prima parte
detaliază noțiuni despre telefoanele “ deștepte ” și sistemul de operare Android. Se contiunuă
cu prezentare a senzorilor: a ccelerometru, magnetometru și giroscopul, p osibil ele erori
generate de acestea și î mbunată țirea acestora cu filtre și fuziunea de senzori.
Capitolul 3 exemplifică inplementarea unui sistem de navigație inerțială (inertial
measurement unit , IMU ) care prelucrează d atele primite de la senzorii dis pozitiv ului și
determină dimensiunile ș i formele spați ului scanat. Se contiună cu afiș area datelor scanat e
sub forma unui desen pe ecran real -time după care se estimează o f orma reală a spațiului
scanat. În ultima parte se prezi ntă stocarea datelor, îmbinarea desenelor scanate și stocarea
acestora în “nor”.
Capitolul 4 conține implementarea sis temului și descrie fiecare componentă cu ajutorul
diagramelor de clase corespunzătoare și a diagramelor de stare ale principalelor clase.
Capitolul 5 prezintă performanțele sistemului și rez ultatele testării în mediul real .

1.3 PROBLEMĂ REZOLVATĂ

Figura 1.1 Metru ș i dispozitiv inteligent 1 2

1 https://upload.wikimedia.org/wikipedia/commons/8/8b/Dual_Scale_Stanley_Tape_Measure.jpg
2 https://upload.wikim edia.org/wikipedia/commons/thumb/e/ee/Nexus_5X.png/124px -Nexus_5X.png

7 Aplicația înlocuiește creio nul, foaia și metrul. Utilizatorul din tr-o singură mă surare
primește î n format digital forma și dimensiunile spaț iului scanat.
Pașii echivalenți analogici ar fi:
– Măsurarea cu metru a fiecărui perete
– Desenarea cu un intrument de scris a măsură torilor
– Adăugarea măsurător ilor corespunzătoare
– Transformarea într -un format digital

8 CAPITOLUL 2 – ASPECTE TEHNOLOGICE SI TEORE TICE
2.1 DISPOZITIVELE PO RTABILE
2.1.1 TELEFOANE “INTELIGENTE”

Figura 2.1 – Dispozitive în trecut și în prezent (sursă 3 1)
Telefonul inteligent este un calculator miniaturizat care se poate ține în mână. Că și
un calculato r deskt op și telefo anele inteligente au un sistem de ope rare dar în plus au și
funcția unui telefon mobil obijnuit, un receptor de rețea celulară mobilă b roadband care
asigură conexiune voce, SMS și internet.
Primele modele de telefoane inteligente au apă rut la începutu l anilor 2000, pentru
început fii nd scumpe și nu prea fe zabile din cauza limitărilor te hnologice.
Telefoanele inteligente au început să prindă expansiune pe piață în a două parte a anului
2012 când 1 miliard de astfel de dispozitive erau în folosință. În anul 20 13 vânzările de
telefoane inteligen te au depășit vânzările de telefoane mobile obijnuite. În zilele no astre
(2018) numărul telefoanelor inteligente a depășit populația pământului, numărul lor fiind de
peste 7.2 miliarde.

3 https://cdn2.geckoandfly.com/wp -content/uploads/2013/10/smartphone -replaced.jpg

9 Pe lângă pro cesor, memoria RAM, memoria flash și procesorul grafic, un telefon
inteligent modern are încorporat e o mulțime de componente hardware cum ar fi: WiFi, ecran
tactil, cameră foto -video, cititor de amprente, senz or GPS, ma gnetometru, gi roscop,
accelerometru, senzor de priximitate, barometru.
Cu ajutorul sistemului de operare și al componentelor hardware telefoanele inteligente pot
înlocui fun cțiile a peste 30 de echipamente fizice/analoage prin rularea programelor numite
aplicații.
Aplicațiile sunt programe software concepute pentru a rula pe sistemele de operare
a telefoanelor inteligente, numite și App -uri de la termenul “software application”.
Cele mai utilizat e sisteme de operare pe telefoane inteligent e sunt:
 Android (dezvoltat de către google)
 iOS (d ezvoltat de către Apple computers)
 Windows mobile / Windows 10 mobile (dezvoltat de către Microsoft)
 BlackBerry OS (dezvoltat de către BlackBerry Limited)
 Alte sisteme de operare cu cotă de piață mică (Symbian, Firefox OS, Bada, Ubuntu
touch)

2.1.2 SISTEMUL DE OPERARE A NDROID

Android Inc. a fost fondat în octombrie 2003 de către Andy Rubin, Rich Mine r, Nick
Sears, și Chris White. Andy Rubin a descris proiectul ca având un potențial extraordinar în
a dezvolta dispozitive mai inte ligente care sunt mai conștiente de preferinț ele și locația
utilizatorului.
Primele intenții a le companiei a u fost de a dezvolta un sistem de operare avansat pentru
camerele digitale, în cele din urmă com pania a decis că piață camerelor digitale nu este una
suficient de mare p entru țelurile sale și au direcționat eforturile pentru a dezvolta Android
că și un sistem de operare pentru dispozitivele de mână care să rivalizeze Symbian (Nokia)
și Windows Mobile (Microsoft).
În iulie 2005 Android Inc. a fost achiziționat de către Go ogle pentru $50 milioane.
La Google echipa a dezvoltat sistemul de operare Android bazat pe un kernel Linux.

10 Alianță “Open Handset Alliance” formată de comapaniile Google, HTC, Motorola,
Samsung, Sprint, T -mobile, Qualcomm și Texas Intrumets a dezvăluit în 2007 că vor
dezvolta primul sistem de operare open source pentru telefone inteligente. Primul telefon
inteligent care rula sistemul de operare Android a fost HTC Dream anunțat pe 23 Septembrie
2008.
Printre elementele caracteristice ale sistemului Andro id se num ără urmă toarele:
• Platfor mă open -source. Android este un produs open source, distribuit sub licența
Apache License versiunea 2 (cu excepția nucleului de Linux care se află sub licență GPL
versiunea 2), o lice nța destul de permisivă ce oferă liberta tea de a copia, distribui și
modifica conținut ul în mod liber fără nici un cost de licențiere, rămânând la alegerea
dezvoltatorilor dacă distribuie sursele modificate sub aceeași licența sau nu. Singurul
element din Android care face excepție de la această regulă este nucleul de Linux care
se află sub licență GPL versiunea 2 ce presupune că orice modificare a surselor trebuie
să fie făcută publică și ditribuită în continuare gratuit sub licenta GPL versiunea 2.
• Posibilitatea rulării pe o gamă largă de hardw are curente și viitoare. Toate programele
sunt scrise în Java și executate pe mașina virtuală Dalvik, existȃnd posibilitatea portării
codului pe ARM, x86 și alte arhitecturi. Interfețele utilizator pot fi adaptate la orice
rezoluție pe care o pot avea disp ozitivele.
• Arhitectură bazată pe comopenete ce permite reutilizarea componentelor în diverse
aplicații precum și înlocuirea acestora.
• Oferă suport pentru grafică 2D și 3D utilizâ nd Open GL ES 1.0
• Posibilitatea de a stoca datele sub forma unor baze de date de tip SQLite.
• Suport pentru formate media uzuale audio, video, și imagini (MPEG4, H.264, MP3,
AAC, AMR, JPG, PNG, GIF)
Versiuni:
Fiecare versiune de Android lansată reprezintă un nivel API (API level) și este un criteriu
important de care trebuie ținut co nt în procesul de proiectar e a aplicațiilor pentru această
platformă. Astfel, dacă o aplicație este proiectată pentru un nivel API mare co respunză toare
unei versiuni recente de Android atunci aceasta nu va putea funcț iona pe dispozitive ce
rulează versiuni anterioare iar dacă o aplicație este proi ectată pentru un nivel API mic,
aceasta va putea rula pe mai multe dispozitive ce au instalate versiuni superioare d e Android
însă nu vor beneficia de toate facilitățile oferite de versiunile superioare.

11 În tabelul 2.1 sunt enumerate toate versiunile de Android precum și răspăndirea în
rândul dispozitivelor ce rulează pe această platformă.

Figură 2.1 Grafic distribuție versiuni Android ( preluat 4 )
Android es te structurat, conform figurii 2 .2 pe mai multe nivele, fiecare nivel depinzând de
functionalitățile oferite de nivelul inferior acestuia.

4 https://developer.android.com/about/dashboards/index.html

12
Figura 2 .2 Structura Android – Arhitectura sistemului 5
Android este structurat pe mai multe nivele, fiecare nivel depinzând de
functionalitățile oferite de nivelul inferior acestuia.

5 https://developer.android.com/guide/platform/index.html

13 Linux Kernel – la baza arhitecturii Androi d se află un nucleu de Linux care asigură
functionalități de bază ale sistemului precum gestionarea sistemului de fiș iere, gestionarea
proceselor, a memoriei, a elementelor ce țin de rețelistică și a driverelor.
Hardware Abstraction Layer (HAL) – asigură o interfață standard care expune
capacitățile hardware al e dispozitivului pentru nivelul mai înalt Java API framework. Este
compus din librării pe mai multe nivele care inplementează c âte o interfață spe cifică tipului
de hardware, cum ar fi modulele cameră sau bluetooth. Când un API apelează accesul la o
componentă hardware, Android încarcă libră ria pentru componenta hardware.
Runtime – fiecare proces va rula cu o instantă a Android Run time (ART). ART este
conceput pentru a rula mai multe maș ini virtuale prin executarea fișiere DEX, un tip de cod
mașină proiectat pentru Android cu un consum de memorie scazută. Compilatori, asemnea
lui Jack, transforma codul Java î n DEX. Caracteristici pr incipale: compilare Ahead -of-time
(AOT) și just -in-time (JIT); cole ctor de "gunoaie" optimizat; suport de depanare mai bună .
Librării C/C++ native – componente ș i servicii, precum ART și HAL, sunt construite
pe cod nativ care necesită aceste libră rii.
Java Api Framewo rk – toate componentele sistemului de operare Android sunt
disponibile printr -un API scris î n limbajul Java. Aceste API -uri formează fundația pe care
se pot construi aplicați ile Android, prin reutilizarea componentelor nucleu, modulare și a
serviciilor.
System Apps – Android vine cu un set de aplicații de bază: e -mail, SMS, calendar,
navigator de interne t, contacte etc. Aceste aplicații de bază nu au un privilegiu spe cial față
de cele intalate de că tre utilizator. Aplicați ile terțe pot înlocui a ceste aplicații de bază. Aceste
aplicații de bază pot furniza dezvoltatorilor o implementare predefinită care se po ate refolosi
în aplicați ile lor.

2.2 SENZORI

Prezentare generală senzori MEMS ( micro -electro -mechanical sensors ).
Sistemele microelectrome canice (Microelectro mechanical Systems – prescurtat MEMS) se
referă la dispozitivele care au o lungime cara cteristică mai mică de 1 mm dar mai mare de 1
micron, ce combină componente electric e și mecanice și sunt fabricate folosind tehnologia

14 de prelucrare în serie a circuitelor integrate. Tehnicile curente de fabricare a MEMS includ
microprelucrare la suprafața a siliciului (surface micromachining), microprelucrarea
siliciului în volum („bul k micromachining”), litografie, electrodepunere, prelucrare prin
descărcări electrice.
Domeniul multidisciplinar a fost martor la o creștere explozivă în timpul ultimei
decade iar t ehnologia progresează la o rată ce o depășește pe cea a înțelegerii fenomenelor
fizice impli cate. Actuatori electrostatici, magnetici, elect romag netici, pneumatici și termici,
motoare, vane, mecanisme cu roți dințate, diafragme și foarfece cu dimensiuni sub 100 de
microni au fost deja fabricate. Aces tea au fost folosite ca senzori pentru presiune,
tempe ratură, debit, viteză, sunet și compoziți i chimice, ca și actuatori pentru mișcări lini are
și unghiulare sau ca simple componente pe ntru sisteme complexe cum ar fi roboți, laborat or-
pe-un-cip (lab -on-a-chip), micromoto are de caldură și micropompe de caldură.
Prin definiție, cei mai buni senzori s unt proiectați pent ru a asigura perturbații minime
în măsurători. Din această perspectivă, este benefic a mini aturiza senzorii, atât timp cât
raportul semnal -zgomot al dispozitivului poate fi m enținut sau îmbunătățit în urma
miniaturizării .
Fabricația str ucturilor de tip MEMS este aproximativ similară cu fab ricația
tradițională a microcircuitelor integrate. Componentele electronice se realizează prin
tehnologiile specifice circuitelor integrate, în timp ce componentele micro -mecanice se
realizează prin teh nologii de micro -fabricație care constau din succesiuni de operații de
corodare, adăugare de straturi, înlăturare de straturi de sacrificiu etc.
Siliciul este materialul de bază utilizat ca substrat în fabricația MEMS -urilor datorită
caracteristicilor sal e: proprietatea de a forma tipul de rețea cristalină specifică diamantului,
de a avea un coeficient de elasticitate mai mare decât al oțelului și duritatea sa specifică,
care depășește duritatea majorității metalelor. După introducerea siliciului în proces ele
tehnologice de obținere a dispozitivelor MEMS, dimensiunile accelerometrului au fost
foarte mult reduse comparativ cu dispozitivele existente până în acel moment. Astfel, cu
ajutorul tehnicilor de miniaturizare s -a ajuns la obținerea de accelerometre ș i girometre de
dimensiuni de până la câțiva mm3.

15 2.2.1 ACCELEROMETRU

Figura 2.3 – Accelerometru în prezent și în trecut 6 7
În sistemele de navigație inerțială senzorii cei mai populari sunt senzorii
accelerometrici. În continuare e ste prezentată descrierea tehnologiilor și tendințelor actuale
și viitoare în dezvoltarea accelerometrelor miniaturale util izate în sistemele de navigație
inerțială.
Accelerometrele folosesc două metode principale de detecție: 1) deplasarea sau
îndoirea un ei plăcuțe sub acțiunea unei accelerații, plăcuță care joacă rolul de masă seismică,
urmată de o detecție capacitivă sau piezoelectrică, și 2) schimbarea frecvenței unui element
care vibrează în conformitate cu tensiunea sa, influențată de încărcarea masei seismice a
senzorului sub acțiunea accelerației.
Pe baza acestor două metode au fost realizate cinci tipuri diferite de arhitecturi de
accelerometre miniaturizate: pendulul, mișcarea laterală a masei seismice, tipul rezonant, cu
tunel de electroni și cu s uspensie electrostat ică. Clasele de precizie luate în considerare
pentru aplicații sunt: navigații foarte precise, dirijarea pe distanțe mari, sisteme de navigație
cu o precizie de 1nm/oră, armament tactic și aplicații de consum comercial.
În cazul traduct oarelor accelerometrice, cel mai important parametru este parametrul
accelerație. Principiul de la care s -a plecat și care stă la baza funcționării accelerometrelor

6 https://cdn -images -1.medium.com/max/800/1*4z44r2x3 -z_UNQZyzH52Rw.jpeg
7 http:// www.process -controls.com/intertechnology/Kistler/images/8795A.gif

16 este deplasarea unei mase seismice ca urmare a acțiunii unor forțe de inerție, generate în
urma aplicării unei accelerații.
Indiferent de metoda de detecție utilizată, accelerația aplicată unui vehicul în
mișcare, căruia îi este atașat un sistem de navigație inerțială, va fi detectată de accelerometrul
sistemului prin sesizarea apariției unor fo rțe de inerție. Prin integrarea accelerometrelor în
sisteme de navigație inerțială, acestea vor furniza toate informațiile dorite legate de
accelerația aplicată vehiculului.
În continuare este prezentată o sumară introducere în fizica navigației inerțiale, prin
descrierea mărimilor fizice care apar ca efect al accelerației aplicate unui vehicul, căruia îi
este atașat cel mai elementar tip de traductor a ccelerometric. Conform Fig. 2.3 : structura
atașată va sesiza accelerația prin modificarea valorilor tensiu nilor interne din resortul de
suspensie și va determina deplasarea masei seismice. Mișcarea masei seismice va fi
amortizată proporțional cu viteza sa față de vehiculul purtător.

Figura 2 .3 Schema simplificată a structurii accelerometrul ui [1]
Dacă vom considera: a accelerația vehiculului pe care este montat accelerometrul,
a⃗ x accelerația masei seismice față de vehiculul purtător, 𝑥(𝑡) deplasarea elem entului seismic
m în urma aplicării accelerației, constanta de elasticitate k , coeficientul de amortizare
vâscoasă dinamică r și forțele care acționează asupra masei seismice în sistemul acesta de
referință neinerțial: forța elastică F⃗ e, forța de amortizare F⃗ a și forța de inerție F⃗ i , rezultă
ecuația vectorială de echili bru al forțelor ( Ecuatia 2.1 ). Prin calcule specifice navigației
inerțiale va fi posibilă aflarea parametrilor care caracterizează deplasarea, direcția, sensul,
viteza și accelerația vehiculului.

17 Ecuația vectorială de echilibru a forțelor este
𝐹 𝑖+𝐹 𝑎+𝐹 𝑒=𝑚𝑎 𝑥 (Ecuatia 2.1 )
unde F⃗ i=ma⃗ , F⃗ a=rⅆx
ⅆt și F⃗ e=kx
Detecția capacitivă
Detecția capacitivă este una dintre cele mai utilizate metode de detecție în cadrul
dispozitivelor MEMS. Traductoarele capacitive au fost realizate cu ajutorul tehnicilor de
miniaturizare, prin intercalarea unor plăci paralele sau a unor condensatori în dispozitive de
tip MEMS.
Metoda de detecție capacitivă, în cazul accelerometrelor construite pe acest
principiu, funcționează astfel: variaț ia electrică a unui curent alternativ într -o rețea
capacitivă produce o variație a tensiunii, respectiv a frecvenței circuitului. Aceasta va
produce o modificare a valorii capacității sistemului și o deplasare a masei seismice a
accelerometrului.
În Fig. 2.3 este prezentat schematic modelul unui accelerometru de tip capacitiv.
Deasupra și dedesubtul plăcii mobile sunt montați doi electrozi. Electrozii și placa mobilă
formează două condensatoare, ale căror capacități se vor modifica odată cu aplicarea unei
accelerații și vor determina deplasarea masei seismice. Mărimile fizice care apar în urma
aplicării unei accelerații asupra sistemului în care se află traductorul capacitiv, raportat la un
sistem de referință neinerțial, sunt: a⃗ și y – accelerația și pozi ția vehiculului purtător, a⃗ x și x
– accelerația și poziția masei seismice față de vehiculul purtător, 𝐹 𝑒, F⃗ a, F⃗ i – forțele: elastică,
de amortizare și de inerție. Modulele celor trei forțe sunt:
Fe=kx , Fa=bⅆx
ⅆt , Fi=ma=mⅆ2y
ⅆt2
Unde k este constanta de elasticitate rezultantă, iar b – coeficientul de amortizare dinamică
(de frecare vâscoasă) .

18

Figura 2.3 – Model de accelerometru capacitiv [1]
De obicei, în măsurarea capacității sunt utilizate dou ă configurații de amplificatoare:
un tampon de tensiune (buffer) și un integrator.
Ambele folosesc amplificatoare operaționale, ca parte a circuitelor lor, ale căror
mărimi de ieșire sunt funcții dependente de variațiile accelerației. Fig. 2.4 reprezintă schema
unui integrator de sarcină cuplat cu un tampon de tensiune și un detector de înfășurătoare.
Detectorul de înfășurătoare este o metodă simplă de demodulare a semnalului,
conceput în scopul obținerii semnalului de interes al senzorului.

Figura 2.4 amplificator detector cu integrator de sarcină [1]

Figura 2.5 Fotografia rezultată în urma scanării unui accelerometru realizată la
microscopul electronic [3]

19 Accelerometre capacitive au răspuns bine curentulu i alterna tiv, dar au întâmpinat
inițial probleme din cauza interferențelor electromagnetice. În timp structurile noi, cum ar fi
cele create pe baza efectului tunel sau cele optice, au reușit do bândirea unor sensibilități mai
ridicate raportate la dimensiuni mici.
Accelerometrele realizate pe baza principiilo r capacitive sunt preferate din
următoarele motive: structura simplă, performanța ridicată, cos turi reduse, pierderi reduse
de energie, sensibilitate ridicată în detecție și sensibilitate scă zută la temperatura m ediului
în care se află. Deși sunt predispuse la interferențe electromagn etice, prin ambalare și izolare
adecvată se reușește protecția lor.
Ulterior cu ajutorul tehnologiilor de micro -fabricație a circuitelor integrate a f ost
dezvoltat micro -accelerometr u capacitiv bidimensional, care detectează accelerația aplicată
unui dispozitiv, în două direcții perpendiculare. Prin montarea de traductoare capacitive
diferențiale multiple se obține sensibilitate crescută. Acest tip de arhitectură este denumit
structur ă de tip pieptene.
Realizarea detecției pe cele două direcții, x și y, nu se f ace simultan, dar semnalul
util nu se pierde, datorită frecvenței mari cu care se face comutarea celor două canale, în
comparație cu periodicitatea cu care se cere informația des pre accelerație și cu viteza de
variație a semnalului de măsurat.

2.2.2 GIROMETRU

În subcapitolul anterior au fost prezentate accele rometrele, senzori utilizați în
navigația inerțială în vederea detecției mișcării de translație a un ui vehiculul, pentru
stabilirea vitezei și poziției acestuia. A doua categorie importantă de senz ori inerțiali sunt
girometrele: acestea sesizează și măsoară mișcarea de rotație, respectiv vite za de rotație
absolută a unui vehicul/nave și furnizează orientarea instantanee pentr u accelerometre, dacă
atât accelerometrele cât și girometrele fac parte din același sistem de navigație inerțial.
Girometrul se poate roti liber în orice direcție și întâm pină o rezistență redusă din
partea forțelor de frecare care acționează asupra lui. C onfiguraț ia de bază a acestui dispozitiv
exploatează legea de conservare a momentului cinetic sau legea inerției de rotație, legi
conform cărora un obiect aflat în mișcare de rotație în jurul unei axe își va continua mișcarea

20 de rotație atât timp cât din e xterior nu se va interpune un vector forță care să îi schimbe
direcția de rotație.
Acest dispozitiv are un spectru larg de aplicare în ingineria spațială, industria
aeronautică, militară și de automobile, în medicină etc.

Figura 2.6 Exemplu de utilizare girometru în aviație [9]
Un exemplu simplu pentru a demonstra utilitatea girometrelor: în avionică, avioanele
se pot deplasa în trei direcții specifice corespunzăt oare celor trei dimensiuni care se observă
în Fig. 2.6. Astfel vor fi neces are de trei girometre, pentru a acoperi unghiurile de girație,
ruliu și tangaj, adică un girometru pentru fiecare grad de libertate (sau "axă"), corespunzător
direcției în care "platforma" se poate deplasa.
În ultimele patru decenii un efort intens de ce rcetare a fost dedicat pentru a proiecta,
optimiza și fabrica diferite tipuri de giroscoape, î n general bazate pe conservarea
momentului cinetic, efectele Sagnac și Coriolis. În ultimii ani dezvoltarea de giroscoape
inovatoare a fost axată pe tehnologiile mi cro-electro -mecanice .
Girometre MEMS
Odată cu dezvoltarea tehnicilor de micro -fabricație MEMS și cu dezvoltarea cristalelor de
cuarț au fost descoperite noi perspective și a f ost posibilă fabricarea acestor dispozitive cu
dimensiuni de până la câțiva milim etri.
În Fig. 2.7 se poate observa modul în car e principiile fizice și numărul componentelor
dispozitivelor micro mecanice s -au transformat de -a lungul timpului.

21

Figura. 2.7 – Evoluția structurilor micro mecanice [10]
Reducerea mărimii elementelor sensibile a creat noi provocări pentru îmbunătățirea
performanțelor senzorilor, având în vedere că, în general, reducerea dimensiunilor senzorilor
atrage după sine scăderea sensibilității, creșterea zgomotului și scăderea capacității de
control a elementelor sensibile. În plus, temperatura variază cu aproximativ 100 ppm/°C la
modulul lui Young pentru siliciu, ceea ce duce la apariția unor probleme serioase legate de
sensibilitatea termică.
În ultimii 20 de ani, în întreaga lume au fost depuse intense eforturi de cercetare,
pentru propunerea, fabricarea și dezvoltarea de gi roscoape de tip MEMS, cu raport
performanță -cost avantajos.

Figura 2.8 – prototip de giroscop de tip MEMS [17]

22 Giroscop ul MEMS , prezentat în Fig. 2.8, este o structură realizată din siliciu puternic
dopat, cu două cadrane susținute de articulații/flexuri torsionale și are libertate de mișcare.
Articulația exterioară permite rotația în jurul axei x a unui cadru rectangular conectat
la suport prin grinzi subți ri. Cadranul interior este o platformă care se poate roti în jurul axei
y. Cadranul exterior este indus electrostatic, în mișcare oscilatorie în afara planului micro –
plăcuței. Amplitudinea oscilației este menținută constantă utilizând electrozi de comandă
acționați automat.
Când structura este supusă unei rotații în jurul axei perpendiculare pe planul plăcii
(pe axa z), forța Coriolis induce o oscilație asupra articulației interioare în jurul axei y cu o
frecvență egală cu 3 kHz. Electrozii de pe articulaț ia interioară detectează amplitudinea
modului rezonant secundar. Tensiunea care apare la nivelul a cestor electrozi este menținută
la valoarea zero printr -o forță generată în bucla de reacție; forță poate fi considerată măsura
vitezei unghiulare a giroscopu lui, deoarece este direct proporțională cu viteza unghiulară.
În general în cazul giroscoapelor de tip MEMS, dispoz itivul de acționare convertește un
semnal electric, tensiune sau curent, într -o forță care susține modul rezonant de comandă.
În situația in care giroscopul nu oferă o mărime fizică măsurabilă de un circuit
electronic, situație similară giroscopului din Fig. 2.8, este necesară o etapa intermediară
pentru a rezolva acest aspect.
De regulă, rezonatorul principal este acționat de electr ozi dispuș i într -o structură de
tip pieptene care utilizează un mecanism electrostatic de acționare. Detectarea amplitudinii
vibrațiilor este realizată, de regulă, prin tehnici capacitive. Mecanismele alternative de
acționare pot fi piezoelectrice sau electromagneti ce. Detecția poate fi, de asemenea,
piezorezistivă sau pie zoelectrică.

2.2.3 MAGNETOMETRU

Senzorii de câmp magnetic sunt acei senzori a căror funcționare se bazează pe legile
și efectele câmpurilor magnetice și electromagnetice.
Un senzor magnetic este u n traductor care convertește o mărime magnetică, sau
variația acesteia într -un semnal electric. Tehnologia sistemelor de sesizare a câmpului
magnetic a evoluat în raport cu nevoia de a îmbunătăți sensibilitatea, de a micșora

23 dimensiunile și a îmbunătăți co mpatibilitatea cu sistemele electronice. Senzorii magnetici
diferă de mulți alți detectori prin aceea că ei nu măsoară direct proprietatea fizică de interes.
Dispozitive care măsoară mărimi cum ar fi temperatura, presiunea, deformația, debitul,
indică dir ect valoarea parametrului testat la ieșire. Senzorii magnetici detectează variații sau
perturbații ale câmpurilor magnetice create sau modificateși de la care derivă informații
asupra mărimilor cum ar fi direcția, prezența, rotația, unghiul sau intensitate a curentului
electric. Semnalul de ieșire al acestor senzori necesită procesarea semnalului pentru
translația în parametrul dorit. De și detectorii de câmp magnetic sunt oarecum mai dificil de
folosit, ei furnizează date corecte, fără a fi nevoie de un cont act mecanic. Senzorii de câmp
magnetic furnizează soluții unice pentru multe probleme tehnice și aplicații incluzând
detecția de curent, detecția de proximitate, viteza de deplasare lineară sau unghiulară,
echipamentele de orientare, detecția de perturbați i în câmpul magnetic terestru, măsurători
de deplasare și de poziționare. Înțelegerea conceptelor fizice care stau la baza tehnologiei și
aplicațiile senzorilor de câmp magnetic îl conduc pe proiectant la alegerea senzorului
potrivit.
Magnetometru MEMS baz ate pe efectul „Hall”
De curând, progresul deosebit înregistrat de tehnologia de procesare a siliciului a
condus la realizarea mai multor tipuri de senzori magnetici integrați. Principiul lor de
operare se bazează în principal pe efectul Hall, care constă în apariția unei tensiuni pe o
direcție perpendiculară pe planul format de direcția curentului și direcția inducției
magnetice. În cadr ul teoriei clasice se admite că purtătorii de sarcină care intervin în
conducția curentului sunt deviați de la traiectori a rectilinie datorită for ței Lorentz:
F=q(v×B)

Acumularea sarcinii la una dintre marginile plăcii Hall conduce la apariția unui câmp electric
transversal, câmpul electric Hall, E H. La echilibru, forța electrică datorată câmpului
transversal egalează forț a Lorentz :
ⅇ[v×B]+ⅇEH=0
conducând la expresia explicita pentru intensitatea câmpului electric Hall:
EH=−[v×B]

24 Din această ecuație se observă că, pentru o viteza cunoscută v a purtătorilor, E H poate să fie
utilizat drept o măsură a inducției câmpului magnetic B. Viteza v a unui purtător de sarcină
poate fi exprimată ca produs al mobilității µ a purtătorului, un parametru uzual cunoscut
asociat materialului, și câmpul electric aplicat E:
v=𝜇E
Deci intensitatea câmpul electric Hall poate fi definită pr in:
EH=−μ[E×B]
Plăcile Hall de volum de tipul celor din figura 2.9 pot fi u șor încorporate într -o structur ă de
circuit inte grat pe siliciu (IC). Figura 2.11 arată o placă Hall orizontală integrată realizată pe
un strat epitaxial tip n (colector) crescut pe un substrat tip p într -un proces IC bipolar.
Deoarece stratul epitaxial este tip n, purtătorii majoritari sunt electronii. Între viteza
purtătorilor și densitatea de curent există relația:
j=−qnv
unde n este concentrația purtătorilor de sarcină.

Figura 2.9 – Tensiunea Hall măsurăta V H este integrala câmpului electric Hall E H generat
peste placa de lățime w. [4]

Figura 2.10 – Sub in fluența inducț iei magnetice B, vectorul densității de curent J și
vectorul câmpului electric E nu mai sunt colineari, ei formeaza unghiul Hall Θ . Câmpul
electric total E este vectorul sumă al câmpului electric extern E e și câmpului electric Hall
EH

25

Figura 2.11 – Structura unui senzor Hall vertical realizat în tehnolo gia circuitelor
integrate. Acest dispozitiv are acelea și proprietăți ca și placa Hall convențională. El este
sensibil la componenta inducției magnetice paralelă la planul suprafeței. Efectele de
suprafață sunt considerabil reduse prin folosirea unei jonc țiuni pn polarizate invers în
zona activă. [4]
Considerând d irecțiile vectorilor din Fig 2.9 , câmpul transversal se obține sub forma:
E=−Bj∕qn
unde -1/qn este constanta Hall care este negativă pentru electroni. Tensiunea Hall se
calculează ca integrală de linie a câmpului electric între electrozii transversali. Pentru o placă
Hall infinit de lungă cu electrozi punctuali, tensiunea Hall este:
VH=jBb∕qn sau Vπ=IB∕qnk
unde b este lățimea plăcii Hall, h grosimea sa, j densitatea de curent, B inducț ia magnetică
și I intensitatea curentului electric.
Confor m celor prezentate în figura 2.10 , E si E e formează un unghi de înclinare, unghiul
Hall Θ, ce poate fi exprimat cu ajutorul mobilității purtătorilor de sarcină și inducției
magnetice aplicate:
tgθ=|EH|∕|Ee|=μB
Microsenzori de c âmp magnetic 3D, folosite în majoritatea dispozitivelor inteligente,
constau din opt structuri senzitive Hall, împărțite în trei grupe, fiecare măsurând o direcție a
inducției magnetice .

26 Componentele x și y, paralele c u suprafața senzorului, se măsoară fiecare printr -o pereche
de senzori Hall verticali, localizați pe laturile opuse ale microsenzorului astfel: pentru
direcția x sunt așezați pe latura stângă și, respectiv, latura dreaptă a structurii din Fig 2.12,
pentru direcția y sunt așezați sus și, respectiv, jos. Componenta z a inducției magnetice se
măsoară prin patru elemente Hall orizontale localizate în colțurile structurii din Fig 2.12.
Elementele Hall ale fiecărei grupe sunt conectate în paralel, astfel încât s emnalul lor de ieșire
combinat reprezintă o interpolare la centrul senzorului. Din acest considerent, toate cele trei
componente ale vectorului inducție magnetică se măsoară în același spot.
Deoarece toate elementele Hall sunt integrate pe aceeași structu ră, dezalinierile apar numai
din procesul de fabricație și pot fi considerate neglijabile. Fiecare dintre cele trei canale este
conectat la circuite electronice de polarizare și amplificare, astfel încât cele trei semnale p ot
fi citite separat la ieșire.

Figura 2.12 – microsenzor integrat 3D. În stânga și în dreapta se află perechea de
elemente Hall verticale care măsoară componenta x a inducției magnetice. Sus și jos sunt
localizate elementele Hall verticale care măsoară componenta y a câmpului magnetic. În
cele patru colțuri se află elementele Hall orizontale care măsoară componenta z a
inducției magnetice. Toate măsurătorile se fac față de centrul structurii. [6]

27 CAPITOLUL 3 – PROIEC TAREA APLICAȚIEI

Figura 3.1 – Func ționalit ățile oferite de aplica ție, reprezentate printr -o diagram ă UseCase

28 Utilizatorul pornește apli cația, ace astă acțiune va apela clasa MainActivity care
afișează pe ecran dou ă butoane, unul cu denumirea “start scanare ” altul cu denumirea
„scanări salvate ”.
La ap ăsarea butonului “start scanare ” se modifică activity -ul cur ent cu activity -ul de
scanare sp ațiu. Acest activity încapsulează obiecte care prelucrează datele, calculează pași,
acumlează punctele traseului și desenează pe ecranul dispozitivului.
La primirea datelor de la senzori în algortimul de prelucrare a datelor se pornește
fuziunea de sonzori care determină înclinarea dispozitivului , apoi înclinarea se transmite la
algoritmul de accelera ție lineară care va determina componenta accelerației gravitațională
pe fiecare dintr e axe , algoritmul returnează accelerația lineară prin scăderea accelerației
gravitaționale din semnalul senzorului.
Algoritmul de calculare pași va prelua accelerație lineară și va porni 5 fire de
execuție, fiecare fir de execuție având rolul de a prelucra s emnalul în sin cron. Algoritmul
returnează numă rul de pași detectați.
Algor itmul de calculare puncte este chemat la fiecare detecție de pas. El va primi ca
intrare un unghiu, mărimea pasului fiind o constantă. Prin înmulțirea sin( unghi ) și
con(unghi ) cu mărimea p asului va determina puntele x și y necesare pentru desenare.
Algoritmul de desenare va primi ca intrare o listă de puncte , care reprezită deplasarea
utilizatorului , între care va trasa drepte . Dese narea pe ecran apoi fiind realiz ată de clasele
deja i mplementate în sistemul de operare android PathShape și ShapeDrawable.
La terminarea desenului utilizatorul este între bat dacă dorește să salveze ace st desen
sau dorește să rescaneze spațiul. Alegând rescanare a va reseta algoritmul și va sterge de pe
ecran desenul făcut. Dacă se alege o pțiunea salvare , algoritmul de conversie în format XML
a desenului va salva fisierul XML pe s pațiul de stocare a telefonul ui, după care aplicație va
reveni la MainActivity și procesul se poate începe din nou.

29

Figura 3.2 – Func ționalit ățile oferite de aplica ție, reprezentate printr -un ActivityDiagram

30 3.1. CERINȚE

Aplicația este proiectată pentru telefoanele inteligente care rulează sistemul de
operare Android și sunt dotate cu componentele hardware necesare pentru rularea aplicației:
– Accelerometru
– Girometru
– Megnetometru
Vers iunea minima de SDK este API level 14 ( Android Ice Cream Sandwich ), versiu nea
targhetată este API level 27 (Android Oreo ), astfel se acoperă majoritatea (99.4%)
dispozitivelor care rulează sistemul de operare Androi d (Fig. 2.1).
Datorită necesității girometrului numărul de potențiali utilizatori scade, majoritatea
telefoanelor low -end nefiind dotate cu girometru.
Permisiunile utilizator:
– Acces pentru scriere/citire pe spațiul de stocare al telefonului
– Acces la comp onentele hardware enumerate mai sus

3.2. CORECTARE EROR I

Erori în sistemele de navigație inerțiale :
Erorile în sistemele de navigație inerțiale sunt cauzate în principal de imperfecțiunile
senzorilor, de inițializarea lor necorespunzătoare și de imperf ecțiuni în modelul gravitațional
utilizat în c alcule în general, cele mai mari erori sunt datorate erorilor senzorilor inerțiali.
Pe lângă beneficiile incontestabile ale reducerii dimensiunilor, prețului și
consumului de energie, miniaturizarea senzorilor a provocat o serie de probleme legate de
degradarea performanțelor lo r, efect reflectat în special de creșterea zgomotului senzorilor
și im posibilitatea filtrării acestora, datorită suprapunerii lor spectr ale peste semnalul de
intrare a senzorului, conside rat util pentru aplicațiile de navigație, și de instabilitatea bias –
ului structurilor miniaturizate, deza vantaje care au scăzut precizia navigatorilor inerțiali.
În urma miniaturizării, au apărut erori caracteristice accelerometrelor și girometrelor:
erori stohastice (zgomotele sistemelor) și erorile deterministe, care pot fi estimate și
compensate prin metode de calibrare clasice. În general erorile senzorilor inerțiali se pot

31 clasifica în următoarele categorii: erori de bias, erori de factor de scală, ero ri de aliniament
a axelor și zgomot.
Media ieșirii măsurate în condiții specifice de funcționare, pe un interval de timp,
condiții care nu sunt corelate cu accelerația sau rotația aplicate la intrarea senzorului, se
numesc bias și este un parametru caracte ristic accelerometrelor și girometrelor. Bias -ul este
alcătuit din două părți: deriva bias -ului, măsurată în grade/oră sau rad/sec în cazul
girometrelor și în m/s2 pentru accelerometre (partea aleatoare, care se referă la viteza cu care
eroarea senzorului inerțial se acumulează în timp) și offset -ul (partea deterministă), care în
cadrul măsurării poate fi determinată prin calibrare.
Prin accelerarea sau rotirea unui senzor de detecție inerțială, la ieșire se va obține un semnal
electric. Factorul de scală e ste raportul între variația semnalului de intrare și variația
corespunzătoare a semnalului de ieșire, sau panta dreptei obți nută prin metoda celor mai
mici pătrate, interpolând datele de intrare -ieșire. Eroarea factorului de scală este de tip
determinist și poate fi aflată prin calibrare. Factorul de scală este caracterizat prin stabilitatea
sa, care este de fapt capacitatea senzorului de a detecta cu acurat ețe vit eza unghiulară sau
accelerația.
Zgomotul este un semnal suplimentar, în general indus de alte echipamente
electronice, care interferează cu semnalele de ieșire care trebuie măsurate, dar produs și de
senzorul însuși. Zgomotul se suprapune peste ieși rea senzorilor, nu poate fi înlăturat total și
poate fi modelat prin procese stohastice. Zgomotul senzorilor inerțiali, sursă majoră de erori
pentru sistemele de navigație inerțială, este caracterizat de o putere constantă pe întreg
spectrul de frecvențe c e reflectă dinamica sistemelor mobile ce se doresc a fi monitorizate
(în general în plaja 0 -100 Hz). Prin urmare, filtrarea acestui tip de zgomot în banda 0 -100
Hz nu este indicată. Zgomotul datorat fluctuațiilor (flicker noise) este un zgomot de
frecvență joasă ce apare în majoritatea componentelor electronice, din diverse motive,
precum impurități ale conductoarelor, generarea și recombinarea zgomotului în tranzistor
datorită curentului de bază, etc. Acesta conduce și la fluctuații de bias în date.
Cele mai mari erori în detecția poziției și a vitezei în navigația inerțială apar datorită
integrării numerice dificile a zgomotului și măsurătorilor incorecte ale biasului.
Pentru obținerea acurateței și menținerea performanțelor INS o etapă foarte importantă este
cea de calibrare a erorilor senzorilor, însă acesta nu este suficientă întotdeauna. Oricare ar fi
cauza erorilor unui senzor inerțial (imperfecțiuni mecanice interne, erori electronice, sau alte

32 surse), rezultatul este un semnal parazitat obținut la i eșirea senzorului, semnal care este apoi
oferit navigatorului.
Perturbările senzorilor giroscopici se reflectă în valorile măsurate ale componentelor
vitezei unghiulare, în timp ce perturbările senzorilor accelerometrici se reflectă în valorile
componentel or accelerației. Pentru ambele instrumente, cele mai mari erori sunt date de
instabilitatea bias -ului (bias -ul pentru giroscoape se măsoară în grade/oră, în timp ce pentru
accelerometre acesta este dat în μg) și stabilitatea factorului de scală (este dat î n părți pe
milion (ppm) din mărimea de măsurat).
Cu cât sunt mai mici erorile senzorilor inerțiali, cu atât este mai exactă soluția de navigație.

3.2.1. CORECTARE ERO RI ÎN SISTEMELE DE N AVIGAȚIE INERȚIALE

Înclinare dispozitiv față de accelerarea liniară : acelerometrul poate măsura acelerația
gravitațională (comportându -se ca un senzor de înclinare) sau poate măsura acelerația
lineară (acelerația unei mașini). Când vorbim de acelerație lineară direct de la senzor se
înțelege Acelerație Lineară = Acelerație Masurată + Acelerație Gravitațională. Senzorul
masoară acelerația pe 3 axe, rezultând că acelerația gravitațională va fi distribuită pe toate
axele în funție de înclinația dispozitivului. De exemplu dacă dispozitivul este așezat pe masă
(considerăm o masa perfect plată paralel cu pământul) acelerația măsurată pe axa z va fi de
~ 9.8 m/s2 , dacă dispozitivul este ridicat orizontal acelerația măsurată pe axa x va fi de ~ 9.8
m/s2. În funție de înclinația dispozitivului va trebui sa scădem acelerația gravitaț ională de pe
ieșierea senzorului de acelerație.
Majoritatea dispozitivelor noi sunt dotate cu giroscop, cu ajutorul lui se poate estima
rotația dispozitivului, dar giroscopul deviază în timp. Pentru că semnalul va fi integrat pentru
a afla unghiul de rotaț ie, integrarea erorilor va rezulta în date eronate. Pentru a compensa
deviațiile vom folosi alți senzori pentru a corecta erorile. Cu ajutorul magnetometrului vom
determina Nordul iar cu ajutorul acelerometrului vom determina în jos (gravitația) cu
ajutoru l acestor direcții vom compensa giroscopul.
Pentru normalizarea datelor vom folosi un filtru de netezire a semnaluilui. Semnalul
va fi filtrat pintr -un filtru median, care ia citirile de la senzor și face o medie într -o perioadă
de timp definită de constan ta de timp. Această perioadă de timp constantă se numește

33 fereastra de filtrare, această metodă permite ca fereastra să fie definită pe o perioadă de timp
nu pe un număr finit de citiri.

3.2.2. FUZIUNEA DE S ENZORI

Este dificilă izolarea componentei acelerației gravitaționale de acelerația lineară.
Unele dispozitive implementeză Sensor.TYPE_LINEAR_ACCELERATION și
Sensor.TYPE_GRAVITY care fac aceste calcule. Majoritatea dispozitivelor sunt noi,
dispozitive de calitate înaltă dotate cu giroscop. E ste, de as emenea, de remarcat că
Sensor.TYPE_LINEAR_ACCELERATION nu funcționeză corect în timpul acelerației
lineare. El folosește acelerometrul pentru a compensa deviația giroscopului care cauzează o
buclă de feedback între cei doi senzori. Când dipozitivul acceler ează linear algoritmul de
corectare poate să creadă că disp ozitivul e înclinat și începe să corecteze datele giroscopului
eronat. Fuzionarea datelor de la magnetormetru și acelerometru pentru a compensa
giroscopul pare o soluție mai bună.
Deviația girosco pului în timp.
Girometrul nu este perfect și erori mici pot apărea la fiecare măsurare , aceste erori
sunt cauzate de forța coriolis. Pentru că datele citite de la senzor sunt integrate în funcție de
timp aceste erori se acum ulează și rezultatul datelor er onate se numește deviație. În timp
datele nu vor ma i fi corecte. Este nevoie de alți senzor pentru a măsura orientarea
dispozitivului și a corecta acest e date , deviația giroscopului. Implementarea unui filtru
complementar se va folosi pentru a fuziona date le provenite de la acelerometru și
magnetometru cu cele a le giroscopului.
Acelerometrul nu poate deter mina diferența dintre acelerația lineară și înclinarea
dispozitivului dar poate determina cu precizie componenta gravitațională care ne va da
rotația în jurul axei x „pitch” și rotația în jurul axei y „roll” dar nu poate determina rotația în
jurul axei z „azimuth” pentru că este paralelă cu acelerația gravitațională.
Magnetometrul poate determina rotația în jurul axei y „roll” și z „azimuth” dar nu și
în jurul axei x „pitch” pentru că câmpul magnetic a l pământului est e paralel cu axa x. De
notat că câmpul magnetic al pământului este perpendicular cu axa y numai la ecuato r, în

34 Europa este între 50° -70°, deci nu este o bună practi că determinarea rotația î n jurul axei y
„roll”, numai rotația în jurul axei z „azimuth” se poate determina cu o precizie bună.
Sistemele de coordonate folosite:
1. Sistem ul global de coordonate folosit în dispozitivele Android este ENS (Est, Nord
și Sus), a cesta fiind d iferit de NEJ (Nord, Est, Jos) folosit în majoritatea sistemelor de aviație.
2. Sistemul de coordonate locală: în acest sistem este descris sistemul de coordonate
ale dispozitivului. Majoritatea senzorilor sistemul ui de coordonate este definit în funcție de
orientarea e cranului. Când dispozitivul este ținut în poziția prestabilită axa X e orizontal cu
pământul și arată către Est, axa Y este perpendicular cu pământul și arată în sus iar axa Z
este tot paralel cu pământul și arată catre Nord.

Figura 3.3 – Axele senzorilo r din dispozitivele Android [2]
3. Alte sisteme de coordonate: metoda SensorManager.getOrientation(), care e ste
utilizat des pentru a primi vectorul de orientare a l dispozitivului din matricea de rotație,
utilizează un al treia sistem de coordonate VNJ (Ve st, Nord, Jos). D e remarcat, de asemenea,
este că ordinea axelor returnată de această metodă este di ferită față de ordinea returnată de
senzor. Aplicând acestă metodă va returna un vector cu valorile:
– valori[0] = rotația în jurul axei Z „azimuth”
– valor i[1] = rotația în jurul axei X „pitch”
– valori[2] = rotația în jurul axei Y „roll”

35 Giroscoapele integrează măsurătorile în timp pentru a crea o estimare a orientării în timp.
Sistemul Android nu are o componentă predifintă pentru asta, implementarea va fi făcută de
către dezvoltatorul aplicației. Algoritmii de calcul sunt din documentația Android. Prima
dată reprezentarea unghiului axial este normalizat (o cerință a quaternionelor) prin luarea
mărimii vectorului și apoi împărțind fi ecare element cu mărim ea. Derivatul este apoi luat în
raport cu timpul și reprezentarea unghiul axial este transformat într-un quaternion.
Quaternionul este apoi transformat într -o matrice de rotație cu ajutorul metodei
SensorManager.getRotationMatrixFromVector(), care poate fi aplicat la o altă matrice de
rotație reprezentând orientarea curentă a dispozitivului. În final mat ricea care reprezintă
orientarea curentă este convertit ă într-un vector (cu ajutorul metodei
SensorManager.getOrienation()) care reprezi ntă orient area dispo zitivului.
De ce se împarte fiecare element a ung hiului de axă cu magnitudinea vectorului?
SensorManager.getRotationMatrixFromVector() are nevoie, prin definiție, de o unitate de
quatarnion. Iar ultimele trei componente a quatarnionului <cos(θ/2), xsin(θ/ 2), ysin(θ/2),
z*sin(θ/2)> sunt egale cu elementele vectorului de rotație. Vectorul u este un unitate de
quatarnion daca norma lui este 1, |u| = 1.
De ce este dT a senzorului (dT = timpul dintre actuali zări) înparțit la 2? Acesta
provine de la θ/2 din fie care componentă a quatarnionului pentru că dorim jumătăți de
unghiuri pentru quatarnioane. În loc de înpărțirii θ/2 la fiecare element înpărțim dT la 2
odată.
Pseudocodul mecanismului de integrare:

CALC INTEGRAL (eveniment)
DACĂ timpAnterior != 0 ATUNCI
dT = timp.eveniment – timpAnterior
axaX = eveniment.valoare1
axaY = eveniment.valoare2
axaZ = eveniment.valoare3
magnitudineOmega = sqrt(axaX*axaX + axaY*axaY + axaZ*axaZ)

axaX /= magnitudineOmega
axaY /= magnitudineOmega

36 axaZ /= magnitudineOmega

tethaPerD oi = magnitudineOmega * dT /2
sinThetaPerDoi = sin(tethaPerDoi )
cosThetaPerDoi = cos(tethaPerDoi)

deltaRotatieVector[0] = sinThetaPerDoi * axaX
deltaRotatieVector[1] = sinThetaPerDoi * axaY
deltaRotatieVector[2] = sinThetaPerDoi * axaZ
deltaRotatieVector [3] = cosThetaPerDoi
ATUNCI
timpAnterior = timp.eveniment
deltaMatriceRotatie = float[9]
SFDACĂ

SensorManager.getRotationMatrixFromVector(deltaMatri ceRotatie, deltaRotatieVector);

Va mai trebui să calculăm și matricea de rotația inițială cu ajutorul dat elor de la
acelerometru și magnetometru. Vom primi orientarea în sistemul de coordonate globală de
la metoda SensorManager.getRotationMatrix(), acesta va fi multiplicat cu matricea
deltaMatriceRotatie matricea prov enită din multiplicarea matricelor va reprezenta orientația
curentă. Odată ce ave m noua matrice de rotație, aplicăm metoda
SensorManager.getOrientation() care re turnează vectorul de orientare.
Rotirea vectorului accelerației gravitaționale în orientația dispozitivului.
Esența algoritmului constă în determinarea componentei accelerației gravitaționale în
funcție de orientar ea dispozitivului. Trigonometria, algebra lineară și matrici le de rotație
sunt folosite pentru a determina funcția. Pentru a determina funcția vom conside ra că
dispozitivul este orientat vertical drept în sistemul de coordonate globale, adică gvec = {0,0, –
g}.
Vom determina pentru fiecare axă o matrice de rotație:
– matricea_roll : {1,0,0} {0, cos(roll), sin(roll)} {0, -sin(roll), cos(roll)}

37 – matricea_pitch: {cos(pitch), 0, -sin(pitch)} {0, 1, 0} {sin(pitch), 0, cos(pitch)}
– matricea_roll:
{cos(azimuth), sin(azimuth), 0} { -sin(azimut h), cos(azimuth), 0} {0, 0, 1}
După calcularea matricelor de rotație vom crea o rotație compusă prin înmulțirea matricelor
de rotație cu vectorul g ravitaționa l inițial gvec = {0,0, -g}, rotind gravitați a în orientarea
dispozitivului.
– matricea_roll * gvec = {0, 0, -g}
– matricea_pitch * matria_azimuth * gvec = {g*sin(pitch), -g*cos(pitch)}
– matricea_roll * matricea_pitch * matricea_azimuth * gvec = {-g * sin(pitch), -g *
cos(pitch), g * cos(pitch) * cos(roll)}
Acum avem funcțiile necesare pentru a determina componența accelerației gravitaționale
pentru fiecare axă în parte:
– Axa X (pitch), gX = -g * cos(pitch) * sin(roll)
– Axa Y (roll), gY = -g * sin (pitch)
– Axa Z (azimuth), gZ = g * cos(pitch) * cos(roll)
Odată ce avem componența accelerației gravitaționale pasul final va fi de a -l scadea din
masurările accelerometrului:
– accelerațieLinearăX = citireSenzorX – gX
– accelerațieLinearăY = citireSenzorY – gY
– accelerațieLinearăZ = citireSenzorZ – gZ

3.2.3. NORMALIZARE Z GOMOT

Pentru normalizarea datelor se va implementa un filtru median bazat pe o constantă
de timp care are valorile în secunde. Filtrul va lua mediana citirilor care apar pe perioada
definită de constanta de timp, numărul de citiri care sunt luate în considerare sunt cunoscute
ca fereastra filtrului median.
Acestă abordare permite ca fereastra să fie definită pe o perioadă de timp, nu pe un număr
finit de eșantioane. Acest aspect este importan t pentru că frecvența citirilor de la senzor nu
este cunoscută și diferă de la dispozitiv la dispozitiv.

38 Algoritmul își va determina singur frecvența citirilor, care va fi îmulțită cu constanta
de timp pentru a determina fereastra filtrului. Toate citiri le vor fi adăugate intr -un array -list
din care se vor scoate un număr de citiri egal cu fereastra de timp. Din aceste citiri apoi se
va determina mediana citirii actuale.
Pseudocodul mecanismului de filtrare:
ALGORITMDEFILTRARE
listăcitiri, iesire, timpStr at, stantaTimp, frecventa, fereastra, numara;
FIE constantaTimp = 0.2;
CITESTE date
DACA timpStart = 0 ATUNCI
timpStart = sitem.nanotime;
stantaTimp = sitem.namotime();
frecventa = (numara+1 / ((stantaTimp – timpStart) / 1000000000 ));
fereastra = frecve nta * constantaTimp;
listăcitiri.adaugaLaSfarsit date
SFDACĂ
CÂT TIMP listăcitiri.marime > fereastra EXECUTA
listăcitiri.stergePrimul();
SFCÂT
iesire = ALGORITMMEDIE (citiri);
TRIMITE iesiri;
SFALGORITM

ALGORITMMEDIE
CITESTE date
median;
FIE index = 0;
FIE valori[3][date.MARIME]
PENTRUFIECARE axe in date
PENTRU i=0, axe.lungime EXECUTĂ
valori[i][index] = axa[i];

39 index++;
SFPENTRU
FIE index = 0ș
SFPENTRU

PENTRU i=0, median.lungime EXECUTĂ
median[i] = @calculeazăMediePonderatăDin valori[i] pănă la 50 ;
SFPENTRU
TRIMITE median;
SFALGORITM

Calculează media ponderată a valorilor din vectorul valori și returnează valoarea la al p -lea
element, care va fi cel mai frecvent element apărut.
Media ponderată fiind calculată cu următoarea formulă:
n=[P
100×N]

3.3. PRELUCRAREA DA TELOR
3.3.1. CITIREA DATEL OR PROVENITE DE LA SENZORI

Pentru a accesa oricare senzor aplicația trebuie să inițieze obiectul SensorManager,
instanța acestui obiect permite ca aplicația să acceseze senzorii dispozitivului.
SENSOR_SERVICE – este un tip de interfață globală (Context) care permite accesul la
senzorii dispozitivului , aceast a este o clasă abstractă a cărei implementare este furnizată de
sistemul Android .

Declararea senzorilor se face prin intanțierea clasei de tip Sensor, fiecare tip d e
senzor care dorim să -l accesăm va trebui declarată ca și un obiect de tip Sensor.
Instanța clasei SensorManager va furniza tipul de senzor prin chemarea metodei
getDefaultSensor(Sensor.tipul_de_senzor). Tipul de senzor este o constantă predefinită (int)
la care se atribuie un namespace de ex: Sensor. TYPE_ROTATION_VECTOR .

40 O buna practică este când utilizatorul părăsește aplicația, obiectul de tip
SensorMager trebuie distrus pentru că el furnizează datele senzorilor și când aplicația
noastră nu este în fo cus, aceste furnizări de date solicită bateria telefonului astfel că în câteva
ore ea s -ar putea descăca cu totul, ceea ce duce la o experiență de utlizator neplăcută și o
posibilă dezinstalare a aplicației.
Distrugerea obiectului se face în metoda onPaus e.
La momentul revenirii utlizatorului în aplicație aceste obiecte trebuie instanțiate
dinnou în metoda onResume().

SensorEventListener
SensorEventListener este o interfață publică utilizată pentru a primi notificări de la
SensorManager când sunt dispon ibile date noi de la senzori. Are două metode publice:
– onAccuracyChanged () chemat când precizia unui senzor î nregistrat s -a modificat
– onSensorChanged () chemat când există date noi de la senzori
SensorEvent
Această clasă reprezintă un eveniment de senzor și deține informațiile primite de la
senzor: tipul de senzor, time -stamp -ul (timpul când s -a întâmplat evenimentul), precizia și
datele măsurate de la senzor.
public int accuracy precizia evenimentului respectiv
public sensor sensor tipul senzorului care a generat acest eveniment
public long timestamp timpul in nanosecunde când s -a petrecut evenimentul
public final float [] values valorile noi primite de la senzor, mărimea vectorului depinde
de tipul de senzor interogat.

Tipuri de valori primite în vect orul values folosite în aplicație:
Sensor.TYPE_ACCELEROMETER: valorile returnate sunt accelerația pe axele
senzorului în unitatea SI m/s2.
 values [0] = accelera ție + gravitație pe axa X
 values [1] = accelera ție + gravitație pe axa Y
 values [2] = accelera ție + gravitație pe axa Z

41
Sensor.TYPE_GYROSCOPE: toate valorile returnate sunt în radiani/secundă și exprimă
rotația în jurul axelor dispozitivului în sistemul de coordonate locală X, Y și Z. Sistemul de
coordonate este aceleași cu cel al accelerometrului. Rot ația este negativă în direcția inversă
a acelor de ceas.
 values [0] = viteza unghiulară în jurul axei X
 values [1] = viteza unghiulară în jurul axei Y
 values [2] = viteza unghiulară în jurul axei Z
Sensor.TYPE_MAGNETIC_FIELD: valorile returnate sunt în micro -Tesla (μT) și
măsoară câmpul magnetic ambiental pe axele X, Y și Z.
Sensor.TYPE_ROTATION_VECTOR: un tip de senzor software, este o fuziune dintre
accelerometru, magnetormetru și girometru. Senzorul raportează orientarea dispozitivului
relativ cu sistemul d e coordonate Est, Nord și Sus. Datele se obțin prin fuzionarea citirilor
de la accelerometru, magnetometru și girometru. Sistemul de coordonate Est, Nord, Sus este
definită ca o bază ortonormată unde:
– X indică către Est si este tangențial cu pământul
– Y ind ică către Nord si este tangențial cu pământul
– Z indică către cer si este perpendicular cu pământul
Orientarea dispozitivului este reprezentată prin rotația necesară prin care s -ar alinia cu
sistemul de coordonate Est, Nord, Sus. Adică, dacă aplicăm rotația coodonatelor globale (X,
Y, Z) se vor alinia cu coordonatele dispozitivului (x, y, z).
Rotația se poate privi ca rotația dispozitivului cu un unghi theta în jurul unei axe rot_axis,
plecând din orientarea de referință (aliniat Est -Nord -Sus) în orientarea curentă a
dispozitivului. Rotația este encodată ca 4 componente (x,y,z și w) fără unitate a unui
cuartnion unitar.
 values[ 0] = rot_axis.x * sin (θ/2)
 values [1] = rot_axis.y * sin (θ/2)
 values [2] = rot_axis.z * sin (θ/2)
 values [3] = cos (θ/2)

42 Unde câmp urile x, y și z sunt coordonatele Est -Nord -Sud ale unui vector de lungime unitară
reprezentând axa de rotație și theta e unghiul de rotație. Cvartnionul este un quaternion
unitar: trebuie să fie de normă 1 . Nerespectarea acestui fapt va determina un compor tament
eronat al aplicației .
Acest senzor virtual utilizează accelerometrul și magnetometrul pentru a compensa deviația
girometrului, nu poate fi implementat utilizând doar accelerometru sau magnetometru.
În corpul metodei onSensorChanged nu știm exact obi ectul SenzorEvent de ce tip
este, el trebuie verificat și tratat corespunzător în funcție de tipul evenimentului. Pentru a
prelua datele corecte de la senzori ele trebuie detectate:
DACĂ tipsenzor = tipsenzorcautat ATUNCI
preia date senzor;
SFDACĂ
Numai a șa ne putem asigura că corpul evenimentului va conține datele de la senzorii
urmăriți de aplicație.

3.3.2. DETECTAREA ȘI NUMĂRAREA PAȘILOR

Mecanismul mersului:
1. La începutul pasului, piciorul este împins în podea
2. Frecarea se opune forței iar acesta propagă forța de accelerație pozitivă
3. La sfârșitul pasului piciorul este împins în podea
4. Dinnou frecarea se opune acestei forțe care propagă o forță de accelerație negativă

Un exemplu de date neprocesate de la accelerometru înregistrate în timpul me rsului se
poate vedea in Figura 3.4. Mersul propagă creșteri și scăderi periodice în amplitudinea
semnalului care corespund cu pașii făcuți.

43

Figura 3.4 – Datele accelerometrului în timpul mersului [24]

Algoritmul folosit , pentru detect area și numărarea pașilor , va fi „fereastra de
detectarea a vârfurilor ” folosind metode de transformare armonică continuă. Algoritmul este
separat în cinci etape, fiecare responsabil pentru o anumită funcție. Fluxul de date este
reprezentat în Figura 3.5 de la stânga la dreapta, fiecare etapă având date de intrare și iesir e.

Figura 3.5 – Etapele algoritmului de detectare și numărare pași
ilustrată printr -o schemă logică
Etapa de pre -procesare:
Acestă etapă este responsabil ă pentru două funcții:
1. Formatarea datel or de la accelerometru în date utilizabile de algoritm
2. Asigurarea unei frecvențe de eșantionare constantă prin interpolare liniară

Dispozitivul este dotat cu accelerometru pe 3 axe, dar algoritmul de detectarea a pașilor
folosește doar mărimea amplitudinii tuturor axelor nu doar a unei singure axe. Timpul citirii
trebuie ajustat astfel încat la inițalizarea algoritmului timpul sa fie egal cu 0 ( t = 0).

44 Ecuațiele folosite sunt:
m=√ax2+ay2+az2
ti, ajustat=ti−t0
ts
unde m – este marimea semnalului de accelerație, ax, ay și az sunt accelerația axelor ti,
ajustat este timpul de citi re ajustat la al i -lea citire, ti este timp ul citirii la al i -lea citire, t0
este timpul citirii anterioare iar ts este f actorul de scalare (de ex.: conversia de la nano –
secunde la milisecunde ts = 106)
Fiecare citire este apoi introdusă într -o structură de date simplă și este atașată la un
tampon intern de mărimea 2. Când acest tampon se umple cele două mărimi sunt interpol ate
linear. Pentru următorea etapă (de filtrare) trebuie să ne asigurăm că datele sunt citite
constant. Rata de eșantionare dorită determină valorile ecuației de mai jos:
𝑣𝑎𝑙𝑜𝑎𝑟𝑒𝑎 =y1−y0
t1−t0tint+y0
unde 2 puncte din citiri sun t date de ( t1, y1) și (t0, y0) iar timpul dintre citiri este dat de tint.

Figura 3. 6 – Semnalul după procesare

45 Etapa de filtrare: accelerometrele măsoară toate forțele care se aplică senzorului, dar
senzorul e supus și zgomotelor care p ot fi: mec anice, electrice, termale, etc. Funcția de
filtrare va avea rolul de a reduce, pe cât posibil, zgomotul. Vom folosi un filtru „Low -Pass”
digital. Pentru a acapara o varietate mare de viteze de umblat frecvența de tăiere a acestui
filtru va fi set at la 3 Hz. Acesta e suficient pentru a captura și viteze de 9 km/h. De menționat
că viteza medie de umblat, persoane 14 -64 ani, este de 4.96 km/h. Un exemplu de accelerație
neprocesată și ace elași accelerație după interpolare și fil trare se poate vedea in Figura 3.7 .

Figura 3. 7 – Amplitudinea semn alului înainte și dupa filtrare
Etapa de punctaj, diferența maximală: acestă metodă folosește vecinii locali ca să
determine cât de mare e amplitudinea. Consideră N puncte la stânga și determi nă diferența
maximă dint re punctul procesat și celelalte puncte. Face la fel cu punctare spre dreapta, după
care face media celor doi maximi care returnează ca și rezultat. Procesarea semnalului cu
această metodă rezultă în amplitudini amplificate.
Figura 3.8 Exemplifică semnalul dupa procesare. Comportamentul este descris după
următoarea ecuație:
x=maxk(xi−xi−K)+maxk(xi−xi+k)
2
unde i este punctul luat în considerare, si x n este valoarea citirii la a n-a citire.

46

Figura 3. 8 – Semnalul după etapa de punctaj
Etapa de detecție: în etapa aceasta vom identifica potențiali i candidați de marimi de
amplitudine care sunt asociați cu paș ii.Vom folosi statistică matematică pentru a determina
valorile extreme.
Algoritmul folosit :
x̅n=xn+(n−1)x̅n−1
n
σn2=(n−2)σn−12+(n−1)(x̅n−1−x̅n)2+(x−x̅n)2
n−1
unde xn este al n -lea eșantion , x̅n este media la al n -lea eșantion, σn este deviația la al n -lea
eșantion.
După acea algoritmul foloseșt e cele două can tități pentru a determina depăși rile acestor
praguri. Dacă este mai mare de c (deviația standard curent ă), atunci el este marcat ca
potențial candidat pentru pas.
xn−x̅n
σn≥c
Un exemplu de sem nal procesat obținut prin această metodă se poate vedea în Figura 3.9.
De notat că prima d eviație procesată va fi calculat ă ca și un pas.

47

Figura 3. 9 – Detecția candidați de vârfuri
Etapa de p ost-procesare: în această etapă finală vom determina deviaț iile adevărate
asociate cu paș ii din toț i candidații determinați în etapa anterioară. Toți pot ențialii candidați
sunt comparați cu cea mai mare deviație. Această etapă elimină candidații eronați și
returnează maximul local. Această etapă ia în considerare și că umblatul este aso ciat cu
deviații regulate periodice în semnalul de accelerație cu o întârziere minimă între ele.
Ferestra de timp a acestei etape este fixă, tfereastră , și păstrează doar deviați ile maximale din
această fereastră. Prin reglarea mărimii ferestrei, algoritmu l se poate asigura că, în
majoritatea cazurilor, nu se vor localiza simultan doi pași în această fereastră. Fereastra este
setată la 200ms care corespunde la 5 pași/secundă .
Pseudocodul pentru acest algoritm:
ALGORITMDEPOSTPROCESARE
FIE windowSize = 200;
currentMax;
PENTRU FIECARE pointcandidate în points EXECUTĂ
DACĂ (candidate.time – currentMax.time ) > windowSize ATUNCI
// Punctul maxim e în afara ferestrei
yield currentMax;
currentMax = candidate;

48 ALTFEL
// Pastreaza punctul maxim
@verifcă da că maximul curent e mai mare ca valoarea actuală
@dacă e mai mare atunci înlocuiește currentMax
SFDACĂ
SFPENTRU

Rezultatul acestei etape vor fi deviați ile maximale, restul cand idaților vor fi eliminați.

Figura 3.10 – Detec ții maxim elor
La fiecare maximă detectată va fi incrementat variabilă numărul de pași, iar algoritmul
returnează numărul de pași totali .

3.3.3. APROXIMAREA N AVIGĂRII ÎN SPAȚIU

Aproxi marea navig ării se va realiza prin calcularea pașilor și luând în considerare
rotația în jurul axei Z. Pentru fiecare pas luăm în considerare că utilizatorul aplicației s -a
deplasat 30cm în direcția unghiului măsurat în jurul axei Z. Putem determina cât va trebui
să ne deplasăm în direcția X și Y prin determinarea sin, cos a unghiului și înmulțind cu
deplasarea.

49
Figura 3.11 – Calcularea punctelor x, y
Din f uncții trigonometrice deducem că:
sin(α)=dⅇplasarⅇ X
dⅇplasarⅇ din A în B
cos(α)=dⅇplasarⅇ Y
dⅇplasarⅇ din A în B
Din care deducem că:
dⅇplasarⅇ X=sin(α)⋅dⅇplasarⅇ din A în B
dⅇplasarⅇ Y=cos(α)⋅dⅇsarⅇ din A în B
Unde “deplasarea din A în B” este mărimea pasului și α este unghiul cu care s -a rotit
dispozitivul în jurul axei Z în timpul deplasării.
Unghiul returnat de la senzori poate sa -a valori între +180 ° și -180°, la aceste valori
vom adăuga înca +180 ° pentru ca valorile returnate să fie între 0 ° și 360 °.
Pseudocodul mechanizmului de determinare puncte:
CITEȘTE α;
FIE pas = 0.3;
x = sin(α) * pas;
y = cos(α) * pas;

50 TRIMITE x, y;

3.3.4. DES ENARE DUPĂ DATE LE SCANATE

Punctele calculate se vor stoca într -un vector care este preluat de clasa nativă
Android Path. Clasa Path încapsulează o colecție de contururi geometrice care pot fi: linii
drepte, curbe cuadratice și curbe cubice. Se pot afisa pe ecranul dispozitivului utilizând clasa
Canvas care prelucrează datele cu ajutorul metodei sale draw. Pentru a desena ceva avem
nevoie de 4 componente: un Bitmap unde să manipulăm pilexeli, un Canvas pentru a
prelucra manipularea pixelilor, o primitivă de desenat (Rect, Path, text, Bitmap) și un Paint
care descrie culoarea și stilul de desenat.
Cu ajutorul metodei lineTo() a clasei Path vom adăuga linii succesive reprezentând
drumul parcurs de utlizator.
public void lineTo (float x, float y)
Acestă metodă adaugă o linie nouă care pornește din punctul curent și se oprește în
punctul x și y primit. Dacă nu a fost mutat, punctul de început este (0, 0).
Pentru a reutiliza datele create vom desena pe ecran utilizând clasa PathShape care
este clasă copil a clasei Path, cu metodă proprie de draw().
public PathShape (Path path, float stdWidth, float stdHeight) unde Path descrie
forma geometrică, stdWidth este lungimea formei și stdHeight este înălțimea formei.
Pentru a simula continuitatea desenării, la apariția unu i punct nou, vom stoca toate
punctele curente după care vom adăuga punctul curent după care “curățăm” desenul curent
de pe afisaj și redesenăm forma incluzând punctul nou.
După finalizarea desenului mai adaugăm încă o line din punctul curent în punctul de
început pentru a închide forma geometrică.
Pe parcursul drumului acumulăm unghiurile cu care s -a învârtit dispozitivul, când
unghiul atinge 90 ° salvăm punctul actual. Când aceste acumlări de unghiuri ating 360 °,
considerăm că am scanat tot spațiul închide m forma automat prin adăurarea unei noi linii
din punctul actual în punctul de început.

51 Pentru a determina mărimea spațiului scanat considerăm că la fiecare 90 ° s-a încheiat
o latură a spațiului, calculăm numărul punctelor până în punctul salvat și înmulți m cu 30cm
(deplasarea cu un pas), după care atribuim laturii.
În timpul mișcării pot apărea mici erori în desenare, aceste erori vor fi corectate prin
redesenarea spațiului folosind numai punctele salvate când unghiul acumlat a atins 90 °. Vom
desena linii din punctul actual în punctul următor și le atribuim mărimi calculate din numărul
de pași. Lânga fiecare latură va fi afișată lungimea estimată a laturii în metri.

3.3.5. SALVARE PE DISPOZITIV

Pentru a salva spațiile scanate este necesar să convertim datele într -un format
cunoscut de sistemul de operare Android. Voi folosi formatul .XML. Sistemul de operare
pune la dispoziție clasa VectorDrawable care recunoaște și interpretează datele citite din
fișierele XML.
( https://developer.android.com/referenc e/android/graphics/drawable/VectorDrawable )
Formatarea XML:
<vector xmlns:android= http://schemas.android.com/apk/res/android > – primul atrimbut a
fișierului XML care definește că este vorba de un vector, tot aici se descriu și mărimea
vectorului și mărimea viewportului.
<path
android:name=" numele obiectului "
android:fillColor="# culoarea "
android:pathData=" datele care descriu forma vectorială "/>
În atributul path se descr iu toate caracteristicele formei cum ar fi: culoare, nume, opacitate,
linii, arcuri, etc.
În atributul pathData se descrie forma geometrică a vetorului:
M x, y – mută la x, y cursorul de desenat.
L x, y – adaugă o linie de la ultimul punct în x și y.
z – închide desenul, adaugă o linie din punctul curent în punctul de început.

52 Aceste fișiere XML se vor stoca pe memoria internă a telefonului după care vor fi
afișate cu ajutorul clasei VectorDrawable pe ecranul dispozitivului când utilizatorul vrea să
le viz iualizeze.

Figura 3.1 2 – Funcționare aplicație ilustrată printr -o diagramă de componente

53 CAPITOLUL 4 – INPLEM ENTAREA APLICAȚIEI
4.1. ARHITECTURA IN TERNĂ A CLASELOR

La baza funcționării aplicației stau clasele de prelucrare a date lor provenite de la
senzori, clasele de detectarea și numărare a pașilor, clasele de afișare a datelor.
Clasele de prelucre a datelor provenite de la senzori iau ca intrare datele de la senzorii
acceleroletru, magenetometru, girometru și returneză acceler ația lineară normalizată și
poziția curentă a telefonului în sistemul de coordonate globale.
Clasele de date, detectarea și numărarea pașilor iau ca intrare accelerația lineară și
prelucrează datele pentru a determina deplasarea dispozitivului, ele return ând numărul de
pași detectați.
Clasele de afișare iau ca intrare numărul de pași detectați și unghiul cu care se învârte
dispozitivul în jurul axei Z și calculează pentru fiecare pas coordonatele X și Y după care
deseneză câte o dreaptă din punct în punct .

Figura 4.1 – Fluxul de date reprezentat pintr -o diagramă de DataFlow

54

Figura 4.2 – Diagramă de secvențe – funcționare aplicație

55 4.1.1. CLASE DE PREL UCRARE A DATELOR DE SENZORI

56 Figura 4.3 – Diagramă de clase pentru clasele: BaseFilter, AveragingFilter,
OrientationFusion, OrientationComplimentaryFusion, MedianFilter, LinearAcceleration,
LinearAccelerationFusion, Grativty Util

Interfața BaseFilter define ște metodele de bază filter() , getOutput() , reset() ,
setTimeConstant() care vor fi implementate de către clasa OrientationFusion și
AveregingFilter.
Clasa abstractă OrientationFusion definește metodele filter() , getBaseOrientation() ,
getFusedOrientation(), OrientationFusion(), reset(), ro tationVectorToQuaternion(),
setAcceleration(), setMagneticField(), setOrientation(), setTimeConstant().
Clasa OrientationComplementaryFusion extinde clasa OrientationFusion și cu
ajutorul metodelor părintelui și a metodei calculateFusedOrientation() calcul ează orientarea
dispozitivului. Metoda getOutput() returnează orientarea dispozitivului.
Clasa LinearAccelerationFusion se intanțează cu un obiect de timp
OrientationFusion (în cazul nostru OrientationComplementaryFusion) care furnizează
orientarea obiectu lui. Cu ajutorul clasei GravityUtil el scade accelerația gravitațională din
datele primite de la senzor și returnează accelerația lineară.
Clasa GravityUtil primește orientația dispozitivului de la clasa
LinearAccelerationFusion și calculează accelerația g ravitațională
(getGravityFromOrientation() ) pe fiecare axă, în funcție de înclinare, și returnează valorile
acestuia cu metoda setGravity() .
Clasa AvregingFilter implementează BaseFilter plus suprascrie metoda reset() .
Clasa MedianFilter extinde Avraging f ilter. Metoda getMean() ia ca intrare
accelerația lineară și returnează mediana acesteia din fereastra de timp. Prin metoda
setTimeConstant() se poate ajusta mărimea ferestrei de timp. Metoda getOutput() returnează
valorile mediene ale accelerației lineare .
Clasa LinearAcceleration definește metodele filter(), getGravity(), reset() care se vor
moșteni de către clasa LinearAccelerationFusion.

57 4.1.2. CLASE PENTRU DETECTARE ȘI NUMĂ RARE PAȘI

58 Figura 4.4 – Diagramă de clasă pentru clasele: St epCounter, PreProcesingStage,
FilterStage, ScoringStage, DetectionStage, PostProcessStage, DataPoint

Clasa StepCounter încapsulează cinci fire de execuție PreProcesStage, FilterStage,
ScoringStage, DetectionStage și PostProcessStage. Metoda processSample () trimite către
firele de execuție eșantionul curent. Metoda incSteps() incrementează numărul de pași.
Metoda getSteps() returnează numărul de pași detectați. resetSteps() resetează numărul
pașilor măsurați, după chemare numărul pașilor va fi 0. Cu ajutor ul metodei
setSamplingFreq() se poate ajusta frecvența eșantioanelor. Metodele start() și stop() pornesc
și opresc firele de execuție.
Clasa PreProcessStage acumlează eșantioanele și face o interpolare lineară între ele
cu ajutorul metodei linearInterpola te().
Clasa FilterStage primește datele prelucrate de clasa PreProcessStage și are rolul a
filtra zgomotul din semnal cu ajutorul metodei FilterStage() .
Clasa ScoringStage primește ca intrare ieșirea de la clasa FilterStage și are rolul de
a detecta maxi mele de amplitudine cu ajutorul metodei scorePeak() .
Clasa DetectionStage primește ca intrare ieșirea de la clasa ScoringStage și are rolul
de a detecta posibili candidați de pași.
Clasa PostProcessStage primește ca intrare ieșirea de la clasa DetectionS tage și are
rolul de a decide care din posibilii candidați de pași sunt pași, la detectarea unui pas este
chemată metoda clasei StepCounter incSteps() care incrementează numărul de pași.
Clasa DataPoint descrie primitivele care sunt folosite de către clas ele de detectare și
numărare a pașilor.

59 4.1.3. CLASE DE AFIȘ ARE DATE

Figura 4.5 – Diagramă de clase pentru clasele: AccumulatePoints, Path, PathShape,
ShapeDrawable
Clasa AccumlatePoints are rolul de a acumula punctele necesare p entru desenarea
drumului parcurs, primește numărul de pași și unghiul de rotație în jurul axei Z din care
calculează pentru fiecare pas coordonatele x și y necesare pentru a desena drumul parcurs.
Clasa Path este definită de către sistemul de operare andr oid:
https://developer.android.com/reference/android/graphics/Path

60 Clasa PathShape este definită de către sistemul de operare android:
https://developer.android.com/reference/android/graphics/drawable/shapes/PathShape
Clasa ShapeDrawable este definită de către sistemul de operare android:
https://developer.android.com/reference/android/graphics/drawable/ShapeDrawable

61 CAPITOTLUL 5 – REZUL TATE
5.1 REZULTATELE MASU RĂRII DATELOR REALE

Pentru recoltarea datelor au fost folos ite 3 telefoane: Google Pixel, Google Nexus
6P, Samsung A5. Telefonul a fost ținut în mână și podeau a fost una tare (asfalt).

Figura 5.1 Măsurători

62 5.2 CONCLUZII

Aplicația proiectată ajută utilizatorul să scaneze un spațiu 3D p roiectat în 2D cu o
precizie de aproximativ 95%. Utilizatorul poate salva pe dispozitiv spațiile scanate pentru
stocare. Sistemul nu a fost conceput să măsoare spații mai mici decât 1×1 pas, din această
cauză nu are capacitatea de a măsura obiecte care au mărimea mai mică de un pas.
Erori pot fi generate în măsurări dacă utilizatorul își mișcă mâna fără să păsească.
Sistemul detectează vârfuri în semnalul de accelerație și nu poate distinge între un pas sau o
scuturare, amplitudinea semnalului fiind calcul at din toate axele senzorului.
Pe parcursul dezvoltării aplicației am implementat doi algoritmi de integrare a
semanului provenit de la senzoru l de accelerație: unul care calculează spațiul de sub c urbă
prin măsurarea magnitudinii semnalului și altul prin metoda V erlet. Rezultate au fost cu
acumlare de erori din cauza senzorului zgomotos și a preciziei scăzute a senzorilor din
telefoanele inteligente.
Pentru o detecție cu o precizie de 100% a pașilor ar fi recomandat folosirea unui
senzor extern montat pe piciorul utilizatorului care ar furniza semna lul generat de
accelerometru telefonul ui deținut de utilizator , având rolul doar de procesare a datelor.

63 BIBLIOGRAFIE

[1] A. Lawrence, Modern inertial technology: navigation, guidance and control. , Springer
Verlag, New York, (1993)
[2] Android Developers Documentation – https://developer.android.com/
[3] C. S. Roumenin, “Parallel -field Hall microsensors: An overview,” Sensor & Actuators,
vol. 30, no. 1/2, pp. 77, 1992
[4] C. Schott and R. S. Popo vic, “Integrated 3 -D Hall magnetic field sensors,” in
Transducers’99 Tech. Dig., Sendai, Japan, p. 168, 1999
[5] D.H. Titterton, Strapdown inertial navigation technology (2nd Edition), Institution of
Engineering and Technology, Piscataway, New Jersey, U.S. , (2004)
[6] G. de Mey, “Potential calculations in Hall plates,” Advances Electron. Electron Phys.,
vol. 61, p. 1, 1984
[7] G. Schmidt , INS/GPS Technology Trends, NATO RTO Lecture Series, RTO -EN-SET-
116, Low -Cost Navigation Sensors and Integration Technol ogy, March, (2010)
[8] KalebKE – Fsensor – https://github.com/KalebKE/FSensor
[9] M. Kraft, Micromachined inerțial sensors: The state of the art and a look into the future,
IMC Measurement and Control, Vol. 33, (2000)
[10] MEMS technologies for aerospace a pplications in Canada webpage:
http://www.cls3.ca/ mems/
[11] M.L. Sensors, Sensors, Measurement Fusion and Missile Trajectory Optimisation, PhD
Thesis, Cranfield University, Department of Aerospace, (2003)
[12] M.N. Armenise, A.C. Ciminelli, A.F. Dell’Oli o, V.M.N. Passar, Advances in
Gyroscope Technologies, Springer 1st Edition., 2011, VI, 150 p. 62 illus. ISBN 978 -3-642-
15493 -5, (2010)
[13] M. Metz, A. H¨ aberli, M. Schneider, R. Steiner, C. Maier, and H. Baltes, “Contactless
angle measurement using four Hall devices on a single chip,” in Dig. Tech. Papers
Transducers ‘97, Chicago, IL, p. 385, 1997

64 [14] M. Paranjape, I. Filanovsky, and L. J. Ristic, “3 -D vertical Hall magnetic – field sensor
in CMOS technology” Sensor & Actuators, vol. 34, no. 1, pp. 9, 199 2
[15] N. Barbour, G. Schmidt, Inertial Sensor Technology Trends, IEEE Sensors Journal,,
Vol. 1, No. 4 (2001) 332 -339
[16] N. Barbour, R. Hopkins, A. Kourepenis, P. Ward, Inertial MEMS System Applications,
NATO RTO Lecture Series, RTO -EN-SET-116, Low -Cost Navigation Sensors and
Integration Technology, (March 2010)
[17] N. Barbour, Inertial Navigation Sensors, RTO -EN-SET-116, Low -Cost Navigation
Sensors and Integration Technology, (March 2010)
[18] P. Greiff, B. Boxenhorn, T. King, L. Niles, Silicon monolith ic micromechanical
gyroscope. In: Proceedings of IEEE International Conference on Solid State Sensors and
Actuators, pp. 966 – 968, (1991)
[19] R. E. Hopkins, N. Barbour, D.E. Gustafson, P. Sherman, Miniature Inertial and
Augmentation Sensors for Integrate d Inertial/GPS Based Navigation Applications, NATO
RTO Lecture Series, RTO -EN-SET-116, Low -Cost Navigation Sensors and Integration
Technology, (March 2010)
[20] R. Lungu, T.L. Grigorie, Traductoare Accelerometrice și Girometrice, Ed. SITECH,
(2005)
[21] R. S. Popovic, Z. Randjelovic, D. Manic, „Integrated Hall Magnetic Sensors” Sensors
& Actuators, A, No. 2924, p p.1 -5, 2001
[22] S. Kordic, “Integrated silicon magnetic -field sensors,” Sensor &. Actuators, vol. 10, pp.
347, 1986
[23] S. Wiak, K. Smólka, M. D ems, K. Komeza, Numerical modeling of 3D intelligent comb
drive accelerometer structure: Mechanical models COMPEL: The International Journal for
Computation and Mathematics in Electrical and Electronic Engineering, Vol. 25 Iss: 3, pp.
697 – 704, (2006)
[24] University of Oxford – Institute of BIomedical Engineering – Step counter algorithm for
smartphones – https://oxford -step-counter.github.io/

Similar Posts