Indholdsfortegnelse:

Placering af AR -objekter på GPS -koordinater i Augmented Reality: 8 trin (med billeder)
Placering af AR -objekter på GPS -koordinater i Augmented Reality: 8 trin (med billeder)

Video: Placering af AR -objekter på GPS -koordinater i Augmented Reality: 8 trin (med billeder)

Video: Placering af AR -objekter på GPS -koordinater i Augmented Reality: 8 trin (med billeder)
Video: Fiat Ducato Tablet Holder - Driving-Dutchman 2024, Juli
Anonim
Placering af AR -objekter på GPS -koordinater i Augmented Reality
Placering af AR -objekter på GPS -koordinater i Augmented Reality

Denne instruktive vil gå over at lave en mobilapp til at placere AR -objekter på GPS -koordinater med ARkit og ARCore ved hjælp af Unity3D. Jeg vil guide dig gennem opsætning af et projekt, jeg lavede ved hjælp af Mapbox, der giver os mulighed for at mærke beskeder på bestemte GPS -placeringer og skrive dem til en GameSparks -database.

Al software og projekter, vi vil bruge her, er gratis.

Download Unity 3D her, hvis du ikke allerede har det:

unity3d.com/

Trin 1: Hæklinger …

Hæklinger …
Hæklinger …

Så dette er ikke den nemmeste app at lave med de nuværende begrænsninger for mobil GPS og mobilkompas.

For at være ærlig dukker objekterne op, hvor de skal have omkring 50% af tiden. Så resultaterne er ikke store, men de bliver mere præcise, jo tættere du kommer på objekterne.

Uanset hvad tror jeg, at en bedre måde til GPS -baseret AR på dette tidspunkt ville være at bruge et kort, som pokemon go gør, og når du kommer tæt på et objekt, åbner kameraet, og du ser kun det objekt lige foran dig. I fremtiden vil jeg gerne lave en komplet tutorial om en mere enkel implementering som den.

Uanset hvad jeg har brugt Mapbox før, og jeg ved, at de har en konverteringsklasse, der har funktioner til at konvertere GPS -koordinater til Unity -verdenskoordinater. Jeg tænkte, at jeg bare kunne sende nogle GPS -koordinater ind, og de ville vises, hvor jeg ville have dem. Virkede ikke.

Objekterne vises korrekt i forhold til hinanden, men de var aldrig på det rigtige sted. Så jeg undersøgte noget og fandt ud af, at mit Unity Camera skulle justeres med sandt nord for at objekterne skulle dukke op på det rigtige sted.

Problemet er, at kompasset i din telefon aldrig er helt præcist.

Trin 2: Dumt kompas

Dumt kompas
Dumt kompas
Dumt kompas
Dumt kompas

Hovedproblemet er, når du placerer objekter langt fra kameraet, hvis din telefons idé om sand nord er slukket, selv et par grader, vil objekter i afstanden blive vist meget langt væk.

Jeg opgav næsten dette projekt, men en ven fortalte mig om dette GitHub -projekt:

github.com/mapbox/mapbox-ar-unity

Dette er et forsøg på at gøre AR i "world scale" fra Mapbox, hvor objekter er forankret til GPS -koordinater, så Augmented Reality -oplevelser kan fungere udenfor over lange afstande i stedet for bare inde i et lille rum i dit hus.

Deres projekt bruger AR Position delta og GPS Position delta til at beregne en vinkel, der er forskydningen fra AR kameraet til sand nord. Så tag i bund og grund en GPS -læsning, når brugeren starter appen, og få dem til at gå i en lige linje og tage endnu en GPS -læsning. Så med disse to punkter kan du se, hvilken retning vedkommende gik (forudsat at kameraet peger i den retning, de går). De fandt ud af, at dette var mere præcist end at bruge kompasset på telefonen.

Det andet problem, de forsøger at løse, er driften med ARkit. Sporing er ok inde i et lille rum, men når din udendørs går lange afstande ender AR -objekter med at drive langt fra, hvor de skal være.

Trin 3: Endelig en løsning

Endelig en løsning!
Endelig en løsning!

Så dette Mapbox -projekt tilbød en måde at få en pålidelig retning i forhold til det sande nord, så det eneste, der var tilbage, var bare at placere objekterne i verden.

Jeg endte med at udvide dette eksempel lidt, så jeg kunne mærke en tekstbesked på en bestemt GPS -placering og derefter skrive disse oplysninger til en GameSparks -database. Det er det, jeg vil vise dig, hvordan du bruger.

Det eneste problem med dette projekt er, at du skal have en god justering, før det kan bruges.

Hvad jeg mener med justering er, at da Mapbox bruger positionsdeltaer til at beregne kurs, når du først åbner appen, og du skal sørge for, at et jordplan opdages og derefter gå i en lige linje et stykke tid, indtil en korrekt justering er beregnet.

I denne forstand er UX en anden hindring, men i forbedringerne af projektet giver de et eksempel på at placere terninger ned foran brugeren at gå igennem for at sikre en god justering.

Så nu hvor du kender begrænsningerne ved dette projekt, lad mig vise dig, hvordan du bruger det, så fyre kan lege med. Du bliver i sidste ende nødt til at oprette en mapbox -konto og en gameparks -konto, som begge er gratis. Jeg brugte spilparks bare for at kunne gemme GPS -koordinater et eller andet sted, fordi du under testen genstarter og genopbygger appen ret ofte.

Dette burde også fungere med både ARkit og ARcore, men jeg har kun en iPhone i øjeblikket, så det var alt, hvad jeg kunne teste.

Trin 4: Lad os få appen til at fungere

Lad os få appen til at fungere!
Lad os få appen til at fungere!

Første ting først downloade dette projekt fra GitHub:

Gem filen på dit skrivebord, og åbn den i Unity.

Gå til filen, byg indstillinger, og skift din platform til enten Android eller IOS.

Gå nu til Mapbox.com og opret en konto, hvis du ikke allerede har en.

Tag din API -nøgle, og gå tilbage til Unity, klik på fanen Mapbox øverst, og klik på konfigurer. Indsæt din API -nøgle der.

Opret nu en konto på GameSparks.com og klik på knappen øverst til højre for at oprette en ny app.

Kald det, hvad du vil, og kopier din API -nøgle og apphemmelighed. Gå tilbage til Unity og find fanen GameSparks øverst. Klik på konfigurer og indsæt også dine legitimationsoplysninger der.

Trin 5: Konfigurer GameSparks

Konfigurer GameSparks
Konfigurer GameSparks

Nu før appen fungerer, skal vi konfigurere vores database.

GameSparks bruger noSQL, så vi skal først oprette en samling og tilføje de begivenheder, som vores app bruger til at læse, skrive og slette fra serveren.

Opret først en ny samling på GameSparks -webstedet, og kald det, hvad du vil.

Nu skal vi oprette 3 begivenheder.

Det første, appen skal gøre, er at skrive meddelelsesobjekt til databasen.

En besked har en breddegrad, længdegrad og derefter teksten i meddelelsen.

Så gå til konfigurator og tilføj en ny begivenhed. Lav den korte kode "SAVE_GEO_MESSAGE".

Indsæt hvad du vil for navnet og beskrivelsen.

Tilføj den korte kode for 3 attributter:

"LAT" "LON"

"TEKST"

Indstil hver datatype til streng, og indstil standardværdien til 0. Gør standardaggregationstypen for hver enkelt til "brugt i script".

Trin 6: Tilføj de sidste begivenheder …

Tilføj de sidste begivenheder …
Tilføj de sidste begivenheder …

Appen skal også indlæse alle meddelelser fra databasen og læse dem ind i Unity, når appen starter, så vi kan placere en AR -meddelelse, der er gemt i databasen.

Opret en anden begivenhed, og kald den "LOAD_MESSAGE"

Denne begivenhed behøver ikke nogen attributter. Igen sæt hvad du vil for navnet og beskrivelsen.

Gør det samme for en anden begivenhed, og kald det "REMOVE_MESSAGES"

Dette behøver endda heller ikke nogen attributter.

Nu er den sidste ting, vi skal gøre, at tilføje noget "cloud -kode" eller serversidekode, der bliver kaldt, når hver begivenhed startes fra vores app.

Trin 7: Tilføj Cloud -koden

I GameSparks skal du gå til konfigurator og cloud -kode.

Vi skal tilføje et script til hver begivenhed, vi lige har lavet.

I LOAD_MESSAGE -begivenheden skal du tilføje denne kode og gemme den:

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); // returner alle data

I REMOVE_MESSAGES -begivenheden tilføjes denne kode:

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

messageData.remove ({});

Tilføj endelig dette i SAVE_MESSAGES -begivenheden:

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

var messageLat = Spark.getData (). LAT;

var messageLon = Spark.getData (). LON;

var messageText = Spark.getData (). TEKST;

var currentMessage = {

"messLat": messageLat,

"messLon": messageLon,

"messText": messageText,

};

geoMessageList.insert (currentMessage);

Trin 8: VI ER FÆRDIGE

VI ER FÆRDIGE!
VI ER FÆRDIGE!

Dette projekt bruger din enheds unikke id til at godkende med GameSparks -serveren, så du nu kan gå tilbage til Unity og klikke på play, og du skal se "enhed godkendt …" i konsollen

Gå nu til filen, byg indstillinger, og klik på build. Hvis du aldrig har lavet en app til Android eller IOS, skal du muligvis oprette en udviklingskonto hos enten Google eller Apple.

Når appen er på din telefon, skal du først sikre dig, at ARKit eller ARCore registrerer et jordplan. Klik nu på log -knappen i nederste venstre hjørne. Gå et par skridt fremad, og du vil se "beregnet justering" komme op i lyseblåt. Nu skulle UI -knapperne vises, og hvis nogen meddelelser er indlæst i din database, bliver de placeret i verden.

For at mærke en ny GPS AR -besked et eller andet sted, gå til det sted, du vil have beskeden, og klik på meddelelsesikonet øverst til højre på skærmen. Indtast den meddelelse, du vil have, og klik på knappenål!

Anbefalede: