Table of Contents

Системы координат EasyAR

В 3D-программах определение систем координат очень важно. Если не указано иное, используются следующие соглашения.

  • Все векторы являются векторами-столбцами.

  • Все матрицы используют порядок row-major. (OpenGL использует column-major)

  • Все системы координат являются правосторонними. (Согласовано с OpenGL)

  • Если система координат имеет физический масштаб, единицей измерения является метр.

  • Отрицательное направление оси Y мировой системы координат является направлением гравитации.

  • В системе координат устройства ось X направлена вправо, ось Y направлена вверх, а ось Z направлена наружу от экрана. Для устройств, экран которых может вращаться, определения вправо и вверх основаны на ориентации по умолчанию. В частности, ориентация Android по умолчанию следует системному определению. (Альбомное положение является ориентацией по умолчанию для очков и некоторых планшетов, а портретное положение — для телефонов и некоторых планшетов.) Ориентация iOS по умолчанию — портретное положение. (Согласовано с определениями в документации IMU Android и iOS)

Pose для отслеживания объектов

Pose объекта при отслеживании плоских изображений (ImageTracker) и 3D object tracking (ObjectTracker) хранится в pose и представляет положение и ориентацию текущего отслеживаемого target относительно camera. И система координат camera, и система координат target являются правосторонними. Начало системы координат camera находится в оптическом центре камеры, положительное направление оси x направлено вправо, положительное направление оси y направлено вверх, а положительное направление оси z направлено в сторону входа света в камеру (наружу от экрана). (Здесь вправо и вверх означают вправо и вверх на изображении camera, что может отличаться от естественной ориентации устройства.) Данные расположены в порядке row-major, противоположном column-major в OpenGL.

Pose можно записать так:

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

Если 3D engine использует другие определения осей координат, это нужно учитывать при настройке матрицы transform в 3D engine. Например, когда направления z в системе координат camera и системе координат target противоположны, значение матрицы transform узла target в 3D engine должно быть задано как:

\[ \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 для motion tracking

transform для surface tracking (SurfaceTracker), а также cameraTransform для motion tracking (MotionTrackerCameraDevice), ARKit (ARKitCameraDevice) и ARCore (ARCoreCameraDevice) представляют transform камеры относительно мировой системы координат. И система координат camera, и мировая система координат являются правосторонними. Начало системы координат camera находится в оптическом центре камеры, положительное направление оси x направлено вправо, положительное направление оси y направлено вверх, а положительное направление оси z направлено в сторону входа света в камеру (наружу от экрана). (Здесь вправо и вверх на мобильных устройствах означают вправо и вверх в естественной ориентации устройства.) Ось y мировой системы координат направлена вверх (противоположно направлению гравитации), а начало определяется системой motion tracking. Данные расположены в порядке row-major, противоположном column-major в OpenGL.

Pose в sparse spatial map и Mega

getMapPose для sparse spatial map SparseSpatialMap и pose в Mega представляют положение и ориентацию map block в системе координат camera. И система координат camera, и система координат map block являются правосторонними. Начало системы координат camera находится в оптическом центре камеры, положительное направление оси x направлено вправо, положительное направление оси y направлено вверх, а положительное направление оси z направлено в сторону входа света в камеру (наружу от экрана). (Здесь вправо и вверх на мобильных устройствах означают вправо и вверх в естественной ориентации устройства.) Ось y системы координат map block направлена вверх (противоположно направлению гравитации), а начало определяется данными map block. Данные расположены в порядке row-major, противоположном column-major в OpenGL.