Elija su idioma

Elija su idioma

El sitio web se ha traducido al Español con la ayuda de humanos e IA

Desestimar

Una mirada técnica al mapeado de mundos virtuales para espacios reales

8 mins de lectura
Profile picture for user Rene Bokhorst

Escrito por
Rene Bokhorst
Technical Director

A Technical Look into Mapping Virtual Worlds for Real Spaces

En febrero de 2017, junto con World Wildlife Fund, ArtScience Museum y Google Zoo, MediaMonks lanzó una experiencia de realidad mixta a gran escala "Into The Wild."

Todo respaldado por el esfuerzo de ayudar a la gente en Singapur a experimentar los efectos devastadores de la deforestación y aprender más sobre algunas de las especies más amenazadas del mundo y sus hábitats.

El primer smartphone del mundo con Tango, el Lenovo Phab 2 Pro, guiaba a los visitantes a través de aventuras digitales personalizadas, que comenzaban con realidad aumentada (RA) en la planta baja del espacio de exposición, antes de pasar a la realidad virtual (RV) completa.

El final de la experiencia vuelve a la RA, donde los usuarios suben a la cuarta planta para vivir una experiencia que incluye plantar un árbol virtual.

La transformación de más de 1.000 metros cuadrados del Museo ArtScience de Singapur en una selva tropical virtual interactiva la convierte en la mayor experiencia de realidad aumentada del mundo y en la segunda experiencia de realidad aumentada en un museo desarrollada con Google Tango.

Y no fue fácil. Desde el punto de vista técnico, nos enfrentamos al enorme reto de mapear de forma precisa y fluida una selva tropical virtual en un espacio museístico físico y dinámico, asegurándonos de que las paredes se alineaban con los árboles, los pasillos con los caminos de la selva y de que nos adaptábamos a las exposiciones y los montajes existentes en el museo.

Con esto, podemos completar la alineación. Y como Tango reporta las coordenadas del dispositivo de vuelta en coordenadas ecef, podemos calcular fácilmente las coordenadas unity correspondientes. Efectivamente actualizamos la cámara Unity con cada actualización Tango que recibimos usando esta transformación.

Además, por cada árbol virtual plantado, se plantó un árbol real en Rimbang Baling, una de las últimas selvas vírgenes de Sumatra, donde vive el tigre de Sumatra, especie en peligro de extinción. en el primer mes del proyecto se comprometieron 5.000 árboles nuevos.

Espero que al compartir esto podamos inspirar la imaginación de los desarrolladores actuales y futuros para crear experiencias de realidad aumentada y realidad virtual aún más emocionantes que se asemejen al mundo real. ¡Adelante y a la conquista!

Este artículo apareció originalmente en TechWorld el 18 de julio de 2017.

¿Cómo lo hemos conseguido?

Para empezar, si se aumenta el mundo real con objetos virtuales, es importante que el dispositivo que reproduce la vista (como un smartphone, un monitor, una CAVE o un dispositivo montado en la cabeza) sepa exactamente dónde se encuentra en el mundo real.

Para ello, un dispositivo necesita conocer su posición y orientación en un espacio tridimensional.

En el caso de Tango, donde el aumento se realiza a través de una cámara, la posición y la orientación del dispositivo de representación deben estar en coordenadas del mundo real. Sólo si la posición y la orientación de un dispositivo Tango se comunican con precisión, y con la suficiente rapidez, es posible una realidad aumentada adecuada.

El hecho de que Google Tango haga esto por ti es muy interesante, ya que permite a los desarrolladores aumentar las ubicaciones del mundo real dentro de su propio mundo virtual, lo cual es diferente de la RA tipo Snapchat que, por ejemplo, aumenta las orejas de conejo en tu cabeza.

Con los aumentos vinculados al mundo real, se pueden crear experiencias de realidad aumentada compartidas que giren en torno a lugares emblemáticos.

En este caso, nos permitió transformar el Museo ArtScience en una exuberante selva tropical virtual y, desde la perspectiva del usuario, explorar la selva resulta tan natural como explorar el propio museo, porque cada pasillo u obstáculo del mundo virtual coincide con un pasillo u obstáculo del mundo real.

Into The Wild 1

En la naturaleza

Into The Wild 2

En la naturaleza

Into The Wild 3

En la naturaleza

Into The Wild 4

En la naturaleza

Into The Wild 5

En la naturaleza

Into The Wild 6

En la naturaleza

Coordenadas de Google Tango

Utilizamos Unity3D para crear nuestro mundo virtual. Para empezar, aseguramos a nuestros desarrolladores de Unity que no tendrían que preocuparse por la alineación y que eran libres de diseñar el mundo virtual utilizando cualquier posición u orientación que quisieran, siempre que fuera fiel a la escala.

Los desarrolladores familiarizados con los Sistemas de Información Geográfica (SIG) saben que existen muchos sistemas de coordenadas llamados "datums". Históricamente, muchos institutos desarrollaban los suyos propios, pero desde la introducción del GPS, EE.UU. desarrolló el WGS84, que es el más utilizado en los dispositivos comerciales.

Lo bueno de este sistema de coordenadas es que es cartesiano, calcula en metros y utiliza el centro de la Tierra como punto de origen. Esto es importante porque, en un entorno correctamente cartografiado, Google Tango puede indicarle su posición y orientación exactas en el globo terráqueo y se las da en WGS84.

Google Tango llama a estas coordenadas ecef coordenadas, por lo tanto, lo llamaremos ecef también.

Determinar el enfoque correcto

El siguiente paso es asegurarse de que nuestro mundo Unity se superpone con el mundo real para que podamos lograr la realidad aumentada. Dos enfoques para resolver esto vienen a la mente.

  1. Transformar (mover+rotar) el mundo Unity para que se sitúe encima de las coordenadas ecef del museo.
  2. Transformar (mover+rotar) las coordenadas ecef del dispositivo Tango en coordenadas del mundo Unity.

Los enfoques son 80 por ciento iguales, ya que en ambos casos hay que calcular la transformación de virtual (Unity) a real (ecef). La diferencia, sin embargo, radica en si se transporta el mundo virtual al real (enfoque uno), o si se transporta la cámara real al mundo virtual (enfoque dos).

Para determinar qué enfoque es mejor, tuvimos que ver cómo se ven estas coordenadas en un caso de uso real. He aquí algunos ejemplos del aspecto de las coordenadas de Unity:

Objeto A: [10.000, 63.250, -11.990]

Objeto B: [-92.231, 33.253, -62.123]

Por el contrario, a continuación se muestran dos ejemplos del aspecto de las coordenadas ecef:

Hilversum MediaMonks HQ 2ª planta cerca del ascensor: [3899095,5399920414; 353426,87901774078; 5018270.6428830456]

ArtScienceMuseum de Singapur frente al cajero: [-1527424,0031555446; 6190898,8392925877; 142221,77658961274]

Obviamente, las coordenadas ecef son números bastante grandes. De hecho, está claro que los puntos flotantes de precisión única (o floats) van a tener muchos problemas con ellos.

Sin entrar demasiado en detalles sobre los flotantes, es importante tener en cuenta que realizar aritmética con números alrededor de 10-6 con números alrededor de 106 significa que se pierde significativamente precisión.

Además, no hay forma de evitar el hecho de que gran parte de la programación 3D se realiza alrededor de 10-3 a 103 (piensa en matrices de transformación, modelo, vista o proyección).

Para entenderlo mejor, te recomiendo que veas este vídeo, que lo demuestra a la perfección. Muestra un avión de combate despegando desde alrededor del origen [0; 0; 0] con una cámara siguiéndolo y, a medida que su propia posición se hace más y más grande (así como la posición de la cámara), los cálculos en coma flotante se vuelven cada vez menos precisos.

¿Imagina entonces cuál sería el error si las coordenadas de tu cámara fueran como las coordenadas ecef mostradas arriba? Estarías combinando valores de rotación de escala fina con valores de posición muy grandes. El error en el resultado sería enorme.

AR isn't quite as fun if the augmentation isn't done accurately.

La RA no es tan divertida si el aumento no se hace con precisión.

Añada a esto el hecho de que Unity está codificado para trabajar con flotantes (en lugar de puntos flotantes de doble precisión, o dobles), y el hecho es que no podemos permitirnos grandes errores en AR. Por lo tanto, está claro que el enfoque uno es inviable. Esto se debe a que la cámara tiene que permanecer relativamente cerca del origen para evitar errores de precisión.

Por lo tanto, procedemos con el enfoque dos que es transformar las coordenadas del dispositivo ecef Tango en coordenadas mundiales de Unity.

Encontrar la Transformación

Las transformaciones entre sistemas de coordenadas en gráficos 3D usualmente implican encontrar valores de traslación (posicional), orientación y escalado.

Cada uno de estos tres conceptos actúan en el espacio 3D, por lo que deben describir su posicionamiento, rotación y escalado para cada uno de los tres ejes (x, y y z). Esto nos da nueve valores que encontrar.

Las nueve incógnitas son una pista de cuántas ecuaciones se necesitan para encontrar estas nueve incógnitas. Esto es importante a la hora de determinar cuántas coordenadas del mundo real son necesarias para anclar nuestro mundo virtual.

Nuestra idea inicial era crear una transformación que se ocupara de los tres conceptos (traslación, rotación y escala). Sin embargo, debido a las dificultades y al hecho de que podíamos diseñar nuestro mundo virtual a escala real, decidimos no tener en cuenta la escala y centrarnos sólo en la traslación y la rotación.

De este modo, sólo tenemos que hallar seis incógnitas.

Calcular la matriz de transformación

Llegados a este punto, sólo nos queda encontrar una matriz de transformación que sólo tenga en cuenta la ubicación y la rotación. Por suerte, este problema ya ha sido resuelto millones de veces por estudiantes de Informática.

Si simplemente buscas en Google, encontrarás innumerables ejemplos de cómo transportar un cuerpo rígido de un sistema de coordenadas a otro. Este es un ejemplo que te llevará al 90% del camino.

Encontrar una matriz de transformación gira en torno a la minimización del error de suma de cuadrados entre dos conjuntos de puntos de datos. El siguiente método está adaptado a este problema, ya que trata la rotación y la traslación por separado.

Conceptualmente, lo enfocamos eligiendo un punto en el mundo real, y decimos que ese punto corresponde a otro punto en el mundo virtual.

Básicamente, los mundos están anclados entre sí en ese punto. Sin embargo, como puedes imaginar, elegir un único punto como ancla permite que los mundos pivoten alrededor del ancla, en cuyo caso estarán desalineados la mayor parte del tiempo.

Por tanto, para colocar perfectamente el mundo virtual sobre el real, se necesitan al menos varios anclajes. Dependiendo del número de incógnitas que intentes hallar, necesitarás una cantidad igual o mayor de ecuaciones.

Las ecuaciones pueden derivarse de pares conocidos (en este caso, las coordenadas ecef y Unity). En este caso, un total de 3 pares (o anclas) es suficiente para permitirnos encontrar una matriz de transformación 3D completa.

La idea es que elijas N cantidad de puntos (al menos tres) en el mundo real, y encuentres sus coordenadas ecef. A continuación, vas al mundo virtual y colocas un punto en sus correspondientes ubicaciones virtuales (así que N en total). Para el proyecto del museo, utilizamos 10 puntos de referencia fáciles de encontrar en la base de cada pilar del interior del museo.

Into The Wild Coordinates 2

Arriba, dos coordenadas ecef que medimos en el mundo real y abajo, sus equivalentes en el mundo virtual.

Para ello, utilizamos una biblioteca de terceros llamada Math.Net que nos permite hacer álgebra lineal con dobles. Sólo tienes que ejecutar este código una vez al inicio del programa.

El resultado es que ahora tenemos 10 coordenadas ecef y 10 coordenadas del espacio Unity con forma de círculo, dando lugar a 10 pares de coordenadas. El siguiente paso es aplicar los pasos discutidos en este artículo y encontrar una matriz de transformación que nos permita transformar un punto del espacio ecef al espacio Unity.

Nos encontramos con algunos problemas al implementar esto. Por ejemplo, Unity es un sistema de coordenadas zurdo, mientras que ecef es diestro. Y el artículo al que nos referimos anteriormente también utiliza la fila mayor ordenación, mientras que la biblioteca utiliza la columna mayor ordenación.

Esto hace que el llenado, la transposición y el orden de multiplicación de las matrices sean diferentes. Finalmente superamos todos estos problemas a través de un razonamiento cuidadoso, y no tratando de dar demasiados pasos al mismo tiempo.

Aplicar la transformación

Siguiendo el paso anterior, tenemos una matriz de transformación que podríamos llamar ecefTunity, (o unityTecef dependiendo de cómo hayas calculado la matriz). Así, la transformación de un punto en el espacio ecef al espacio de la unidad se convierte en tan trivial como:

Into The Wild Coordinates 3

Related
Pensamiento

Acelera nuestro corazón digital

Reciba nuestro boletín con inspiración sobre las últimas tendencias, proyectos y mucho más.

Gracias por inscribirte

Continue exploring

Media.Monks necesita la información de contacto que usted nos facilita para ponerse en contacto con usted en relación con nuestros productos y servicios. Puede darse de baja de estas comunicaciones en cualquier momento. Para obtener información sobre cómo darse de baja, así como nuestras prácticas de privacidad y el compromiso de proteger su privacidad, por favor revise nuestra Política de Privacidad.

Elija su idioma

Elija su idioma

El sitio web se ha traducido al Español con la ayuda de humanos e IA

Desestimar