Table of Contents

Sistema de coordenadas de EasyAR

En los programas 3D, la definición de los sistemas de coordenadas es crucial. A menos que se especifique lo contrario, se siguen las siguientes convenciones.

  • Los vectores son vectores columna.
  • Las matrices siguen un ordenamiento row-major. (OpenGL es column-major)
  • Todos los sistemas de coordenadas utilizan la regla de la mano derecha. (Consistente con OpenGL)
  • Si existe una escala física en un sistema de coordenadas, la unidad es el metro.
  • La dirección negativa del eje Y del sistema de coordenadas mundial es la dirección de la gravedad.
  • En el sistema de coordenadas del dispositivo, el eje X apunta hacia la derecha, el eje Y hacia arriba y el eje Z hacia afuera de la pantalla; para dispositivos con pantalla rotativa, la derecha y arriba se definen según su orientación predeterminada. Específicamente, en Android la orientación predeterminada sigue la definición del sistema. (Las gafas y algunas tabletas tienen la orientación horizontal como predeterminada, los teléfonos y algunas tabletas tienen la orientación vertical como predeterminada). En iOS, la orientación predeterminada es vertical. (Consistente con las definiciones en las especificaciones IMU de Android e iOS).

Pose de seguimiento de objetos

La pose del objeto para el seguimiento de imágenes planas (ImageTracker) y el seguimiento de objetos 3D (ObjectTracker) se almacena en pose, representando la pose del target actualmente rastreado con respecto a la cámara. Tanto el sistema de coordenadas de la cámara como el del target son sistemas de mano derecha. El origen del sistema de coordenadas de la cámara es el centro óptico de la cámara, la dirección positiva del eje X es hacia la derecha, la dirección positiva del eje Y es hacia arriba y la dirección positiva del eje Z es la dirección en que la luz entra en la cámara (sale de la pantalla). (La derecha y arriba se refieren a la derecha y arriba en la imagen de la cámara, que pueden diferir de la orientación natural del dispositivo). Los datos están ordenados en row-major, opuesto al column-major de OpenGL.

La pose se puede escribir como:

\[ P = \left( \begin{array}{cccc} p_{11} & p_{12} & p_{13} & p_{14} \\ p_{21} & p_{22} & p_{23} & p_{24} \\ p_{31} & p_{32} & p_{33} & p_{34} \\ 0 & 0 & 0 & 1 \\ \end{array} \right) \]

Si el motor 3D utiliza otra definición de ejes, debe tenerse en cuenta al establecer la matriz de transformación en el motor 3D. Por ejemplo, si los sistemas de coordenadas de la cámara y del target tienen direcciones Z opuestas, el valor de la matriz de transformación del nodo target en el motor 3D debe establecerse como:

\[ \left( \begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{array} \right)\left( \begin{array}{cccc} p_{11} & p_{12} & p_{13} & p_{14} \\ p_{21} & p_{22} & p_{23} & p_{24} \\ p_{31} & p_{32} & p_{33} & p_{34} \\ 0 & 0 & 0 & 1 \\ \end{array} \right)\left( \begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{array} \right)=\left( \begin{array}{cccc} p_{11} & p_{12} & -p_{13} & p_{14} \\ p_{21} & p_{22} & -p_{23} & p_{24} \\ -p_{31} & -p_{32} & p_{33} & -p_{34} \\ 0 & 0 & 0 & 1 \\ \end{array} \right) \]

Transformación de seguimiento de movimiento

La transform del seguimiento de superficies (SurfaceTracker) y la cameraTransform del seguimiento de movimiento (MotionTrackerCameraDevice), ARKit (ARKitCameraDevice), ARCore (ARCoreCameraDevice), representan la transformación de la cámara con respecto al sistema de coordenadas mundial. Tanto el sistema de coordenadas de la cámara como el mundial son sistemas de mano derecha. El origen del sistema de coordenadas de la cámara es el centro óptico de la cámara, la dirección positiva del eje X es hacia la derecha, la dirección positiva del eje Y es hacia arriba y la dirección positiva del eje Z es la dirección en que la luz entra en la cámara (sale de la pantalla). (La derecha y arriba, en dispositivos móviles, se refieren a la derecha y arriba de la orientación natural del dispositivo). El eje Y del sistema de coordenadas mundial apunta hacia arriba (opuesto a la dirección de la gravedad), y el origen lo determina el sistema de seguimiento de movimiento. Los datos están ordenados en row-major, opuesto al column-major de OpenGL.

Pose en mapas espaciales dispersos y Mega

La getMapPose del mapa espacial disperso SparseSpatialMap y la pose en Mega, representan la posición y orientación del bloque del mapa en el sistema de coordenadas de la cámara. Tanto el sistema de coordenadas de la cámara como el sistema de coordenadas del bloque del mapa son sistemas de mano derecha. El origen del sistema de coordenadas de la cámara es el centro óptico de la cámara, la dirección positiva del eje X es hacia la derecha, la dirección positiva del eje Y es hacia arriba y la dirección positiva del eje Z es la dirección en que la luz entra en la cámara (sale de la pantalla). (La derecha y arriba, en dispositivos móviles, se refieren a la derecha y arriba de la orientación natural del dispositivo). El eje Y del sistema de coordenadas del bloque del mapa apunta hacia arriba (opuesto a la dirección de la gravedad), y el origen lo determinan los datos del bloque del mapa. Los datos están ordenados en row-major, opuesto al column-major de OpenGL.