Cuprins:

Plasarea obiectelor AR la coordonatele GPS în realitate augmentată: 8 pași (cu imagini)
Plasarea obiectelor AR la coordonatele GPS în realitate augmentată: 8 pași (cu imagini)

Video: Plasarea obiectelor AR la coordonatele GPS în realitate augmentată: 8 pași (cu imagini)

Video: Plasarea obiectelor AR la coordonatele GPS în realitate augmentată: 8 pași (cu imagini)
Video: #2.7: A fost creată o nouă specie umană! - cu A. Singurov, Max și Oreste - Imunocube - Torser 2024, Iulie
Anonim
Plasarea obiectelor AR la coordonatele GPS în realitate augmentată
Plasarea obiectelor AR la coordonatele GPS în realitate augmentată

Această instrucțiune va merge peste realizarea unei aplicații mobile pentru plasarea obiectelor AR la coordonatele GPS cu ARkit și ARCore folosind Unity3D. Vă voi ghida prin configurarea unui proiect pe care l-am făcut folosind Mapbox, care ne permite să etichetăm mesaje în anumite locații GPS și să le scriem într-o bază de date GameSparks.

Toate software-urile și proiectele pe care le vom folosi aici sunt gratuite.

Descărcați Unity 3D aici dacă nu îl aveți deja:

unity3d.com/

Pasul 1: Obstacole …

Obstacole …
Obstacole …

Deci, aceasta nu este cea mai ușoară aplicație cu limitările actuale ale GPS-ului mobil și ale busolei mobile.

Pentru a fi sincer, obiectele apar acolo unde se presupune că ar putea ajunge la aproximativ 50% din timp. Deci, rezultatele nu sunt excelente, dar devin mai exacte cu cât vă apropiați de obiecte.

Oricum ar fi, cred că o modalitate mai bună de AR bazat pe GPS în acest moment ar fi utilizarea unei hărți așa cum o face pokemon go și când te apropii de un obiect, camera se deschide și vezi doar acel obiect chiar în fața ta. În viitor, aș dori să fac un tutorial complet despre o implementare mai simplă ca asta.

Oricum am folosit Mapbox înainte și știu că au o clasă de conversie care are funcții pentru conversia coordonatelor GPS în coordonatele mondiale Unity. Am crezut că pot trece doar în unele coordonate GPS și vor apărea acolo unde le doresc. Nu a funcționat.

Obiectele se afișează corect una față de alta, dar nu au fost niciodată în locul potrivit. Așa că am făcut câteva cercetări și am constatat că Camera Unity trebuia să fie aliniată cu nordul adevărat pentru ca obiectele să apară în locul potrivit.

Problema este că busola din telefon nu este niciodată complet precisă.

Pasul 2: Busolă stupidă

Stupid Busolă
Stupid Busolă
Stupid Busolă
Stupid Busolă

Problema principală este atunci când plasați obiecte departe de cameră, dacă ideile telefoanelor dvs. despre nordul adevărat sunt oprite chiar și la câteva grade, obiectele aflate la distanță vor apărea foarte departe.

Aproape am renunțat la această aventură, dar un prieten mi-a spus despre acest proiect GitHub:

github.com/mapbox/mapbox-ar-unity

Aceasta este o încercare de a face AR la scară mondială de la Mapbox, unde obiectele sunt ancorate la coordonatele GPS, astfel încât experiențele de realitate augmentată să poată funcționa în exterior pe distanțe mari, în loc de doar într-o cameră mică din casa ta.

Proiectul lor folosește delta de poziție AR și delta de poziție GPS pentru a calcula un unghi care este decalajul de la camera AR la nordul adevărat. Deci, practic luați o citire GPS atunci când utilizatorul pornește aplicația și cereți-i să meargă în linie dreaptă și să ia o altă citire GPS. Apoi, cu aceste două puncte, puteți spune în ce direcție mergea acea persoană (presupunând că camera foto îndreaptă în direcția în care merge). Au descoperit că acest lucru era mai precis decât utilizarea busolei de pe telefon.

Cealaltă problemă pe care încearcă să o rezolve este deriva cu ARkit. Urmărirea este ok în interiorul unei camere mici, dar atunci când vă deplasați pe distanțe lungi, obiectele AR ajung să se îndrepte departe de locul în care ar trebui să fie.

Pasul 3: În cele din urmă o soluție

În cele din urmă o Soluție!
În cele din urmă o Soluție!

Deci, acest proiect Mapbox a oferit o modalitate de a obține o direcție de orientare fiabilă față de nordul adevărat, astfel încât nu a mai rămas decât să așeze obiectele în lume.

Am ajuns să extind puțin acest exemplu, astfel încât să pot eticheta un mesaj text la o anumită locație GPS și apoi să scriu acele informații într-o bază de date GameSparks. Asta îți voi arăta cum să folosești.

Singura problemă cu acest proiect este că trebuie să obțineți o aliniere bună înainte de a putea fi utilizat.

Ceea ce vreau să spun prin aliniere este că, din moment ce Mapbox folosește delta de poziție pentru a calcula titlul, atunci când deschideți prima dată aplicația și trebuie să vă asigurați că este detectat un plan de sol și apoi să mergeți în linie dreaptă pentru o vreme până când se calculează o aliniere adecvată.

În acest sens, UX este un alt obstacol, dar în îmbunătățirile proiectului, acestea dau un exemplu de plasare a cuburilor în fața utilizatorului pentru a trece, pentru a asigura o bună aliniere.

Deci, acum, când cunoașteți limitele acestui proiect, permiteți-mi să vă arăt cum să îl folosiți, astfel încât băieții să poată juca. În cele din urmă va trebui să creați un cont mapbox și un cont de gamesparks, ambele fiind gratuite. Am folosit gamesparks doar pentru a putea salva coordonatele GPS undeva, deoarece în timpul testării veți reporni și reconstrui aplicația destul de des.

De asemenea, acest lucru ar trebui să funcționeze atât cu ARkit, cât și cu ARcore, dar am doar un iPhone în acest moment, așa că aș putea să testez.

Pasul 4: Permiteți funcționarea aplicației

Permiteți funcționarea aplicației!
Permiteți funcționarea aplicației!

Primele lucruri descarcă mai întâi acest proiect de pe GitHub:

Salvați fișierul pe desktop și deschideți-l în Unity.

Accesați fișierul, creați setări și comutați-vă platforma la Android sau IOS.

Acum accesați Mapbox.com și creați un cont dacă nu aveți deja unul.

Prindeți cheia API și reveniți la Unity, faceți clic pe fila Mapbox din partea de sus și faceți clic pe configurare. Inserați cheia API acolo.

Acum creați un cont pe GameSparks.com și faceți clic pe butonul din dreapta sus pentru a crea o aplicație nouă.

Apelați-l oricum doriți și copiați cheia API și secretul aplicației. Reveniți la Unity și găsiți fila GameSparks din partea de sus. Faceți clic pe configurați și lipiți acreditările acolo.

Pasul 5: Configurați GameSparks

Configurați GameSparks
Configurați GameSparks

Acum, înainte ca aplicația să funcționeze, trebuie să ne configurăm baza de date.

GameSparks folosește noSQL, deci trebuie mai întâi să creăm o colecție și să adăugăm evenimentele pe care aplicația noastră le folosește pentru a citi, scrie și șterge de pe server.

Mai întâi creați o nouă colecție pe site-ul GameSparks și numiți-o cum doriți.

Acum trebuie să creăm 3 evenimente.

Primul lucru pe care trebuie să îl facă aplicația este să scrieți obiectul mesaj în baza de date.

Un mesaj are o latitudine, longitudine și apoi textul mesajului.

Deci, accesați configuratorul și adăugați un eveniment nou. Creați codul scurt „SAVE_GEO_MESSAGE”.

Introduceți orice doriți pentru nume și descriere.

Adăugați codul scurt pentru 3 atribute:

„LAT” „LON”

"TEXT"

Setați fiecare tip de date la șir și setați valoarea implicită la 0. Faceți ca tipul de agregare implicit al fiecăruia să fie „utilizat în script”.

Pasul 6: Adăugați evenimentele finale …

Adăugați evenimentele finale …
Adăugați evenimentele finale …

De asemenea, aplicația trebuie să încarce toate mesajele din baza de date și să le citească în Unity atunci când aplicația pornește, astfel încât să putem plasa un mesaj AR care este stocat în baza de date.

Creați un alt eveniment și numiți-l „LOAD_MESSAGE”

Acest eveniment nu are nevoie de atribute. Puneți din nou orice doriți pentru nume și descriere.

Faceți același lucru pentru un alt eveniment și numiți-l „REMOVE_MESSAGES”

Nici acest lucru nu are nevoie de atribute.

Acum, ultimul lucru pe care trebuie să-l facem este să adăugăm un „cod cloud” sau un cod al serverului, care este apelat la pornirea fiecărui eveniment din aplicația noastră.

Pasul 7: Adăugați codul Cloud

În GameSparks accesați configuratorul și codul cloud.

Trebuie să adăugăm un script la fiecare eveniment pe care tocmai l-am făcut.

În evenimentul LOAD_MESSAGE adăugați acest cod și salvați-l:

var messageData = Spark.runtimeCollection ("GeoMessage");

var cursor = messageData.find ();

var allMessages = ;

while (cursor.hasNext ()) {

var obj = cursor.next ();

delete (obj ["_id"]);

allMessages.push (obj);

}

Spark.setScriptData ("all_Messages", allMessages); // returnează toate datele

În evenimentul REMOVE_MESSAGES adăugați acest cod:

var messageData = Spark.runtimeCollection ("GeoMessage");

messageData.remove ({});

În cele din urmă, în evenimentul SAVE_MESSAGES adăugați următoarele:

var geoMessageList = Spark.runtimeCollection ("GeoMessage");

var messageLat = Spark.getData (). LAT;

var messageLon = Spark.getData (). LON;

var messageText = Spark.getData (). TEXT;

var currentMessage = {

"messLat": messageLat,

"messLon": messageLon,

„messText”: mesajText,

};

geoMessageList.insert (currentMessage);

Pasul 8: SUNTEM GATA

AM TERMINAT!
AM TERMINAT!

Acest proiect folosește ID-ul unic al dispozitivului dvs. pentru a vă autentifica cu serverul GameSparks, astfel încât să puteți reveni la Unity și să faceți clic pe redare și ar trebui să vedeți în consolă „dispozitivul autentificat …”

Acum accesați fișierul, creați setările și faceți clic pe compilare. Dacă nu ați creat niciodată o aplicație pentru Android sau IOS, poate fi necesar să configurați un cont de dezvoltare fie cu Google, fie cu Apple.

Odată ce aplicația este pe telefon, trebuie mai întâi să vă asigurați că ARKit sau ARCore detectează un plan de sol. Acum faceți clic pe butonul jurnal din colțul din stânga jos. Mergeți câțiva pași înainte și veți vedea că „alinierea calculată” apare în albastru deschis. Acum ar trebui să apară butoanele UI și, dacă sunt încărcate mesaje în baza de date, acestea vor fi plasate în lume.

Pentru a eticheta un nou mesaj GPS AR undeva, mergeți la locația în care doriți să fie mesajul și faceți clic pe pictograma mesajului din partea dreaptă sus a ecranului. Tastați orice mesaj doriți și faceți clic pe butonul de fixare!

Recomandat: