Table of Contents

EasyAR Koordinatensystem

In 3D-Programmen ist die Definition des Koordinatensystems sehr wichtig. Sofern nicht anders angegeben, gelten die folgenden Konventionen.

  • Vektoren sind Spaltenvektoren.
  • Matrizen werden zeilenweise gespeichert (row-major). (OpenGL verwendet spaltenweise Speicherung - column-major)
  • Koordinatensysteme verwenden alle ein Rechtssystem. (Konsistent mit OpenGL)
  • Wenn ein physikalisches Maß vorhanden ist, wird als Einheit Meter verwendet.
  • Die negative Y-Achse des Weltkoordinatensystems zeigt in Richtung der Schwerkraft.
  • Im Gerätekoordinatensystem zeigt die X-Achse nach rechts, die Y-Achse nach oben und die Z-Achse aus dem Bildschirm heraus; bei Geräten mit drehbarem Bildschirm beziehen sich rechts und oben auf die Standardausrichtung. Insbesondere folgt die Standardausrichtung unter Android der Systemdefinition. (Bei Brillen und einigen Tablets ist die Querausrichtung die Standardausrichtung, bei Handys und einigen Tablets die Hochausrichtung). Unter iOS ist die Standardausrichtung die Hochausrichtung. (Konsistent mit den Definitionen in den IMU-Beschreibungen für Android und iOS)

Pose der Objektverfolgung

Die Pose (Lage und Orientierung) des Objekts bei der Verfolgung von ebenen Bildern (ImageTracker) und 3D-Objekten (ObjectTracker) wird in pose gespeichert. Sie stellt die aktuelle Pose des verfolgten Targets relativ zur Kamera dar. Dabei sind sowohl das Kamerakoordinatensystem als auch das Target-Koordinatensystem Rechtssysteme. Der Ursprung des Kamerakoordinatensystems ist der optische Mittelpunkt der Kamera. Die positive X-Achse zeigt nach rechts, die positive Y-Achse nach oben und die positive Z-Achse in die Richtung, in die das Licht in die Kamera eintritt (aus dem Bildschirm heraus). (Rechts und oben beziehen sich hier auf rechts und oben im Kamerabild, was möglicherweise von der natürlichen Geräteausrichtung abweicht.) Die Daten sind zeilenweise (row-major) gespeichert, im Gegensatz zu OpenGLs spaltenweiser Speicherung (column-major).

Die Pose kann geschrieben werden als:

\[ 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) \]

Wenn die 3D-Engine eine andere Achsendefinition verwendet, muss dies beim Setzen der Transformationsmatrix in der 3D-Engine berücksichtigt werden. Wenn beispielsweise die Z-Richtung sowohl im Kamerakoordinatensystem als auch im Target-Koordinatensystem umgekehrt ist, sollte die Transformationsmatrix des Target-Knotens in der 3D-Engine auf folgenden Wert gesetzt werden:

\[ \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) \]

Transform der Bewegungsverfolgung

Die transform der Oberflächenverfolgung (SurfaceTracker) und die cameraTransform der Bewegungsverfolgung (MotionTrackerCameraDevice), von ARKit (ARKitCameraDevice) und ARCore (ARCoreCameraDevice) stellen die Transformation der Kamera relativ zum Weltkoordinatensystem dar. Dabei sind sowohl das Kamerakoordinatensystem als auch das Weltkoordinatensystem Rechtssysteme. Der Ursprung des Kamerakoordinatensystems ist der optische Mittelpunkt der Kamera. Die positive X-Achse zeigt nach rechts, die positive Y-Achse nach oben und die positive Z-Achse in die Richtung, in die das Licht in die Kamera eintritt (aus dem Bildschirm heraus). (Rechts und oben beziehen sich bei Mobilgeräten auf rechts und oben in der natürlichen Geräteausrichtung.) Die positive Y-Achse des Weltkoordinatensystems zeigt nach oben (entgegen der Schwerkraftrichtung), sein Ursprung wird vom Bewegungsverfolgungssystem festgelegt. Die Daten sind zeilenweise (row-major) gespeichert, im Gegensatz zu OpenGLs spaltenweiser Speicherung (column-major).

Pose in Sparse Spatial Map und Mega

Die getMapPose der Sparse Spatial Map (SparseSpatialMap) und die pose in Mega geben die Position und Ausrichtung des Map-Blocks im Kamerakoordinatensystem an. Dabei sind sowohl das Kamerakoordinatensystem als auch das Map-Block-Koordinatensystem Rechtssysteme. Der Ursprung des Kamerakoordinatensystems ist der optische Mittelpunkt der Kamera. Die positive X-Achse zeigt nach rechts, die positive Y-Achse nach oben und die positive Z-Achse in die Richtung, in die das Licht in die Kamera eintritt (aus dem Bildschirm heraus). (Rechts und oben beziehen sich bei Mobilgeräten auf rechts und oben in der natürlichen Geräteausrichtung.) Die positive Y-Achse des Map-Block-Koordinatensystems zeigt nach oben (entgegen der Schwerkraftrichtung), sein Ursprung wird durch die Map-Block-Daten festgelegt. Die Daten sind zeilenweise (row-major) gespeichert, im Gegensatz zu OpenGLs spaltenweiser Speicherung (column-major).