Inhaltsverzeichnis:

Platzieren von AR-Objekten an GPS-Koordinaten in Augmented Reality - Gunook
Platzieren von AR-Objekten an GPS-Koordinaten in Augmented Reality - Gunook

Video: Platzieren von AR-Objekten an GPS-Koordinaten in Augmented Reality - Gunook

Video: Platzieren von AR-Objekten an GPS-Koordinaten in Augmented Reality - Gunook
Video: #2 Wie funktioniert Augmented Reality? – Tracking 2024, Juli
Anonim
Platzieren von AR-Objekten an GPS-Koordinaten in Augmented Reality
Platzieren von AR-Objekten an GPS-Koordinaten in Augmented Reality

Dieses anweisbare wird über die Herstellung einer mobilen App zum Platzieren von AR-Objekten an GPS-Koordinaten mit ARkit und ARCore mit Unity3D gehen. Ich werde Sie durch die Einrichtung eines Projekts führen, das ich mit Mapbox erstellt habe, mit dem wir Nachrichten an bestimmten GPS-Standorten markieren und in eine GameSparks-Datenbank schreiben können.

Alle Software und Projekte, die wir hier verwenden, sind kostenlos.

Laden Sie Unity 3D hier herunter, falls Sie es noch nicht haben:

unity3d.com/

Schritt 1: Hürden…

Hürden…
Hürden…

Dies ist also nicht die einfachste App mit den aktuellen Einschränkungen von mobilem GPS und mobilem Kompass.

Um ehrlich zu sein, werden die Objekte in etwa 50% der Fälle dort angezeigt, wo sie sein sollen. Die Ergebnisse sind also nicht so toll, werden aber umso genauer, je näher man den Objekten kommt.

Wie auch immer, ich denke, ein besserer Weg zu GPS-basierter AR wäre zu diesem Zeitpunkt die Verwendung einer Karte wie bei Pokemon Go. Wenn Sie sich einem Objekt nähern, öffnet sich die Kamera und Sie sehen nur dieses Objekt direkt vor Ihnen. In Zukunft würde ich gerne ein vollständiges Tutorial zu einer einfacheren Implementierung wie dieser machen.

Wie auch immer, ich habe Mapbox schon einmal verwendet und weiß, dass sie eine Konvertierungsklasse haben, die Funktionen zum Konvertieren von GPS-Koordinaten in Unity-Weltkoordinaten enthält. Ich dachte, ich könnte einfach ein paar GPS-Koordinaten eingeben und sie würden dort erscheinen, wo ich sie haben wollte. Hat nicht funktioniert.

Die Objekte werden relativ zueinander korrekt angezeigt, aber sie waren nie an der richtigen Stelle. Also habe ich etwas recherchiert und festgestellt, dass meine Unity-Kamera auf den geographischen Norden ausgerichtet werden muss, damit die Objekte an der richtigen Stelle angezeigt werden.

Das Problem ist, dass der Kompass in Ihrem Telefon nie ganz genau ist.

Schritt 2: Dummer Kompass

Blöder Kompass
Blöder Kompass
Blöder Kompass
Blöder Kompass

Das Hauptproblem besteht darin, dass beim Platzieren von Objekten weit von der Kamera entfernt Objekte in der Ferne sehr weit entfernt erscheinen, wenn die Vorstellung Ihres Telefons vom wahren Norden nur ein paar Grad abweicht.

Ich hätte dieses Projekt fast aufgegeben, aber ein Freund erzählte mir von diesem GitHub-Projekt:

github.com/mapbox/mapbox-ar-unity

Dies ist ein Versuch, AR von Mapbox im "Weltmaßstab" zu erstellen, bei dem Objekte an GPS-Koordinaten verankert sind, sodass Augmented Reality-Erlebnisse über große Entfernungen draußen funktionieren können, anstatt nur in einem kleinen Raum in Ihrem Haus.

Ihr Projekt verwendet AR-Positions-Deltas und GPS-Positions-Deltas, um einen Winkel zu berechnen, der der Versatz von der AR-Kamera zum wahren Norden ist. Nehmen Sie also im Grunde eine GPS-Messung vor, wenn der Benutzer die App startet, und lassen Sie sie in einer geraden Linie gehen und eine weitere GPS-Messung durchführen. Mit diesen beiden Punkten können Sie dann feststellen, in welche Richtung die Person ging (vorausgesetzt, ihre Kamera zeigt in die Richtung, in die sie ging). Sie fanden heraus, dass dies genauer war, als den Kompass am Telefon zu verwenden.

Das andere Problem, das sie zu lösen versuchen, ist die Drift mit ARkit. Das Tracking ist in einem kleinen Raum in Ordnung, aber wenn Sie draußen lange Strecken gehen, treiben AR-Objekte weit von ihrem eigentlichen Ziel weg.

Schritt 3: Endlich eine Lösung

Endlich eine Lösung!
Endlich eine Lösung!

Dieses Mapbox-Projekt bot also eine Möglichkeit, eine zuverlässige Ausrichtung relativ zum geografischen Norden zu erhalten, sodass nur noch die Objekte in der Welt platziert werden mussten.

Am Ende habe ich dieses Beispiel ein wenig erweitert, damit ich eine Textnachricht an einem bestimmten GPS-Standort markieren und diese Informationen dann in eine GameSparks-Datenbank schreiben konnte. Das ist, was ich Ihnen zeigen werde, wie man es benutzt.

Das einzige Problem bei diesem Projekt ist, dass Sie eine gute Ausrichtung erhalten müssen, bevor es verwendet werden kann.

Was ich mit Ausrichtung meine, ist, dass, da Mapbox Positionsdeltas verwendet, um den Kurs zu berechnen, Sie beim ersten Öffnen der App sicherstellen müssen, dass eine Grundebene erkannt wird und dann eine Weile in einer geraden Linie gehen müssen, bis eine richtige Ausrichtung berechnet ist.

In diesem Sinne ist UX eine weitere Hürde, aber in den Erweiterungen des Projekts geben sie ein Beispiel für das Platzieren von Würfeln vor dem Benutzer, um sie zu durchlaufen, um eine gute Ausrichtung zu gewährleisten.

Nun, da Sie die Grenzen dieses Projekts kennen, möchte ich Ihnen zeigen, wie Sie es verwenden, damit die Jungs herumspielen können. Letztendlich müssen Sie ein Mapbox-Konto und ein gamesparks-Konto erstellen, die beide kostenlos sind. Ich habe gamesparks nur verwendet, um irgendwo GPS-Koordinaten zu speichern, da Sie während des Tests die App ziemlich oft neu starten und neu aufbauen.

Außerdem sollte dies sowohl mit ARkit als auch mit ARcore funktionieren, aber ich habe im Moment nur ein iPhone, das war alles, was ich testen konnte.

Schritt 4: Lasst uns die App zum Laufen bringen

Lassen Sie uns die App zum Laufen bringen!
Lassen Sie uns die App zum Laufen bringen!

Laden Sie zuerst dieses Projekt von GitHub herunter:

Speichern Sie die Datei auf Ihrem Desktop und öffnen Sie sie in Unity.

Gehen Sie zur Datei, erstellen Sie die Einstellungen und stellen Sie Ihre Plattform entweder auf Android oder IOS um.

Gehen Sie nun zu Mapbox.com und erstellen Sie ein Konto, falls Sie noch kein Konto haben.

Schnappen Sie sich Ihren API-Schlüssel und gehen Sie zurück zu Unity, klicken Sie oben auf die Registerkarte Mapbox und dann auf Konfigurieren. Fügen Sie dort Ihren API-Schlüssel ein.

Erstellen Sie nun ein Konto auf GameSparks.com und klicken Sie auf die Schaltfläche oben rechts, um eine neue App zu erstellen.

Nennen Sie es wie Sie wollen und kopieren Sie Ihren API-Schlüssel und Ihr App-Geheimnis. Gehen Sie zurück zu Unity und suchen Sie oben die Registerkarte GameSparks. Klicken Sie auf Konfigurieren und fügen Sie dort auch Ihre Anmeldeinformationen ein.

Schritt 5: Konfigurieren Sie GameSparks

Konfigurieren Sie GameSparks
Konfigurieren Sie GameSparks

Bevor die App funktioniert, müssen wir unsere Datenbank konfigurieren.

GameSparks verwendet noSQL, daher müssen wir zuerst eine Sammlung erstellen und die Ereignisse hinzufügen, die unsere App zum Lesen, Schreiben und Löschen vom Server verwendet.

Erstellen Sie zuerst eine neue Sammlung auf der GameSparks-Website und nennen Sie sie wie immer Sie möchten.

Jetzt müssen wir 3 Ereignisse erstellen.

Das erste, was die App tun muss, ist das Nachrichtenobjekt in die Datenbank zu schreiben.

Eine Nachricht hat einen Breiten- und Längengrad und dann den Text der Nachricht.

Gehen Sie also zum Konfigurator und fügen Sie ein neues Ereignis hinzu. Machen Sie den Kurzcode "SAVE_GEO_MESSAGE".

Geben Sie den Namen und die Beschreibung ein, was Sie wollen.

Fügen Sie den Funktionscode für 3 Attribute hinzu:

"LAT""LON"

"TEXT"

Setzen Sie jeden Datentyp auf Zeichenfolge und setzen Sie den Standardwert auf 0. Legen Sie den Standardaggregationstyp jedes einzelnen auf "in Skript verwendet" fest.

Schritt 6: Fügen Sie die letzten Ereignisse hinzu…

Fügen Sie die letzten Ereignisse hinzu…
Fügen Sie die letzten Ereignisse hinzu…

Die App muss auch alle Nachrichten aus der Datenbank laden und beim Start der App in Unity einlesen, damit wir AR-Nachrichten platzieren können, die in der Datenbank gespeichert sind.

Erstellen Sie ein weiteres Ereignis und nennen Sie es "LOAD_MESSAGE".

Dieses Ereignis benötigt keine Attribute. Geben Sie wieder alles ein, was Sie für den Namen und die Beschreibung wünschen.

Machen Sie dasselbe für ein anderes Ereignis und nennen Sie es "REMOVE_MESSAGES".

Dies benötigt auch keine Attribute.

Als letztes müssen wir noch etwas "Cloud-Code" oder serverseitigen Code hinzufügen, der aufgerufen wird, wenn jedes Ereignis von unserer App gestartet wird.

Schritt 7: Fügen Sie den Cloud-Code hinzu

Gehen Sie in GameSparks zum Konfigurator und zum Cloud-Code.

Wir müssen jedem Ereignis, das wir gerade erstellt haben, ein Skript hinzufügen.

Fügen Sie im Ereignis LOAD_MESSAGE diesen Code hinzu und speichern Sie ihn:

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); // alle Daten zurückgeben

Fügen Sie im Ereignis REMOVE_MESSAGES diesen Code hinzu:

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

messageData.remove({});

Fügen Sie schließlich im SAVE_MESSAGES-Ereignis Folgendes hinzu:

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": NachrichtLon,

"messText": Nachrichtentext,

};

geoMessageList.insert(currentMessage);

Schritt 8: WIR SIND FERTIG

WIR SIND FERTIG!
WIR SIND FERTIG!

Dieses Projekt verwendet die eindeutige ID Ihres Geräts, um sich beim GameSparks-Server zu authentifizieren, sodass Sie jetzt zu Unity zurückkehren und auf „Spielen“klicken können. In der Konsole sollte „Gerät authentifiziert…“angezeigt werden.

Gehen Sie nun zu Datei, Build-Einstellungen und klicken Sie auf Build. Wenn Sie noch nie eine App für Android oder IOS erstellt haben, müssen Sie möglicherweise ein Entwicklungskonto bei Google oder Apple einrichten.

Sobald sich die App auf Ihrem Telefon befindet, müssen Sie zuerst sicherstellen, dass ARKit oder ARCore eine Massefläche erkennt. Klicken Sie nun auf den Log-Button in der unteren linken Ecke. Gehen Sie ein paar Schritte nach vorne und Sie sehen "berechnete Ausrichtung" in Hellblau. Jetzt sollten die Schaltflächen der Benutzeroberfläche erscheinen und wenn Nachrichten in Ihre Datenbank geladen werden, werden sie in der Welt platziert.

Um eine neue GPS AR-Nachricht zu markieren, gehen Sie zu dem Ort, an dem die Nachricht sein soll, und klicken Sie auf das Nachrichtensymbol oben rechts auf dem Bildschirm. Geben Sie die gewünschte Nachricht ein und klicken Sie auf die Schaltfläche zum Anheften!

Empfohlen: