Marcadores espaciales
Problemas que hay que resolver
Error de escala
Mientras que el enfoque tradicional de anclaje espacial para alinear los hologramas con las características del mundo real funciona muy bien a pequeña escala, tiene problemas cuando la escala crece hasta abarcar más de un metro o así.
El error de escala en el espacio de seguimiento de la cabeza significa que incluso si un anclaje espacial mantiene un extremo de un objeto virtual, con un tamaño de solo unos metros de longitud y perfectamente alineado con una característica del mundo real, es probable que el otro extremo esté mal alineado con una característica del mundo real correspondiente. Esta desalineación se debe a que la distancia recorrida a través del espacio rastreado por la cabeza tiende a diferir de la distancia recorrida a través del espacio físico con un límite de error de +-10 %. El error real suele ser menor (depende de muchas características del entorno y de los dispositivos), pero generalmente será significativo y crecerá sin límites a medida que crezca la escala del proyecto.
Dicho de otro modo, si un usuario que lleva un dispositivo HoloLens camina 10 metros en el mundo real, la distancia recorrida en el espacio virtual, según informa el rastreador de cabeza, será de entre 9 y 11 metros. Si el usuario anda 50 metros, el error aumenta a +-5 metros. Cuanto más lejos camine el usuario, mayor será el error.
Así, un haz de 10 metros (en el espacio de modelado) con un punto final perfectamente alineado con el extremo cero de una cinta métrica en el espacio real tendrá el otro extremo registrado en la cinta métrica en algún lugar entre 9 y 11 metros.
Por las mismas razones, varios objetos, cada uno de ellos bloqueado mediante anclajes espaciales, estarán a diferentes distancias en el espacio virtual que en el espacio real.
El sistema de coordenadas arbitrario
Hay otra preocupación. El sistema de coordenadas de Unity en HoloLens es indeterminado. Se basa únicamente en la posición de la cabeza al principio de la aplicación.
Esta arbitrariedad no es un problema para muchas tareas. Si el objetivo es lanzar un rayo en el mapa espacial de la sala y colocar un holograma en la posición de impacto, los valores numéricos de la posición de impacto son irrelevantes.
Del mismo modo, cuando aparecen elementos de experiencia de usuario alrededor del usuario, las coordenadas absolutas para colocar uno de estos elementos no importan, solo las coordenadas relativas al usuario.
Sin embargo, los escenarios más complejos pueden complicarse por el imprevisible sistema de coordenadas. La carga de una gran colección de objetos, por ejemplo el escritorio de un usuario o una sala entera de la oficina, en el espacio virtual con una relación fija con el espacio físico, requiere alguna transformación de compensación para alinear los objetos del espacio de modelado con el marco de coordenadas basado en la cabeza.
Esa compensación se hace a menudo asociando todos los objetos a una única transformación de Unity, y ajustando esa única transformación para posicionar y orientar los objetos virtuales en alineación con el mundo real.
De forma equivalente, se puede utilizar una única transformación en la jerarquía de la cámara para volver a alinear la cámara de forma que cuando el usuario esté viendo un punto de referencia del mundo real, aparezca un objeto virtual con las coordenadas de modelado deseadas superpuesto a esa característica.
La solución
La característica de marcado espacial soluciona ambos problemas a la vez. Para ello, aprovecha tanto la naturaleza del bloqueo en el mundo del espacio global de World Locking Tools como la arbitrariedad de dicho espacio.
Alineación del espacio de Unity con el mundo real
El núcleo de World Locking Tools proporciona un sistema de coordenadas de bloqueo en el mundo estable. Un objeto virtual colocado en el espacio bloqueado en el mundo registrado con una característica del mundo real permanecerá registrado con esa característica del mundo real a lo largo del tiempo.
Pero hay un número infinito de espacios que satisfacen ese objetivo. De hecho, dado un espacio bloqueado en el mundo, transformarlo mediante cualquier posición y rotación arbitrarias produce otro espacio bloqueado en el mundo igualmente válido.
La característica de marcador espacial aplica otra restricción que elimina la naturaleza indeterminada de la transformación de bloqueo en el mundo.
Esa restricción es que cuando se está "cerca" de un marcador espacial, la posición de este en el espacio bloqueado en el mundo será la misma que la posición del marcador espacial en el espacio de modelado.
Considere la posibilidad de usar un cubo en una escena de Unity modelada con las coordenadas globales de (0, 0, 1). Cuando la escena se carga en HoloLens, el cubo aparecerá 1 metro delante de la posición inicial de la cabeza. Dependiendo de la posición inicial de la cabeza, podría estar en cualquier lugar de la habitación física.
El marcador espacial permite bloquear ese cubo a un elemento del mundo real en la habitación, por ejemplo, la esquina de un escritorio específico. A diferencia de bloquear el cubo con un ancla espacial, el marcador espacial mueve la totalidad del espacio de Unity de manera que el cubo quede alineado con la esquina del escritorio. Por ejemplo, otros elementos de escritorio modelados con respecto al cubo en Unity se dispersarán correctamente en el escritorio real.
Solución del error de escala
Si bien un solo marcador espacial elimina la indeterminación de la relación entre la coordenada virtual y el mundo real, no aborda el error de escala.
Es decir, aunque haya movido el origen a una posición y orientación alineadas con el mundo físico, caminar 10 metros en el mundo real puede que solo mueva al usuario 9 metros en el espacio virtual.
Para ello, varios marcadores espaciales proporcionan la solución completa. Cuando el usuario se encuentre cerca de un marcador espacial concreto, el mundo se alineará según este. Los otros marcadores espaciales estarán desalineados, pero al estar más alejados, eso suele ser aceptable, y a menudo imperceptible.
A medida que el usuario se mueve entre los marcadores espaciales, una interpolación suave minimiza el error de escala en cualquier punto dado del espacio. Con una densidad adecuada de marcadores espaciales como puntos de referencia, la desalineación entre el mundo real y las características virtuales se reduce al orden del error del rastreador de cabeza.
Aunque la densidad necesaria de marcadores espaciales depende tanto de la calidad de seguimiento que admita el entorno como de los requisitos de precisión de la aplicación, algunas cifras pueden ayudar a establecer las expectativas. En un entorno de oficina, con una iluminación adecuada y elementos visibles para el seguimiento, una separación de 10 metros entre los marcadores espaciales reduce el error de una acumulación de 10-20 cm a lo largo de 10 metros, hasta errores milimétricos (error máximo l.t. 0,5 cm, error de 0,0 cm en los extremos).
Persistencia
La característica de marcador espacial funciona conjuntamente con el resto de la persistencia de World Locking Tools. Existen tanto llamadas manuales para invocar el guardado y la carga desde el script, como marcas para el guardado y la carga automáticos por sesión.
Cuando está habilitada, la característica de guardado automático y carga automática del administrador de World Locking Tools permitirá restaurar la alineación espacial completa del mundo virtual con el mundo real en las sesiones posteriores.
En la práctica, la persistencia significa que se puede utilizar una sola sesión o un pequeño número de sesiones preliminares para establecer una exploración adecuada del entorno físico, y la alineación de ese entorno físico con el espacio de coordenadas de modelado de Unity. Las sesiones posteriores cargarán el entorno virtual correctamente alineado con el mundo real sin necesidad de que el usuario realice ninguna otra acción.
Interpolación y extrapolación
La interpolación y la extrapolación son técnicas para calcular valores de datos en los que no se ha realizado ninguna medición directa. Los marcadores espaciales, como se ha comentado hasta ahora, son ubicaciones donde se han realizado medidas. Las coordenadas virtuales son las coordenadas deseadas y las coordenadas físicas son coordenadas medidas en las que queremos que aparezcan esas coordenadas virtuales.
El sistema realiza la interpolación, pero no la extrapolación, como se describe a continuación. En general, la interpolación es más segura y estable que la extrapolación. La interpolación lineal por fragmentos proporcionada satisfará las necesidades de la mayoría de las aplicaciones. La extrapolación es menos segura, y su aplicación ideal suele requerir conocimientos a nivel de aplicación. Por lo tanto, se deja que la aplicación controle la extrapolación como se describe a continuación.
Sin que la aplicación agregue marcadores de extrapolación, fuera de los límites de los marcadores, el espacio se marca exclusivamente por el valor en el límite más cercano. Si solo hay dos marcadores, A y B, a medida que el usuario se desplaza de A a B el marcado se mezcla entre la alineación especificada por A y la especificada por B (interpolación). Pero cuando el usuario pasa B, entonces el marcado se bloquea exactamente a lo especificado por B (extensión constante).
Interpolación
En la región 2D entre los marcadores, la localización espacial se interpola linealmente. Si los marcadores espaciales se colocan con precisión y el error de seguimiento se distribuye uniformemente en la región, la corrección aplicada entre los marcadores espaciales será exactamente correcta.
Aquí se debe hacer hincapié en que la suposición de la distribución igual de errores no es correcta. Sin embargo, como aproximación, el modelo lineal proporciona excelentes resultados de corrección.
Extrapolación
El sistema no proporciona ningún servicio de extrapolación integrado, y se emplea la extensión de valores constantes fuera de la forma convexa de los marcadores espaciales. Esta aproximación equivale a suponer, incorrectamente por supuesto, que no hay error de escala fuera del espacio proporcionado por la aplicación.
Sin embargo, si la aplicación tiene conocimiento de la distribución de errores, o está satisfecha con una estimación, puede crear cualquier extrapolación deseada agregando más marcadores espaciales en la periferia.
Ejemplo de extrapolación
Considere una escena con cuatro marcadores espaciales, colocados en un cuadrado con bordes de 4 metros de longitud.
Ahora, digamos que el espacio real por el que se moverá el usuario es de 12 x 12 metros, con los marcadores físicos correspondientes a los cuatro marcadores espaciales que rodean el centro del espacio.
Si la aplicación está satisfecha con una aproximación de error constante, entonces tiene toda la información que necesita para agregar cuatro o más marcadores espaciales para proporcionar cobertura en todo el espacio de 12 x 12 m.
Etiquetaremos los marcadores en las esquinas del cuadrado de 4 x 4 por sus direcciones cardinales: NE, NW (NO), SW (SO) y SE. También etiquetaremos las posiciones virtuales en cada punto virtualNE, etc., y las posiciones físicas en cada punto physicalNE, etc.
Una estrategia sería agregar puntos cardinales externos que crean un cuadrado de 12 x 12 metros alrededor del cuadrado interno, mediante la adición de cuatro puntos cardinales más, outerNE, outerNW, outerSW y outerSE. Las posiciones virtuales y físicas de cada uno de ellos son fáciles de calcular. Tomando outerNE, por ejemplo:
virtualOuterNE = virtualNE + (virtualNE - virtualSW);
physicalOuterNE = physicalNE + (physicalNE - virtualSW);
La creación de un espacio de extrapolación de 20 x 20 metros solo cambia la escala de la diferencia aplicada:
scale = (outerSize - innerSize) / innerSize / 2;
virtualOuterNE = virtualNE + (virtualNE - virtualSW) * scale;
physicalOuterNE = physicalNE + (physicalNE - virtualSW) * scale;
Con un punto outerSize de 20 m y un punto innerSize de 4 m, la escala sería 2.
Una estrategia alternativa podría ser agregar ocho puntos más además de las esquinas, como se muestra a continuación. El cálculo de las nuevas ubicaciones de los marcadores a partir de las existentes es exactamente igual que antes. Hay que tener en cuenta que, si bien es cierto que agregar más marcadores suele mejorar la estabilidad, no necesariamente mejora la precisión.
Alineación de un subconjunto de la escena
Lo discutido hasta ahora se refiere al elemento AlignmentManager global, propiedad de la clase WorldLockingManager.GetInstance() y administrado por ella. Como se ha descrito anteriormente, se marca todo el espacio de coordenadas global de Unity con las características físicas en puntos de referencia estratégicos.
Sin embargo, hay ocasiones en las que se aplica el mismo concepto a un subconjunto de la escena.
Por ejemplo, considere un escenario en el que se van a cargar anotaciones para dos automóviles. La ubicación exacta de los dos automóviles físicos no se puede conocer con antelación, ya que puede variar según el diseño de los distintos concesionarios. Sin embargo, una vez implementado uno de los vehículos físicos, se conocen las posiciones de todos los componentes en relación con esa posición de implementación.
En este escenario, se pueden usar marcadores espaciales para marcar el chasis virtual y las anotaciones de cada uno de los vehículos de manera independiente. Toda la representación virtual de cada uno de los vehículos se puede configurar en Unity y, luego, asignarse al vehículo físico en tiempo de ejecución. Esta alineación puede ser manual mediante la experiencia de usuario de MRTK o automatizada mediante códigos QR o cualquier otra estrategia. Con independencia de cómo se determinen los datos de la correspondencia entre los puntos de referencia físicos y virtuales, una vez que se introducen en WLT mediante la API Space Pins, WLT mantendrá los objetos virtuales y físicos alineados de forma perceptualmente optimizada.
En el caso de alinear el espacio de coordenadas global, la alineación se produce manipulando el nodo de ajuste (generalmente el elemento principal de la cámara). Ese nodo debe considerarse reservado para el uso de WLT. Cualquier otra manipulación de esa transformación dará lugar a un comportamiento indefinido.
Del mismo modo, al alinear un subárbol, la alineación necesita poseer una transformación, en la (sub)raíz del subárbol que se va alinear. Cualquier manipulación externa con esa transformación dará lugar a un comportamiento indefinido.
Antes de marcar los espacios independientes, se arrastrarán a medida que se marca el espacio global. Sin embargo, una vez marcado un espacio independiente, se considera marcado con el mundo físico, por lo que las modificaciones posteriores en el marcado del espacio global con el mundo físico no lo afectarán.