Antilatency Tracking Alignment Library

Antilatency Tracking Alignment Library

Библиотека для сопоставления данных двух систем трекинга, используемых совместно. Например, при использовании трекера Alt на шлеме виртуальной реальности с собственной системой трекинга.

Возможности библиотеки

Вычисление информации об относительном повороте трекеров, систем координат и задержке по времени между данными трекинга.

Сопоставление трекинга

При использовании Antilatency с AR/VR гарнитурой, имеющей собственную систему трекинга, мы можем сопоставить данные этих двух трекеров с целью уточнения Placement, определения корректного времени интерполяции (так как гарнитуры используют собственное значение для timewarp), диагностики и многого другого. В общем случае трекеры:
Для определения временной задержки достаточно знать данные о поворотах трекеров. Поэтому библиотека игнорирует информацию о смещении трекеров. Сопоставление трекинга производится исходя из следующей формулы: a(t) = rotationBSpace * b(t) * rotationARelativeToB для любого времени t.

ITrackingAlignment

Для сопоставления данных системы трекинга Antilatency и сторонней системы используется оптимизатор ITrackingAlignment. При создании экземпляра оптимизатора задаются параметры initialARelativeToB (компонент в Placement) и initialTimeBAheadOfA (предполагаемое время задержки между данными трекинга). A — это трекер Alt, B — сторонний трекер. Структура State — это состояние оптимизатора, в ней хранятся данные о повороте Alt относительно стороннего трекера, относительный поворот сторонней системы координат мира и задержка между данными трекинга. При обновлении этих полей используются данные поворота Alt (без экстраполяции), данные поворота стороннего трекера (как есть) и текущее время (заданное от какой-либо конкретной точки отсчёта, например, от запуска программы). Все повороты задаются с помощью кватернионов.

State

struct State {
Math.floatQ rotationARelativeToB;
Math.floatQ rotationBSpace;
float timeBAheadOfA;
}
Результаты сопоставления трекинга оптимизатор записывает в State.
Если данные стороннего трекера приходят раньше, чем с Alt, то число State.timeBAheadOfA положительное, иначе отрицательное.

Пример использования

Код на C#:
using Antilatency.TrackingAlignment;

ILibrary alignmentLibrary = Antilatency.TrackingAlignment.Library.load();
ITrackingAlignment trackingAlignment = alignmentLibrary.createTrackingAlignment(
    initialARelativeToB,
    initialTimeBAheadOfA
);

...
while (...) {
    State state = trackingAlignment.update(
        alt.state.pose.rotation,
        rotationB,
        currentTime
    );

    < use state somehow >
    ...
}