Sommario:

Posizionamento di oggetti AR alle coordinate GPS in realtà aumentata: 8 passaggi (con immagini)
Posizionamento di oggetti AR alle coordinate GPS in realtà aumentata: 8 passaggi (con immagini)

Video: Posizionamento di oggetti AR alle coordinate GPS in realtà aumentata: 8 passaggi (con immagini)

Video: Posizionamento di oggetti AR alle coordinate GPS in realtà aumentata: 8 passaggi (con immagini)
Video: Realtà Aumentata: come funziona la AR basata sui Marker? 2024, Luglio
Anonim
Posizionamento di oggetti AR alle coordinate GPS in realtà aumentata
Posizionamento di oggetti AR alle coordinate GPS in realtà aumentata

Questa istruzione andrà oltre alla creazione di un'app mobile per posizionare oggetti AR alle coordinate GPS con ARkit e ARCore utilizzando Unity3D. Ti guiderò attraverso l'impostazione di un progetto che ho realizzato utilizzando Mapbox che ci consente di taggare i messaggi in particolari posizioni GPS e scriverli in un database GameSparks.

Tutti i software e i progetti che utilizzeremo qui sono gratuiti.

Scarica Unity 3D qui se non lo possiedi già:

unity3d.com/

Passaggio 1: ostacoli…

ostacoli…
ostacoli…

Quindi questa non è l'app più semplice da realizzare con le attuali limitazioni del GPS mobile e della bussola mobile.

Ad essere onesti, gli oggetti si presentano dove dovrebbero essere circa il 50% delle volte. Quindi i risultati non sono eccezionali, ma diventano più precisi quanto più ci si avvicina agli oggetti.

Ad ogni modo, penso che un modo migliore per l'AR basato su GPS a questo punto sarebbe usare una mappa come fa Pokemon Go e quando ti avvicini a un oggetto la fotocamera si apre e vedi solo quell'oggetto proprio di fronte a te. In futuro mi piacerebbe fare un tutorial completo su un'implementazione più semplice come quella.

Ad ogni modo, ho già usato Mapbox e so che hanno una classe di conversione che ha funzioni per convertire le coordinate GPS in coordinate mondiali Unity. Pensavo di poter semplicemente passare alcune coordinate GPS e sarebbero apparse dove le volevo. Non ha funzionato.

Gli oggetti vengono visualizzati correttamente l'uno rispetto all'altro ma non sono mai stati nel posto giusto. Quindi ho fatto alcune ricerche e ho scoperto che la mia Unity Camera doveva essere allineata con il nord vero affinché gli oggetti si presentassero nel posto giusto.

Il problema è che la bussola del telefono non è mai del tutto precisa.

Passaggio 2: stupida bussola

Bussola stupida
Bussola stupida
Bussola stupida
Bussola stupida

Il problema principale è quando posizioni oggetti lontani dalla fotocamera, se l'idea del tuo telefono del nord geografico è disattivata anche di pochi gradi, gli oggetti in lontananza appariranno molto lontani.

Ho quasi rinunciato a questa impresa, ma un amico mi ha parlato di questo progetto GitHub:

github.com/mapbox/mapbox-ar-unity

Questo è un tentativo di fare AR "su scala mondiale" da Mapbox in cui gli oggetti sono ancorati alle coordinate GPS in modo che le esperienze di Realtà Aumentata possano funzionare all'esterno su lunghe distanze anziché solo all'interno di una piccola stanza della tua casa.

Il loro progetto utilizza i delta della posizione AR e i delta della posizione GPS per calcolare un angolo che è l'offset dalla telecamera AR al nord vero. Quindi fondamentalmente prendi una lettura GPS quando l'utente avvia l'app e falli camminare in linea retta e prendere un'altra lettura GPS. Quindi con questi due punti puoi dire in quale direzione stava camminando quella persona (supponendo che la sua fotocamera sia puntata nella direzione in cui sta camminando). Hanno scoperto che questo era più accurato rispetto all'uso della bussola sul telefono.

L'altro problema che cercano di risolvere è la deriva con ARkit. Il tracciamento è ok all'interno di una piccola stanza, ma quando all'esterno si cammina per lunghe distanze, gli oggetti AR finiscono per andare alla deriva lontano da dove dovrebbero essere.

Passaggio 3: finalmente una soluzione

Finalmente una Soluzione!
Finalmente una Soluzione!

Quindi questo progetto Mapbox ha offerto un modo per ottenere una direzione di orientamento affidabile rispetto al vero nord, quindi tutto ciò che rimaneva era solo posizionare gli oggetti nel mondo.

Ho finito per estendere un po' questo esempio in modo da poter taggare un messaggio di testo in una particolare posizione GPS e quindi scrivere tali informazioni in un database GameSparks. Questo è quello che ti mostrerò come usare.

L'unico problema con questo progetto è che devi ottenere un buon allineamento prima che possa essere utilizzato.

Ciò che intendo per allineamento è che, poiché Mapbox utilizza i delta di posizione per calcolare la direzione, quando apri per la prima volta l'app e devi assicurarti che venga rilevato un piano terra e poi camminare in linea retta per un po' fino a quando non viene calcolato un allineamento corretto.

In questo senso UX è un altro ostacolo, ma nei miglioramenti del progetto danno un esempio di posizionare i cubi davanti all'utente da attraversare per garantire un buon allineamento.

Quindi, ora che conosci i limiti di questo progetto, lascia che ti mostri come usarlo in modo che i ragazzi possano giocare. Alla fine dovrai creare un account mapbox e un account gamesparks, entrambi gratuiti. Ho usato gamesparks solo per poter salvare le coordinate GPS da qualche parte perché durante i test dovrai riavviare e ricostruire l'app abbastanza spesso.

Inoltre, dovrebbe funzionare sia con ARkit che con ARcore, ma al momento ho solo un iPhone, quindi è stato tutto ciò che ho potuto testare.

Passaggio 4: facciamo funzionare l'app

Facciamo funzionare l'app!
Facciamo funzionare l'app!

Per prima cosa scarica questo progetto da GitHub:

Salva il file sul desktop e aprilo in Unity.

Vai su file, crea impostazioni e cambia la tua piattaforma su Android o IOS.

Ora vai su Mapbox.com e crea un account se non ne hai già uno.

Prendi la tua chiave API e torna a Unity, fai clic sulla scheda Mapbox in alto e fai clic su configura. Incolla lì la tua chiave API.

Ora crea un account su GameSparks.com e fai clic sul pulsante in alto a destra per creare una nuova app.

Chiamalo come vuoi e copia la chiave API e il segreto dell'app. Torna a Unity e trova la scheda GameSparks in alto. Fai clic su configura e incolla anche le tue credenziali.

Passaggio 5: configurare GameSparks

Configura GameSparks
Configura GameSparks

Ora, prima che l'app funzioni, dobbiamo configurare il nostro database.

GameSparks utilizza noSQL, quindi dobbiamo prima creare una raccolta e aggiungere gli eventi che la nostra app utilizza per leggere, scrivere ed eliminare dal server.

Per prima cosa crea una nuova raccolta sul sito Web di GameSparks e chiamala come vuoi.

Ora dobbiamo creare 3 eventi.

La prima cosa che l'app deve fare è scrivere l'oggetto messaggio nel database.

Un messaggio ha una latitudine, una longitudine e quindi il testo del messaggio.

Quindi vai al configuratore e aggiungi un nuovo evento. Crea il codice breve "SAVE_GEO_MESSAGE".

Metti quello che vuoi per il nome e la descrizione.

Aggiungi il codice funzione per 3 attributi:

"LAT""LON"

"TESTO"

Imposta ogni tipo di dati su stringa e imposta il valore predefinito su 0. Imposta il tipo di aggregazione predefinito di ciascuno su "utilizzato nello script".

Passaggio 6: aggiungi gli eventi finali…

Aggiungi gli eventi finali…
Aggiungi gli eventi finali…

L'app deve anche caricare tutti i messaggi dal database e leggerli in Unity all'avvio dell'app in modo da poter inserire un messaggio AR che è archiviato nel database.

Crea un altro evento e chiamalo "LOAD_MESSAGE"

Questo evento non necessita di attributi. Ancora una volta metti quello che vuoi per il nome e la descrizione.

Fai la stessa cosa per un altro evento e chiamalo "REMOVE_MESSAGES"

Anche questo non ha bisogno di attributi.

Ora l'ultima cosa che dobbiamo fare è aggiungere del "codice cloud" o codice lato server che viene chiamato quando ogni evento viene avviato dalla nostra app.

Passaggio 7: aggiungi il codice cloud

In GameSparks vai su configuratore e codice cloud.

Dobbiamo aggiungere uno script a ogni evento che abbiamo appena creato.

Nell'evento LOAD_MESSAGE aggiungi questo codice e salvalo:

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

var cursore = messageData.find();

var allMessages = ;

while(cursor.hasNext()) {

var obj = cursore.next();

delete(obj["_id"]);

allMessages.push(obj);

}

Spark.setScriptData("all_Messages", allMessages); // restituisce tutti i dati

Nell'evento REMOVE_MESSAGES aggiungi questo codice:

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

messageData.remove({});

Infine nell'evento SAVE_MESSAGES aggiungi questo:

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

var messageLat = Spark.getData(). LAT;

var messageLon = Spark.getData(). LON;

var messageText = Spark.getData(). TEXT;

var messaggio corrente = {

"messLat": messageLat,

"messLon": messaggioLon,

"messText": messageText,

};

geoMessageList.insert(currentMessage);

Passaggio 8: ABBIAMO FATTO

ABBIAMO CHIUSO!
ABBIAMO CHIUSO!

Questo progetto utilizza l'ID univoco del tuo dispositivo per autenticarsi con il server GameSparks, quindi ora puoi tornare a Unity e fare clic su Riproduci, e dovresti vedere nella console "dispositivo autenticato…"

Ora vai su file, crea impostazioni e fai clic su build. Se non hai mai creato un'app per Android o IOS, potresti dover configurare un account di sviluppo con Google o Apple.

Una volta che l'app è sul telefono, devi prima assicurarti che ARKit o ARCore rilevino un piano di terra. Ora fai clic sul pulsante di registro nell'angolo in basso a sinistra. Cammina in avanti di alcuni passi e vedrai apparire "allineamento calcolato" in azzurro. Ora dovrebbero apparire i pulsanti dell'interfaccia utente e se vengono caricati messaggi nel database verranno inseriti nel mondo.

Per contrassegnare un nuovo messaggio GPS AR da qualche parte, raggiungi la posizione in cui desideri che sia il messaggio e fai clic sull'icona del messaggio in alto a destra dello schermo. Digita il messaggio che desideri e fai clic sul pulsante con la puntina!

Consigliato: