POZIȚIONAREA ÎN SPAȚII ÎNCHISE BAZATĂ PE INDICII VIZUALE [306341]

UNIVERSITATEA DIN BUCUREȘTI

FACULTATEA DE MATEMATICĂ ȘI INFORMATICĂ

DOMENIUL DE LICENȚĂ CALCULATOARE ȘI TEHNOLOGIA INFORMAȚIEI

SPECIALIZAREA TEHNOLOGIA INFORMAȚIEI

LUCRARE DE LICENȚĂ

POZIȚIONAREA ÎN SPAȚII ÎNCHISE BAZATĂ PE INDICII VIZUALE

COORDONATOR ȘTIINȚIFIC:

Lect.dr. STUPARIU MIHAI SORIN

ABSOLVENT: [anonimizat]-IONUT IOVA

BUCUREȘTI

2018

CUPRINS:

CUPRINS FIGURI:

Figura 2.1.1.1 Model canapea asezat intr-o sufragerie prin intermediul tehnologiei AR. 9

Figura 2.1.1.2 Trasarea si afisarea detaliilor folosind AR 10

Figura 2.1.5.1. Extinderea structurii SCNVector3 11

Figura 2.1.5.2. Reprezentarea ierarhica a unei scene si rezultatul grafic 12

Figura 2.2.1.1. [anonimizat] 13

Figura 2.2.2.1. Arhitectura MVC structurata pe straturi 14

Figura 2.3.1. Serviciile oferite de platforma Firebase 15

Figura 3.1.1. Reprezentarea grafica a logicii ecranelor din aplicatie. 17

Figura 3.2.1. Reprezentarea fisierelor in platforma Firebase. 18

Figura 3.2.2. [anonimizat]. 19

Figura 3.4.1.1. Adaugarea sferei Start/Stop la scena 20

Figura 3.4.2.1. Adaugarea indicatorilor la scena. 20

Figura 3.5.3. Atribuirea delegatului pentru a primi detalii despre scena. 21

Figura 3.5.4. Adaugarea modelelor 3D in functie de distanta si tip. 21

Figura 3.5.5. Rezultatul adaugarii sferei Start la scena. 23

Figura 3.5.6. Rezultatul adaugarii sferei Stop si a indicatorilor la scena. 23

Figura 3.5.7. Oprirea inregistrarii si afisarea modalului pentru informatii aditionale. 24

Figura 3.5.7. Reprezentarea grafica a modalului pentru informatii aditionale. 24

Figura 3.5.8. Incarcarea fisierelor pe server 25

Figura 3.6.1. [anonimizat] 26

Figura 3.6.2. [anonimizat] 26

Figura 3.6.2. Ecranul de listare 27

Figura 3.6.3. Ecranul de listare pe harta 27

Figura 3.6.4. Descarcarea scenei de pe server in functie de identificatorul asociat 28

Figura 3.6.5. Detectia codului QR si plasarea modelului pe codul QR. 29

INTRODUCERE

În cadrul dezvoltării fiecărei tehnologii moderne, o mare atenție este în general axată pe tehnologia în sine. [anonimizat], inteligență artificială (AI) a apărut că o [anonimizat]-media, [anonimizat] (și multe alte forme de AI) se diferențiază de programele de calculator tradiționale.

Astăzi, [anonimizat]. [anonimizat]-o în viață noastră de zi cu zi.

Acest lucru este valabil și în cazul realității augmentate (AR) și al realității virtuale (VR), [anonimizat], care au devenit foarte populare încă de la lansare.

Realitatea augumentată este abilitatea de a insera obiecte digitale într-o vizualizare a [anonimizat] scena aflată în vizorul camerei oferind o mare promisiune pentru toate tipurile de aplicații. Există mai multe tipuri de realitate augumentată, în această lucrare se vor aplică principiile realității augumentate bazată pe markeri vizuali.

Realitatea augumentată bazată pe markeri utilizează o cameră și un anumit tip de marker vizual, cum ar fi un cod QR / 2D, pentru a produce un rezultat numai atunci când markerul este detectat de un cititor. Aplicațiile bazate pe marcaje utilizează o cameră pe dispozitiv pentru a distinge un marcator de orice alt obiect din lumea reală. Structuri distincte, dar simple (cum ar fi un cod QR ) sunt folosite că markeri, deoarece pot fi recunoscuți cu ușurință și nu necesită multă putere de procesare pentru citire. De asemenea, se calculează poziția și orientarea, în care un anumit tip de conținut și / sau informație este apoi suprapusă pe marker.

Capitolul 1. Analiza cerințelor / Motivație

1.1. Context

Lucrarea se bazează pe folosirea realității augumentate și a unor markeri vizuali pentru a genera o rută virtual în interiorul unei clădiri.

Motivația acestei lucrări de licență este reprezentată de dorință mea de a învăța o tehnologie nouă folosind resursele puse la dispoziție dezvoltatorilor de aplicații mobile de către compania Apple. Consider că este o tehnologie ce are și va avea un rol important în toate domeniile prin aplicabilitatea și metodele dinamice de interacțiune.

Acest tip de soluție este foarte folositoare în viața de zi cu zi, fie că ești pe munte și urmezi o ruta montana, la universitate căutând un anumit amfiteatru sau la muzeu, încercând să găsești o anumită sală. Soluția dezvoltată acoperă toate cazurile în care utilizatorul dorește să fie ghidat într-un mediu necunoscut.

1.2. Problemă

Problema pe care lucrarea de licență va încerca să o rezolve este crearea unei rute virtuale în interiorul unei clădiri. Ruta va încerca să fie cât se poate de precisa deoarece presupunem că utilizatorul aplicației nu a mai vizitat clădirea respectivă. Un exemplu foarte bun poate fi reprezentat de către intrarea într-un muzeu și obiectivele din muzeul respectiv. Această soluție funcționează și în spații deschise, o ruta montana reprezentând un alt exemplu.

Principalul competitor al acestei metode l-ar reprezenta localizarea prin GPS, dar în acest context (spațiu închis plin de obstacole) precizia acestei tehnologii nu excelează.

Atunci când semnalele de la sateliții GPS întâlnesc clădiri, receptorul GPS poate fi păcălit de timpul suplimentar pe care l-a luat semnalul pentru a ajunge la el. În aceste cazuri, se observă erori bruște și mari în poziție. Nu există prea multe lucruri care să se facă pentru a reduce efectele erorilor multiple, GPS-ul este pur și simplu mai puțin precis în canioane, fie că sunt făcute din clădiri sau formațiuni naturale.

1.3. Soluția propusă și tehnologiile folosite

Pentru a implementa această soluție avem nevoie de un dispozitiv capabil să suporte realitate augumentată. Spre deosebire de realitatea virtuală , care necesită hardware împreună cu aplicațiile, aproape oricine poate folosi realitatea augmentată pe iPhone. Tot ce aveți nevoie este o aplicație care oferă realitate augmentată. Unele aplicații pot necesita alte funcții, cum ar fi GPS sau Wi-Fi.

De la lansarea iOS 11, toate iPhone-urile recente au suport de realitate la nivel de sistem de operare. Acest lucru se datorează kit-ului ARKit, pe care Apple la creat pentru a ajuta dezvoltatorii de aplicații să creeze mai ușor aplicații AR. Datorită lui iOS 11 și ARKit, a apărut o explozie de aplicații AR.

Alegerea făcută de mine este un telefon iPhone X deoarece acest model are și o cameră de adâncime ce ne oferă o precizie mai mare în plasarea modelelor 3D pe scenă.

Principalul avantaj al acestei soluții este înregistrarea și salvarea rutelor pe server, după înregistrarea unei rute, ea se salvează cu o extensie specifică (scn) și se trimite către server împreună cu coordonatele unde s-a realizat ruta și o poză cu destinația finală. Orice user ce are aplicația mobilă poate descărca ruta respectiv și o poate reproduce scanând codul QR ce conține un identificator unic al rutei de pe server. După ce utilizatorul scanează codul, se descarcă de pe server ruta corespunzătoare și se poziționează pe codul QR (el reprezentând punctul de început al rutei).

Pe scurt, aparatura și tehnologiile folosite pentru realizarea aplicației sunt: un iPhone X (cu sistem de operare iOS 11), limbajul de programare Swift, bază de date în Cloud (Firebase).

1.4. Rezultate obtinute

1.5. Limitări

Ceea ce face ARKit să fie un instrument foarte puternic de AR este procesul de world tracking, el creează o corespondență între lumea reală și cea virtuală folosind o tehnică numită visual-inertial odometry. Tehnica respectivă combină informații de la senzorii de mișcare și analiză video, preluate din scenă vizibilă pe ecranul telefonului. O altă caracteristică a procesului de world tracking este analiză și recunoașterea obiectelor din scenă.

Procesul de world tracking realizat de ARKit este un proces ce produce adesea o precizie impresionantă, ceea ce duce la experiențe AR cât mai reale. Factorul principal ce împiedică acest proces este adunarea eronată a datelor deoarece aceste date sunt preluate din mediul fizic al dispozitivului și există mulți factori ce pot influența această precizie. Unul dintre acești factori este reprezentat de condițiile de iluminare deoarece procesul implică analiza imaginii, care necesită o imagine clară. Calitatea de urmărire și precizia sunt reduse atunci când camera telefonului nu poate vedea detalii, cum ar fi atunci când camera este îndreptată spre un perete gol sau scena este prea întunecată.

Mișcarea excesivă (prea departe, prea repede sau prea agitat) duce la o imagine neclară sau la o distantă prea mare pentru caracteristicile de urmărire între cadrele video, reducând calitatea urmăririi.

Un alt factor important îl reprezintă timpul, când un obiect este plasat în scenă 3D pentru prima data, poziția și amploarea acestuia pot fi inexacte. Având în vedere că obiectul rămâne în scenă în timp, ARKit își îmbunătățește estimarea poziției.

1.6. Structura lucrării

Lucrarea este structurată în 3 capitole în care se detaliază realitatea augumentată, motivația dezvoltării soluției respective, tehnologiile folosite pentru implementare, posibile probleme ce pot împiedica produsul să funcționeze și ulterioare îmbunătățiri.

Capitolul 2. Soluția propusă

2.1. Realitatea augumentată, ARKit si SceneKit

2.1.1. Ce este realitatea augumentată?

Dispozitivele mobile sporesc realitatea prin plasarea de obiecte virtuale în lumea fizică, de obicei prin utilizarea camerei telefonului, acest proces definește conceptul de realitate augumentată. Vizualizarea și interacțiunea se realizează prin afișajul dispozitivului (în cazul nostru prin ecranul telefonului).

Această tehnologie a avansat foarte mult în ultimii ani deoarece companiile precum Apple și Google au pus la dispoziție dezvoltatorilor kit-uri de dezvoltare AR.

Figura 2.1.1.1 Model canapea așezat într-o sufragerie prin intermediul tehnologiei AR. Sursa [1]

Un exemplu foarte bun de aplicabilitate este aplicația IKEA Place dezvoltată de compania IKEA ce are ca scop amplasarea produselor prezente în magazin prin propria casă folosind modele 3D ale produselor (figura 2.1.1.1.).

Figura 2.1.1.2 Trasarea și afișarea detaliilor folosind AR. Sursa [2]

Un alt exemplu relevând este aplicația dezvoltată de firma American Airlines ce are ca scop ghidarea prin aeroport a pasagerilor. Aplicația oferă informații precum numărul porții la care trebuie să ajungă, distanța și timpul până la decolare. Aplicația are un concept foarte asemănător cu cel al lucrării de licență și a reprezentat o sursă de inspirație (figura 2.1.1.2.).

2.1.2. Ce este ARKit?

ARKit este un set de instrumente creat de către Apple pentru a ușura procesul de dezvoltare și implementare al aplicațiilor de mobil ce utilizează realitatea augumentată pentru iOS. El combină urmărirea mișcării dispozitivului, captarea scenei camerei, procesarea avansată a scenelor și facilitățile de afișare pentru a simplifică sarcina de a construi o experiență AR. Se poate utiliza această tehnologie pentru a crea mai multe tipuri de experiențe AR utilizând fie camera din spate, fie camera frontală a unui dispozitiv iOS.

2.1.3. Ce este SceneKit?

Instrumentele prezente în SceneKit au scopul de e ajută dezvoltatorul în manipularea obiectelor și scenelor 2D, cât și 3D, implementand conținutul că o structură arborescentă a nodurilor, cunoscută și sub denumirea de scenă grafică. O scenă constă dintr-un nod rădăcină, care definește un spațiu de coordonate pentru lumea scenei și alte noduri care populează lumea cu conținut vizibil. SceneKit afișează scene, procesează grafic scenele și realizează animații înainte de redarea eficientă a fiecărui cadru pe GPU.

2.1.4. Ce dispozitive se pot folosi de această tehnologie?

Oricine utilizează un dispozitiv iOS care rulează pe procesoarele Apple A9, A10 sau A11 Bionic. Acestea includ iPhone-urile 6s și 6s Plus , iPhone 7 și iPhone 7 Plus , toate modelele iPad Pro, iPad-ul de 9,7, iPhone 8, 8 Plus și iPhone X. Acestea sunt milioane de dispozitive care pot utiliza aplicații AR.

2.1.5. ARKit si SceneKit

În dezvoltarea proiectului de licență aceste două librării au avut un rol esențial. Pentru a înțelege mai bine rolul și impactul lor asupra proiectului vom analiza clasele, metodele, proprietățile și api-urile folosite.

SCNVector3(structură) – încapsulează coordonatele x, y și z pe sistemul de coordonate.

Figura 2.1.5.1. Extinderea structurii SCNVector3

Pentru determinarea distanței dintre 2 obiecte SCNVector3 ce este necesară în proiect a fost nevoie să extindem clasa pentru a implementa metodele length și distance (Figura 3.1.5.1.).

SCNNode(clasă) – deține proprietăți precum poziția, rotațiile și alte transformări ale unui nod, care definesc un sistem de coordonate. Sistemele de coordonate ale tuturor sub-nodurilor sunt relativ la cel al nodului părinte.

SCNScene(clasă) – descrie o scenă 3D, ea încapsulează o ierarhie de noduri. Este important de menționat că avem doar un singur nod rădăcină, în timp ce unele formate de fișiere pot avea mai multe noduri la baza ierarhiilor lor. Nodul rădăcină al fișierelor importate va fi ierarhic sub nodul rădăcină al scenei.

SCNSphere(clasă) – folosită pentru generarea unei sfere, constructorul primește că parametru rază dorită.

SCNMaterial(clasă) – determina culorile și texturile un obiect 3D ce urmează a fi randat.

SCNLight(clasă) – reprezintă o sursă de lumina ce se poate atașa pe un nod(SCNNode).

Figura 2.1.5.2. Reprezentarea ierarhica a unei scene și rezultatul grafic. Sursa [3]

Se poate observa structura ierarhică din figura 2.1.5.2. în care este creeată scena reprezentată grafic în partea dreapta a imaginii. Scena conține nodul rădăcină căruia îi sunt atașate la rândul lui noduri ce pot avea și ele noduri atașate.

2.2. Soluția folosită pe client

Dezvoltarea aplicațiilor ce rulează pe sistemul de operare iOS se realizează folosind IDE-ul (integrated development environment) XCode.

2.2.1. Ce este Xcode?

Xcode este un set de instrumente pentru dezvoltatori utilizate pentru a crea aplicații iPad, iPod, iPhone și Mac. Este similar cu modul în care dezvoltatorii Windows utilizează Visual Studio pentru a crea programe pentru platforma Windows. Dacă ați utilizat vreodată o aplicație de iPhone sau Mac, ea este scrisă în XCode folosind unul dintre limbajele de programare Swift sau Objective-C.

Printre facilitatile mai speciale ale XCode se numara:

Sistem de versionare inclus (version control system)

Simulator ce permite dezvoltarea aplicațiilor fără a avea dispozitivele fizic

Rapoarte despre crash-urile aplicatiilor beta

Rularea aplicațiilor pe dispozitivele fizice prin wireless

Figura 2.2.1.1. Interfata IDE-ului XCode. Sursa [4]

2.2.1. De ce Swift?

Între cele 2 limbaje de programare disponibile (Swift/ Objective-C) varianta aleasă de mine este Swift. Apărut în 2014, el reprezintă înlocuitorul vechiului limbaj Objective-C. Principalele caracteristici care îl diferențiază de predecesorul lui sunt:

este open source ceea ce îl face un limbaj cu o strânsă legătură cu comunitatea

este sigur deoarece introduce conceptul de opționale, astfel numărul erorilor scade

este rapid deoarece a fost construit special pentru a crește performanță aplicațiilor. Conform Apple, este mai rapid cu 2,6 ori decât Objective-C

Eu am ales acest limbaj deoarece prima mea interacțiune cu dezvoltarea aplicațiilor iOS a fost la apariția acestui limbaj.

2.2.2. Arhitectura MVC

Arhitectura folosită pentru realizarea aplicației mobile este arhitectură recomandată de către compania Apple: MVC (Model-View-Controller). Ea este formată din 3 straturi ce separă partea dinamică a aplicației (View-ul ce reprezintă partea grafică a aplicației unde utilizatorul poate interacționa cu datele) de partea de business logic (Controller-ul unde se execută acțiunile primite din View ce au ca rezultat modificarea modelului și viceversa) și de partea de date (reprezentată de Model)

Apple și-a pus propria amprentă pe această arhitectură, rezultatul fiind reprezentat de o unificare a View-ului cu Controller-ul.

Figura 2.2.2.1. Arhitectura MVC structurata pe straturi. Sursa[5]

2.3. Solutia folosita pe server

Firebase este o platformă deținută de către compania Google ce oferă dezvoltatorilor instrumentele necesare pentru a dezvoltă aplicații de înaltă calitate, pentru a crește numărul de utilizatori și a monetiza aplicația fără a fi nevoie de cunoștiințe legate de servere.

Figura 2.3.1. Serviciile oferite de platforma Firebase. Sursa [6]

Serviciile oferite de Firebase sunt într-un număr foarte mare și acoperă toate nevoile unui dezvoltator de aplicații mobile sau web. Pe scurt, serviciile oferite sunt:

Real Time Database – reprezentat de către o baza de date NoSQL (bază de date ce oferă un mecanism de stocare și recuperare a datelor , care este modelat în alte moduri decât relațiile tabelare folosite în bazele de date relaționale) ce are o legătură client-server continuă folosind web sockets.

Storage – responsabil de salvarea fișierelor în Cloud

Hosting – Firebase include un serviciu de găzduire ușor de folosit pentru toate fișierele statice

Autentificare – serviciu de autentificare folosind nume utilizator/email și parolă. Ce face acest serviciu interesant autentificarea prin intermediul rețelelor sociale (Google, Facebook, Twitter)

Remote Config – modificarea interfeței sau funcționalității aplicației din platforma prin definirea unor variabile

Testing Lab – testare pe grupuri de utilizatori, un exemplu este procedeul de A/B testing în care celor două grupuri (A și B) li se oferă modificări diferite ale aplicației pentru a studia impactul

Crash Report – raportarea erorilor ce pot apărea în aplicație

Cloud Messaging – trimiterea de notificări push către utilizatori sau grupuri de utilizatori, trimiterea mesajelor în timp real către utilizatori

App Indexing – indexarea aplicației pentru a apărea în motoarele de căutare

AdMob – metodă de monetizare a aplicației prin afișarea de reclame

Am ales această soluție deoarece este foarte populară în rândul dezvoltatorilor de aplicații mobile prin serviciile puse la dispoziție și performanță serviciilor.

Capitolul 3. Detalii de implementare

3.1. Structura aplicației

Aplicatia este structurata in 6 ecrane:

Listarea rutelor

Listarea rutelor pe harta

Inregistrarea unei rute noi

Detalii despre stack-ul de tehnologii folosite

Incarcarea unei rute

Figura 3.1.1. Reprezentarea grafica a logicii ecranelor din aplicatie.

3.2. Stocarea datelor in Cloud

Având în vedere că soluția implementată utilizează doar 2 servicii Firebase (Storage și Real Time Database), primul pas a fost configurarea acestor servicii.

Configurarea serviciului Storage a constat în organizarea fișierelor în mod ierarhic pentru salvarea și descărcarea lor de pe server. Astfel ele sunt organizate în felul următor: în folderul denumit breadcrumbs se află toate rutele, ele fiind organizate în foldere având ca denumire un id unic dat de către server. În aceste foldere se află 2 fișiere: scene.scn (fișierul ce reprezintă scenă 3D) și image.png (imaginea reprezentând destinația).

Breadcrumbs (folder)

<id_scena> (folder)

Scene.scn (fisier cu extensia scn)

Image.png (fisier cu extensia png)

<id_scena> (folder)

Scene.scn (fisier cu extensia scn)

Image.png (fisier cu extensia png)

<id_scena> (folder)

Scene.scn (fisier cu extensia scn)

Image.png (fisier cu extensia png)

Figura 3.2.1. Reprezentarea fisierelor in platforma Firebase.

Serviciul Real Time Database este folosit pentru salvarea entităților aferente unei rute. Aceste date suplimentare au rolul de a afișa mai multe detalii utilizatorului și de a transmite date aplicației ce influențează interfață (cum de exemplu sunt coordonatele folosite la amplasarea pin-urilor pe harta).

Figura 3.2.2. Structura bazei de date no-sql in platforma Firebase.

Ca și în cazul serviciului Storage, sub cheia breadcrumbs, ce reprezintă numele bazei de date, se află id-urile unice (sincronizate cu cele din Storage) reprezentând datele unei rute. Pentru o manipulare mai ușoară am preferat să adaug id-ul și în interiorul entității.

3.3. Conexiunea client – server

Conexiunea dintre Firebase și aplicația mobilă se face instalând librăria “Firebase/Core” prin intermediul managerului de pachete “Cocoa Pods” pentru a avea acces la toate API-urile expuse de Firebase.

3.4. Crearea și adăugarea obiectelor 3D în scenă

În scena folosită există 3 obiecte 3D generate: o sfera cu textul START plasată la începutul rutei, o scenă cu textul STOP plasată la sfârșitul rutei și marcatorii de direcție(reprezentați prin săgeți) plasați între cele 2 sfere.

3.4.1. Modelul de start/stop

După cum se observă și în Figura 3.4.1.1., metoda createStartingPoint primește 3 parametrii: root (nodul rădăcină al scenei), position (poziția unde trebuie adăugat noul nod) și isStart ce are rolul de a determina ce fel de sfera este (START/STOP). După crearea unei sfere, adăugarea texturii și aplicatrea unei acțiuni de rotație pe axa y de durata 1 secundă, se adaugă noul nod ce conține sfera la nodul rădăcina pentru a apărea și grafic pe ecranul telefonului prin apelarea metodei addChildNode.

Figura 3.4.1.1. Adaugarea sferei Start/Stop la scena

3.4.2. Modelul de sageata

Figura 3.4.2.1. Adaugarea indicatorilor la scena.

Metoda createPath primește că 3 parametrii: root (nodul rădăcina al scenei), current ce reprezintă poziția curentă unde trebuie adăugat nodul și last ce reprezintă poziția nodului anterior adăugat (ne folosim de această poziție pentru a orienta săgeata în scenă). După crearea nodului reprezentat de o săgeata, i se aplică și orientarea în funcție de locația nodului anterior folosind metodă rotateBy), apoi se adaugă la scenă prin adăugarea noului nod la nodul rădăcina folosind metodă addChildNode (figura 3.4.2.1.).

3.5. Inregistrarea unei rute si stocarea lui in Cloud

La inițializarea scenei, punctul 0 este reprezentat de către telefonul mobil, axa de coordonate se va plasa în poziția în care se află dispozitivul în lumea reală (figura 3.5.1. și 3.5.2.).

Figura 3.5.1. Sursa [7] Figura 3.5.2.

Atât începutul cât și sfârșitul rutei este decis de către funcția recordingAction (Figura 3.5.3.). În funcție de variabila “isRecording” se realizează începerea rutei (prin apelarea funcției startTracking) sau finalul rutei (prin apelarea funcției stopTracking).

Figura 3.5.3. Determinarea starii ecranului de inregistrare ruta

Funcția startTracking (figura 3.5.4.) artibuie scenei delegatul prezent în View Controller-ul prezent , rezultatul fiind transmiterea continua a detaliilor despre scena curentă prin implementarea metodei renderer prezența în protocolul ARSCNViewDelegate (Figura 3.5.5.).

Figura 3.5.4. Atribuirea delegatului pentru a primi detalii despre scena.

Adăugarea nodurilor la scenă se face pe thread-ul principal dar asincron pentru a nu bloca UI-ul (în aplicațiile mobile partea de UI este randata și actualizată doar de thread-ul principal), în cazul în care variabila lastNode nu conține un obiect de tipul SCNVector3 înseamnă că nodul ce trebuie adăugat la scenă reprezintă punctul de start și se va adaugă o sfera prin metodă createStartingPoint ce primește că parametrii nodul rădăcina și un obiect de tip SCNVector3 ce reprezintă poziția camerei în raport cu scena (figura 3.5.1. / figura 3.5.2.) pentru a amplasa noul nod.

În cazul în care lastNode conține o valoare, se verifică distanță între ultimul nod și poziția camerei în scenă deoarece dorim că indicatorii 3D adăugați scenei să fie poziționați la distanță de 0,5 metrii unul de altul. După adăugarea indicatorului prin metodă createPath se actualizează și variabila ce deține ultimul nod adăugat.

Figura 3.5.5. Adaugarea modelelor 3D in functie de distanta si tip.

În figura 3.5.6. se observă rezultatul adăugării primului nod (sfera cu textul “START”), iar în figura figura 3.5.7. se observă ultimul nod (sfera cu textul “STOP”) și nodurile dintre aceste 2 puncte (reprezentate printr-un model al unei săgeți).

Figura 3.5.6. Rezultatul adaugarii Figura 3.5.7. Rezultatul adaugarii

sferei Start la scena. sferei Stop si a indicatorilor la scena.

După finalizarea procesului de înregistrare a rutei (din care ne rezultă o scenă ce conține nodurile adăugate) se apelează metodă stopTracking ce creează un nou obiect Breadcrumb cu scenă înregistrată (figura 3.5.8). Rezultatul vizual al acestei funcții este un modal în case se adaugă date suplimentare despre ruta.

Figura 3.5.8. Oprirea inregistrarii si afisarea modalului pentru informatii aditionale.

Figura 3.5.9. Reprezentarea grafica a modalului pentru informatii aditionale.

Rezultatul butonului Save din modal (figura 3.5.9.) este apelarea funcției add din singleton-ul BreadcrumbsManager, responsabil de persistența locală a rutelor și salvarea/preluarea lor de pe server.

Figura 3.5.10. Incarcarea fisierelor pe server

Pe scurt, metodă add (figura 3.5.10.) ne creează un url în sandbox-ul aplicației ce va conține fișierul scene.scn după apelarea metodei write. Rezultatul fiind exportarea scenei și a conținutului ei către url-ul specificat că parametru.

Încărcarea pe server se face apelând API-ul din Firebase Storage în care îi specificam calea pe server și unde se găsește fișierul local pe telefon apelând metodele putFile și putData.

3.6. Preluarea datelor din Cloud

Serviciul Realtime database oferit de Firebase are în spate tehnologia WebSockets (figura 3.6.1.) ce constă într-o conexiune continuă între client (aplicația de mobil) și server (Firebase). Această tehnologie ne permite să actualizăm lista de rute în timp real la orice modificare în baza de date deoarece conexiunea este bidirecțională, că rezultat și serverul poate trimite în orice moment către client.

Figura 3.6.1. Reprezentare client-server WebSockets

Metoda observe se va declanșa și va actualiza lista la orice modificare a datelor, ia creează o nouă referință către serviciul Storage în care specificam calea de pe server unde se află fișierele (este de menționat că nu se descarcă ambele fișiere de pe server, doar poză).

Figura 3.6.2. Descarcarea obiectelor si imaginilor de pe server, fara scene

Rezultatul descărcării datelor de pe server se poate observă în 2 locuri: în ecranul de listare (unde sunt prezentate rutele în formă de listă, figura 3.6.2.) și ecranul de locații (în care rutele sunt amplasate după locația unde s-au înregistrat, figura 3.6.3.).

Figura 3.6.2. Ecranul de listare Figura 3.6.3. Ecranul de listare pe harta

În acest moment avem în ambele ecrane datele despre rutele de pe server mai puțin fișierele cu extensia .scn. Având în vedere numărul și dimensiunea lor, ele se vor descarcă în momentul in care utilizatorul va apasă pe butonul Încarcă ruta sau va scana un cod QR ce conține un identificator valid asociat unei scene pe server.

Incarcarea scenei se face in 2 moduri:

Prin apăsarea butonului ÎNCARCĂ din interfață utilizatorului ce apelează metoda loadScnFromCloud se creează o referință către fișierul scenă de pe server. Metoda write pornește o sesiune de download ce ne descarcă scena și ne returnează calea din sandbox-ul aplicației pentru a o instantia și folosi ulterior (figura 3.6.4.).

Figura 3.6.4. Descarcarea scenei de pe server in functie de identificatorul asociat

Dezavantajul acestei metode o reprezintă posibilitatea de a plasa eronat ruta. Nu se poate garanta că locația utilizatorului este punctul de început al rutei selectate.

b) Prin apăsarea butonului SCANEAZĂ COD QR utilizatorul este dus într-un ecran în care facem o cerere către API-ul de detecție a codurilor de bare să scaneze după coduri QR în cadru. La detecția unui cod QR realizăm un hit test pentru a determina dacă codul QR este pe un plan.

Figura 3.6.5. Detectia codului QR si plasarea modelului pe codul QR.

Rezultatul acestei metode este amplasarea nodului de START pe suprafață codului QR, astfel dacă codul QR este amplasat în locul în care s-a început înregistrarea rutei, el va reprezenta markerul vizual și ancora planului ce ne oferă o precizie mare în reproducerea rutei.

Concluzii

Ca o metodă de îmbunătățire a aplicației curente m-am gândit la faptul că se poate înregistra toată clădirea într-o singură scenă, astfel folosind un program de editare a modelelor 3D, se pot modifică locațiile obiectivelor ce reprezintă destinația și se poate genera drumul automat, rezultând un graf în care nodurile reprezintă obiectivele.

Realitatea augmentată este un alt pas în continuare în era digitală, deoarece în curând vom vedea că mediile noastre se vor schimbă dinamic fie prin intermediul unui smartphone, ochelari, parbrize auto și chiar și ferestre în viitorul apropiat, pentru a afișa conținut și suport îmbunătățit chiar în fața noastră. Acest lucru are aplicații uimitoare care ne permit foarte mult să ne trăim viața mai productiv, mai sigur și mai informativ.

Lucrul cu această tehnologie a fost destul de provocator dar mi-a stârnit o curiozitate mai mare despre acest domeniu și despre metodele de dezvoltare folosind această tehnologie.

Bibliografie

Documente electronice

[1] https://highlights.ikea.com/2017/ikea-place/

[2] https://www.vrfocus.com/2017/10/american-airlines-use-arkit-for-ar-wayfinding/

[3] https://developer.apple.com/documentation/scenekit/scnscene

[4] https://developer.apple.com/xcode/

[5] https://medium.com/ios-os-x-development/modern-mvc-39042a9097ca

[6] https://medium.com/@rajat1saxena/googles-firebase-death-to-the-full-stack-development-in-a-good-way-977e3496b397

[8] https://medium.com/bpxl-craft/importing-3d-models-for-arkit-aa1728697e2

Cărți

Chris Language, Namrata Bandekar, Antonio Bello & Tammy Coron (2018) – ARKit by Tutorials first edition Building Augmented Reality Apps in Swift 4

raywenderlich.com Team, Jawwad Ahmad, Jerry Beers, Michael Ciurus, Richard Critz, Michael Katz, Andy Pereira, Mic Pringle (2017) – iOS 11 by Tutorials: Learning the new iOS APIs with Swift 4

Julien Lange (2015) – Swift 2 Design Patterns

Articole

Index

AR (Augmented Reality)

VR (Virtual reality)

IDE (Integrated development environment)

QR (Quick Response Code)

UI (User Interface)

API (Application programming interface)

Similar Posts