Inhoudsopgave:

AR-objecten op GPS-coördinaten plaatsen in augmented reality: 8 stappen (met afbeeldingen)
AR-objecten op GPS-coördinaten plaatsen in augmented reality: 8 stappen (met afbeeldingen)

Video: AR-objecten op GPS-coördinaten plaatsen in augmented reality: 8 stappen (met afbeeldingen)

Video: AR-objecten op GPS-coördinaten plaatsen in augmented reality: 8 stappen (met afbeeldingen)
Video: Avi Loeb: Bewustzijn, UAP's, Jacques Vallée 2024, Juli-
Anonim
AR-objecten op GPS-coördinaten plaatsen in Augmented Reality
AR-objecten op GPS-coördinaten plaatsen in Augmented Reality

Deze instructable gaat over het maken van een mobiele app voor het plaatsen van AR-objecten op GPS-coördinaten met ARkit en ARCore met behulp van Unity3D. Ik zal je helpen bij het opzetten van een project dat ik heb gemaakt met behulp van Mapbox waarmee we berichten op bepaalde GPS-locaties kunnen taggen en ze naar een GameSparks-database kunnen schrijven.

Alle software en projecten die we hier gebruiken zijn gratis.

Download Unity 3D hier als je het al hebt:

unity3d.com/

Stap 1: hindernissen…

hindernissen…
hindernissen…

Dit is dus niet de gemakkelijkste app om te maken met de huidige beperkingen van mobiele GPS en mobiel kompas.

Om eerlijk te zijn, verschijnen de objecten waar ze zouden moeten zijn, misschien ongeveer 50% van de tijd. De resultaten zijn dus niet geweldig, maar ze worden wel nauwkeuriger naarmate je dichter bij de objecten komt.

Hoe dan ook, ik denk dat op dit moment een betere manier om op GPS gebaseerde AR te gebruiken een kaart zou zijn zoals Pokemon Go doet en wanneer je dicht bij een object komt, opent de camera en zie je alleen dat object recht voor je. In de toekomst zou ik graag een volledige tutorial willen doen over een meer eenvoudige implementatie zoals deze.

Hoe dan ook, ik heb Mapbox eerder gebruikt en ik weet dat ze een conversieklasse hebben die functies heeft voor het converteren van GPS-coördinaten naar Unity-wereldcoördinaten. Ik dacht dat ik gewoon wat GPS-coördinaten kon doorgeven en ze zouden verschijnen waar ik ze wilde hebben. Werkte niet.

De objecten worden correct weergegeven ten opzichte van elkaar, maar ze waren nooit op de juiste plaats. Dus ik deed wat onderzoek en ontdekte dat mijn Unity Camera moest worden uitgelijnd met het ware noorden om de objecten op de juiste plaats te laten verschijnen.

Het probleem is dat het kompas in je telefoon nooit helemaal nauwkeurig is.

Stap 2: Domme kompas

Dom kompas
Dom kompas
Dom kompas
Dom kompas

Het grootste probleem is dat wanneer je objecten ver van de camera plaatst, als het idee van het echte noorden van je telefoon zelfs maar een paar graden afwijkt, objecten in de verte erg ver weg lijken.

Ik gaf deze onderneming bijna op, maar een vriend vertelde me over dit GitHub-project:

github.com/mapbox/mapbox-ar-unity

Dit is een poging om AR op wereldschaal te doen vanuit Mapbox, waarbij objecten worden verankerd aan GPS-coördinaten, zodat Augmented Reality-ervaringen buiten over lange afstanden kunnen werken in plaats van alleen in een kleine kamer in uw huis.

Hun project gebruikt AR-positiedelta's en GPS-positiedelta's om een hoek te berekenen die de offset is van de AR-camera naar het ware noorden. Neem dus in principe één GPS-meting wanneer de gebruiker de app start en laat ze in een rechte lijn lopen en nog een GPS-meting doen. Dan kun je met deze twee punten zien in welke richting die persoon liep (ervan uitgaande dat hun camera in de richting wijst waarin ze lopen). Ze ontdekten dat dit nauwkeuriger was dan het kompas op de telefoon te gebruiken.

Het andere probleem dat ze proberen op te lossen, is de drift met ARkit. Tracking is oké in een kleine kamer, maar als je buiten lange afstanden loopt, drijven AR-objecten ver weg van waar ze zouden moeten zijn.

Stap 3: Eindelijk een oplossing

Eindelijk een oplossing!
Eindelijk een oplossing!

Dus dit Mapbox-project bood een manier om een betrouwbare kijkrichting te krijgen ten opzichte van het ware noorden, dus het enige dat overbleef was om de objecten gewoon in de wereld te plaatsen.

Uiteindelijk heb ik dit voorbeeld een beetje uitgebreid, zodat ik een sms-bericht op een bepaalde GPS-locatie kon taggen en die informatie vervolgens naar een GameSparks-database kon schrijven. Dat is wat ik je ga laten zien hoe te gebruiken.

Het enige probleem met dit project is dat je een goede uitlijning moet krijgen voordat het kan worden gebruikt.

Wat ik bedoel met uitlijning is dat aangezien Mapbox positiedelta's gebruikt om de koers te berekenen, wanneer je de app voor het eerst opent en je ervoor moet zorgen dat een grondvlak wordt gedetecteerd en dan een tijdje in een rechte lijn loopt totdat een juiste uitlijning is berekend.

In die zin is UX een andere hindernis, maar in de verbeteringen van het project geven ze een voorbeeld van het plaatsen van kubussen voor de gebruiker om doorheen te lopen om een goede uitlijning te garanderen.

Dus nu je de beperkingen van dit project kent, wil ik je laten zien hoe je het kunt gebruiken, zodat jongens kunnen spelen. Je zult uiteindelijk een mapbox-account en een gamesparks-account moeten maken, die beide gratis zijn. Ik heb gameparks gebruikt om ergens GPS-coördinaten op te slaan, want tijdens het testen zul je de app vrij vaak opnieuw opstarten en opnieuw opbouwen.

Dit zou ook moeten werken met zowel ARkit als ARcore, maar ik heb momenteel alleen een iPhone, dus dat was alles wat ik kon testen.

Stap 4: Laten we de app laten werken

Laat de app werken!
Laat de app werken!

Download eerst dit project van GitHub:

Sla het bestand op uw bureaublad op en open het in Unity.

Ga naar bestand, bouw instellingen en schakel uw platform over naar Android of IOS.

Ga nu naar Mapbox.com en maak een account aan als je er nog geen hebt.

Pak je API-sleutel en ga terug naar Unity, klik op het tabblad Mapbox bovenaan en klik op configureren. Plak daar uw API-sleutel.

Maak nu een account aan op GameSparks.com en klik op de knop rechtsboven om een nieuwe app aan te maken.

Noem het zoals je wilt en kopieer je API-sleutel en app-geheim. Ga terug naar Unity en vind bovenaan het tabblad GameSparks. Klik op configureren en plak daar ook uw inloggegevens.

Stap 5: Configureer GameSparks

Configureer GameSparks
Configureer GameSparks

Voordat de app werkt, moeten we onze database configureren.

GameSparks gebruikt noSQL, dus we moeten eerst een verzameling maken en de gebeurtenissen toevoegen die onze app gebruikt om te lezen, schrijven en verwijderen van de server.

Maak eerst een nieuwe collectie aan op de GameSparks-website en noem die hoe je maar wilt.

Nu moeten we 3 evenementen maken.

Het eerste dat de app hoeft te doen, is een berichtobject naar de database schrijven.

Een bericht heeft een breedtegraad, lengtegraad en vervolgens de tekst van het bericht.

Ga dus naar de configurator en voeg een nieuw evenement toe. Maak de korte code "SAVE_GEO_MESSAGE".

Vul in wat je wilt voor de naam en beschrijving.

Voeg de korte code toe voor 3 attributen:

"LAT" "LON"

"TEKST"

Stel elk gegevenstype in op tekenreeks en stel de standaardwaarde in op 0. Stel het standaardaggregatietype van elk in op 'gebruikt in script'.

Stap 6: Voeg de laatste gebeurtenissen toe…

Voeg de laatste evenementen toe…
Voeg de laatste evenementen toe…

De app moet ook alle berichten uit de database laden en ze inlezen in Unity wanneer de app start, zodat we AR-berichten kunnen plaatsen die in de database zijn opgeslagen.

Maak een ander evenement en noem het 'LOAD_MESSAGE'

Deze gebeurtenis heeft geen attributen nodig. Zet opnieuw wat je wilt voor de naam en beschrijving.

Doe hetzelfde voor een ander evenement en noem het 'REMOVE_MESSAGES'

Dit heeft zelfs geen attributen nodig.

Het laatste wat we nu moeten doen, is wat "cloudcode" of serverside-code toevoegen die wordt aangeroepen wanneer elk evenement wordt gestart vanuit onze app.

Stap 7: voeg de cloudcode toe

Ga in GameSparks naar configurator en cloudcode.

We moeten een script toevoegen aan elk evenement dat we zojuist hebben gemaakt.

Voeg in de gebeurtenis LOAD_MESSAGE deze code toe en sla deze op:

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

var cursor = messageData.find();

var allMessages = ;

while(cursor.hasNext()) {

var obj = cursor.next();

delete(obj ["_id"]);

alleBerichten.push(obj);

}

Spark.setScriptData("all_Messages", allMessages); // retourneer alle gegevens

Voeg in de REMOVE_MESSAGES-gebeurtenis deze code toe:

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

messageData.verwijder({});

Voeg ten slotte in het SAVE_MESSAGES-evenement dit toe:

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

var messageLat = Spark.getData(). LAT;

var messageLon = Spark.getData(). LON;

var messageText = Spark.getData(). TEXT;

var currentMessage = {

"messLat": berichtLat,

"messLon": berichtLon,

"messText": berichtText,

};

geoMessageList.insert (huidig bericht);

Stap 8: WE ZIJN KLAAR

WE ZIJN KLAAR!
WE ZIJN KLAAR!

Dit project gebruikt de unieke ID van je apparaat om te authenticeren met de GameSparks-server, zodat je nu terug kunt gaan naar Unity en op afspelen kunt klikken, en je zou in de console "apparaat geverifieerd …" moeten zien.

Ga nu naar bestand, bouw instellingen en klik op bouwen. Als je nog nooit een app voor Android of IOS hebt gemaakt, moet je mogelijk een ontwikkelaccount instellen bij Google of Apple.

Zodra de app op je telefoon staat, moet je er eerst voor zorgen dat ARKit of ARCore een grondvlak detecteert. Klik nu op de log-knop in de linkerbenedenhoek. Loop een paar stappen vooruit en je ziet "berekende uitlijning" in lichtblauw verschijnen. Nu zouden de UI-knoppen moeten verschijnen en als er berichten in uw database worden geladen, worden deze in de wereld geplaatst.

Om ergens een nieuw GPS AR-bericht te taggen, loop je naar de locatie waar je het bericht wilt hebben en klik je op het berichtpictogram rechtsboven in het scherm. Typ het gewenste bericht in en klik op de pin-knop!

Aanbevolen: