Tabla de contenido:

Colocación de objetos AR en coordenadas GPS en realidad aumentada: 8 pasos (con imágenes)
Colocación de objetos AR en coordenadas GPS en realidad aumentada: 8 pasos (con imágenes)

Video: Colocación de objetos AR en coordenadas GPS en realidad aumentada: 8 pasos (con imágenes)

Video: Colocación de objetos AR en coordenadas GPS en realidad aumentada: 8 pasos (con imágenes)
Video: Crea app de Realidad Aumentada con Vuforia Image Target | Unity Tutorial 2024, Mes de julio
Anonim
Colocación de objetos AR en coordenadas GPS en realidad aumentada
Colocación de objetos AR en coordenadas GPS en realidad aumentada

Este instructivo repasará la creación de una aplicación móvil para colocar objetos AR en coordenadas GPS con ARkit y ARCore usando Unity3D. Lo guiaré a través de la configuración de un proyecto que hice usando Mapbox que nos permite etiquetar mensajes en ubicaciones GPS particulares y escribirlos en una base de datos de GameSparks.

Todo el software y los proyectos que usaremos aquí son gratuitos.

Descarga Unity 3D aquí si aún no lo tienes:

unity3d.com/

Paso 1: Obstáculos …

Obstáculos …
Obstáculos …

Por lo tanto, esta no es la aplicación más fácil de hacer con las limitaciones actuales del GPS móvil y la brújula móvil.

Para ser honesto, los objetos aparecen donde se supone que deben estar, tal vez alrededor del 50% del tiempo. Por lo tanto, los resultados no son excelentes, pero se vuelven más precisos cuanto más te acercas a los objetos.

De cualquier manera, creo que una mejor manera de AR basada en GPS en este punto sería usar un mapa como lo hace pokemon go y cuando te acercas a un objeto, la cámara se abre y solo ves ese objeto justo frente a ti. En el futuro, me gustaría hacer un tutorial completo sobre una implementación más simple como esa.

De cualquier manera, he usado Mapbox antes y sé que tienen una clase de conversión que tiene funciones para convertir coordenadas GPS a coordenadas mundiales de Unity. Pensé que podría pasar algunas coordenadas GPS y aparecerían donde las quería. No funcionó.

Los objetos se muestran correctamente entre sí, pero nunca estuvieron en el lugar correcto. Así que investigué un poco y descubrí que mi cámara Unity necesitaba estar alineada con el norte verdadero para que los objetos aparecieran en el lugar correcto.

El problema es que la brújula de su teléfono nunca es totalmente precisa.

Paso 2: Brújula estúpida

Brújula estúpida
Brújula estúpida
Brújula estúpida
Brújula estúpida

El principal problema es cuando colocas objetos lejos de la cámara, si la idea del norte verdadero de tu teléfono está desviada incluso unos pocos grados, los objetos en la distancia aparecerán muy lejos.

Casi me rindo en esta empresa, pero un amigo me contó sobre este proyecto de GitHub:

github.com/mapbox/mapbox-ar-unity

Este es un intento de hacer AR "a escala mundial" desde Mapbox donde los objetos están anclados a las coordenadas GPS para que las experiencias de realidad aumentada puedan funcionar afuera a largas distancias en lugar de solo dentro de una pequeña habitación en su casa.

Su proyecto utiliza deltas de posición AR y deltas de posición GPS para calcular un ángulo que es el desplazamiento de la cámara AR al norte verdadero. Básicamente, tome una lectura de GPS cuando el usuario inicie la aplicación y pídales que caminen en línea recta y tomen otra lectura de GPS. Luego, con estos dos puntos, puede saber en qué dirección caminaba esa persona (asumiendo que su cámara apunta en la dirección en la que camina). Descubrieron que esto era más preciso que usar la brújula en el teléfono.

El otro problema que intentan resolver es la deriva con ARkit. El seguimiento está bien dentro de una habitación pequeña, pero cuando el exterior camina largas distancias, los objetos AR terminan alejándose de donde se supone que deben estar.

Paso 3: ¡Finalmente una solución

¡Finalmente una solución!
¡Finalmente una solución!

Así que este proyecto de Mapbox ofreció una forma de obtener una dirección de orientación confiable en relación con el norte verdadero, por lo que todo lo que quedaba era colocar los objetos en el mundo.

Terminé extendiendo un poco este ejemplo para poder etiquetar un mensaje de texto en una ubicación GPS en particular y luego escribir esa información en una base de datos de GameSparks. Eso es lo que les voy a mostrar cómo usar.

El único problema con este proyecto es que debe obtener una buena alineación antes de poder usarlo.

Lo que quiero decir con alineación es que, dado que Mapbox usa deltas de posición para calcular el rumbo, cuando abre la aplicación por primera vez y debe asegurarse de que se detecte un plano de tierra y luego caminar en línea recta durante un tiempo hasta que se calcule una alineación adecuada.

En este sentido, la UX es otro obstáculo pero en las mejoras del proyecto dan un ejemplo de colocar cubos frente al usuario para caminar a través de ellos para asegurar una buena alineación.

Entonces, ahora que conoces las limitaciones de este proyecto, déjame mostrarte cómo usarlo para que los chicos puedan jugar. En última instancia, deberá crear una cuenta de mapbox y una cuenta de parques de juegos, las cuales son gratuitas. Usé parques de juegos solo para poder guardar las coordenadas GPS en algún lugar porque durante las pruebas, reiniciará y reconstruirá la aplicación con bastante frecuencia.

Además, esto debería funcionar tanto con ARkit como con ARcore, pero solo tengo un iPhone en este momento, así que eso fue todo lo que pude probar.

Paso 4: ¡Hagamos que la aplicación funcione

¡Hagamos que la aplicación funcione!
¡Hagamos que la aplicación funcione!

Lo primero es descargar este proyecto de GitHub:

Guarde el archivo en su escritorio y ábralo en Unity.

Vaya a archivo, compile la configuración y cambie su plataforma a Android o IOS.

Ahora vaya a Mapbox.com y cree una cuenta si aún no tiene una.

Toma tu clave de API y vuelve a Unity, haz clic en la pestaña Mapbox en la parte superior y haz clic en configurar. Pegue su clave API allí.

Ahora cree una cuenta en GameSparks.com y haga clic en el botón en la parte superior derecha para crear una nueva aplicación.

Llámelo como quiera y copie su clave API y el secreto de la aplicación. Regrese a Unity y busque la pestaña GameSparks en la parte superior. Haga clic en configurar y pegue sus credenciales allí también.

Paso 5: Configura GameSparks

Configure GameSparks
Configure GameSparks

Ahora, antes de que la aplicación funcione, debemos configurar nuestra base de datos.

GameSparks usa noSQL, por lo que primero debemos crear una colección y agregar los eventos que nuestra aplicación usa para leer, escribir y eliminar del servidor.

Primero crea una nueva colección en el sitio web de GameSparks y llámala como quieras.

Ahora necesitamos crear 3 eventos.

Lo primero que debe hacer la aplicación es escribir un objeto de mensaje en la base de datos.

Un mensaje tiene latitud, longitud y luego el texto del mensaje.

Así que vaya al configurador y agregue un nuevo evento. Crea el código corto "SAVE_GEO_MESSAGE".

Pon lo que quieras para el nombre y la descripción.

Agregue el código corto para 3 atributos:

"LAT" "LON"

"TEXTO"

Establezca cada tipo de datos en cadena y establezca el valor predeterminado en 0. Establezca el tipo de agregación predeterminado de cada uno en "utilizado en secuencia de comandos".

Paso 6: agregue los eventos finales …

Agregar los eventos finales …
Agregar los eventos finales …

La aplicación también necesita cargar todos los mensajes de la base de datos y leerlos en Unity cuando se inicia la aplicación para que podamos colocar un mensaje AR que se almacena en la base de datos.

Crea otro evento y llámalo "LOAD_MESSAGE"

Este evento no necesita ningún atributo. De nuevo, ponga lo que quiera para el nombre y la descripción.

Haz lo mismo para otro evento y llámalo "REMOVE_MESSAGES"

Esto incluso tampoco necesita ningún atributo.

Ahora, lo último que tenemos que hacer es agregar algún "código en la nube" o código del lado del servidor que se llama cuando se inicia cada evento desde nuestra aplicación.

Paso 7: agregue el código de la nube

En GameSparks, vaya al configurador y al código de la nube.

Necesitamos agregar un script a cada evento que acabamos de hacer.

En el evento LOAD_MESSAGE agregue este código y guárdelo:

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

var cursor = messageData.find ();

var allMessages = ;

while (cursor.hasNext ()) {

var obj = cursor.next ();

eliminar (obj ["_id"]);

allMessages.push (obj);

}

Spark.setScriptData ("all_Messages", allMessages); // devuelve todos los datos

En el evento REMOVE_MESSAGES agregue este código:

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

messageData.remove ({});

Finalmente en el evento SAVE_MESSAGES agregue esto:

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

};

geoMessageList.insert (currentMessage);

Paso 8: ¡TERMINAMOS

¡HEMOS TERMINADO!
¡HEMOS TERMINADO!

Este proyecto utiliza la identificación única de su dispositivo para autenticarse con el servidor de GameSparks, por lo que ahora puede volver a Unity y hacer clic en reproducir, y debería ver en la consola "dispositivo autenticado …"

Ahora vaya a archivo, configuración de compilación y haga clic en compilar. Si nunca ha creado una aplicación para Android o IOS, es posible que deba configurar una cuenta de desarrollo con Google o Apple.

Una vez que la aplicación esté en su teléfono, primero debe asegurarse de que ARKit o ARCore detecten un plano de tierra. Ahora haga clic en el botón de registro en la esquina inferior izquierda. Camine unos pasos hacia adelante y verá que la "alineación calculada" aparece en azul claro. Ahora deberían aparecer los botones de la interfaz de usuario y, si se cargan mensajes en su base de datos, se colocarán en el mundo.

Para etiquetar un nuevo mensaje GPS AR en algún lugar, camine hasta la ubicación donde desea que esté el mensaje y haga clic en el icono de mensaje en la parte superior derecha de la pantalla. Escriba el mensaje que desee y haga clic en el botón de alfiler.

Recomendado: