AR/VR

Трекинг: 6DoF

2019 год. Apple тайно скупает компании в области AR-трекинга: PrimeSense (depth sensors), SensoMotoric (eye tracking), Metaio (AR SDK). Суммарно - больше 1 миллиарда долларов. Всё ради одной задачи: знать, где голова пользователя, с точностью до миллиметра. Результат - Vision Pro, 2023. 12 камер, LiDAR, TrueDepth, 1000 Hz IMU. Трекинг, который вычисляет позицию 1000 раз в секунду.

  • **Автопилоты:** Visual-Inertial SLAM из XR используется в автономных автомобилях и дронах для навигации без GPS (в туннелях, внутри зданий)
  • **Кинематография:** студии вроде ILM используют outside-in трекинг OptiTrack для записи движений актёров - так создаются Голлум, Танос, аватары в фильмах
  • **Робототехника:** Boston Dynamics использует SLAM-алгоритмы в роботах Spot и Atlas для навигации в незнакомых помещениях

От военных симуляторов до Meta Quest

В 1968 году Иван Сазерленд создал первый VR-шлем Sword of Damocles - он был подвешен к потолку из-за веса. Трекинг - механический, 3DoF. В 1990-х NASA экспериментировало с outside-in через ультразвуковые сенсоры. Прорыв случился в 2016: Oculus CV1 с внешними камерами, Valve Lighthouse с ИК-лазерами. Следующий прорыв - 2019, Quest 1: inside-out без единой внешней камеры. К 2023 году Vision Pro поднял планку до 12 камер и eye tracking. Пятьдесят пять лет от потолочного маятника до автономного шлема за 3500 долларов.

Предварительные знания

  • Optics and Displays

IMU: инерциальные сенсоры

2016 год. Oculus CV1 - первый массовый VR-шлем. Поворот головы - и виртуальный мир поворачивается за 2 миллисекунды. Человеческий вестибулярный аппарат требует синхронизации менее 20 мс - иначе тошнота. Откуда такая скорость? Внутри каждого XR-устройства сидит **IMU (Inertial Measurement Unit)** - чип размером с рисовое зерно, 1000 измерений в секунду.

**IMU состоит из двух основных сенсоров:** акселерометр (измеряет линейное ускорение по 3 осям - вперёд/назад, влево/вправо, вверх/вниз) и гироскоп (измеряет угловую скорость вращения вокруг 3 осей). Вместе они дают 6 «потоков» данных (6-axis IMU). Некоторые IMU включают ещё магнитометр (компас) - это уже 9-axis IMU.

Чтобы получить **позицию** из IMU, нужно дважды проинтегрировать ускорение: ускорение - скорость - позиция. Для вращения достаточно одного интегрирования угловой скорости. Математически просто. Практически - катастрофа.

**Drift (дрейф)** - главная проблема IMU. При двойном интегрировании крошечные ошибки сенсора накапливаются квадратично по времени. Через минуту виртуальная позиция может «уплыть» на метры от реальной. Для вращения drift значительно меньше (одно интегрирование), поэтому 3DoF-трекинг на чистом IMU работает приемлемо, а 6DoF - нет.

Несмотря на drift, IMU незаменим по двум причинам. **Скорость**: данные каждую миллисекунду - минимальная latency для head tracking. **Надёжность**: работает в темноте, при окклюзии камер, при быстрых резких движениях. Поэтому все XR-устройства используют IMU как «первую линию» трекинга, а камеры - для коррекции drift.

Почему IMU не может обеспечить точный 6DoF-трекинг позиции в течение длительного времени?

SLAM: одновременная локализация и картографирование

IMU быстрый, но дрейфует. Камеры точные, но медленные (30-60 Hz против 1000 Hz). А что если объединить? Именно это делает **SLAM (Simultaneous Localization And Mapping)** - алгоритм, который одновременно строит карту окружения и определяет позицию устройства на этой карте.

**Проблема курицы и яйца в SLAM:** чтобы определить позицию, нужна карта. Чтобы построить карту, нужно знать позицию. SLAM решает обе задачи одновременно, итеративно уточняя и карту, и позицию.

**Visual-Inertial SLAM** - стандарт в современных XR-устройствах. Камеры работают на 30-60 Hz и дают точную (но редкую) информацию о позиции. IMU работает на 1000 Hz и заполняет промежутки между кадрами камер. Результат: точность камер + скорость IMU.

**Loop closure** - критически важная функция SLAM. Когда устройство возвращается в ранее посещённое место и распознаёт его, SLAM корректирует накопленную ошибку за весь маршрут. Как если бы шли по лесу, набрели на знакомое дерево и поняли: «Я уже здесь был, значит я знаю, где я».

Компонент SLAMВходные данныеЧто даёт
Feature extractionКадр камерыНабор узнаваемых точек (ORB, SIFT)
Feature trackingПара кадровКак сдвинулись точки между кадрами
Pose estimationСдвиг точек + IMUПозиция и ориентация устройства
Mapping3D-точкиКарта окружения (point cloud)
Loop closureТекущие vs. старые featuresКоррекция накопленной ошибки

Помимо камер, некоторые устройства используют **depth-сенсоры** (LiDAR, structured light, ToF-камеры) для прямой информации о глубине. Это ускоряет построение 3D-карты и делает SLAM устойчивее при слабом освещении или бедных текстурах (белая стена без деталей - кошмар для visual SLAM).

Какую задачу решает loop closure в SLAM?

Inside-out трекинг: камеры на шлеме

SLAM использует камеры и IMU для определения позиции. Но где физически расположены эти камеры? Ответ делит все XR-системы на два лагеря. **Inside-out** - камеры находятся **на самом устройстве** и смотрят наружу, на окружающую среду. Надел - и пошёл.

**«Inside-out» означает:** наблюдение изнутри (от шлема) наружу (на мир). Шлем сам видит комнату и сам определяет своё положение. Никакого дополнительного оборудования не нужно.

УстройствоКамерДоп. сенсорыПримечание
Meta Quest 24-Первый массовый standalone с inside-out
Meta Quest 34Depth sensorPassthrough + MR
Apple Vision Pro12LiDAR + TrueDepthСамый продвинутый inside-out
HoloLens 24ToF depthEnterprise AR
Windows Mixed Reality2-Минимальный inside-out (2 камеры)

**Hand tracking** - бонус inside-out систем. Те же камеры, которые отслеживают позицию шлема, видят и руки. Алгоритмы computer vision распознают форму руки, положение каждого пальца и жесты. Meta Quest и Apple Vision Pro используют hand tracking как основной способ ввода (без контроллеров).

Главное ограничение inside-out - **окклюзия**. Если руки за спиной, камеры их не видят. Если контроллер загорожен телом - трекинг теряется. Система переключается на предсказание по IMU контроллера, но через секунду-две точность падает.

Второе ограничение - **зависимость от визуальной информации**. В полной темноте или в комнате с однотонными белыми стенами SLAM не находит feature points, и трекинг позиции деградирует до 3DoF (только IMU). Meta Quest частично решает это с ИК-подсветкой - камеры видят в ближнем ИК-диапазоне, невидимом для глаз.

В какой ситуации inside-out трекинг будет работать хуже всего?

Outside-in трекинг: взгляд со стороны

IMU быстрый, но дрейфует. SLAM корректирует drift с помощью камер. Inside-out ставит камеры на шлем. А что если поставить камеры **снаружи, в комнате**, и направить их на шлем? Это **outside-in трекинг** - внешние сенсоры наблюдают за устройством извне.

**«Outside-in» означает:** наблюдение снаружи (из комнаты) внутрь (на шлем/контроллеры). Внешние камеры или сенсоры точно знают свою позицию (они закреплены) и отслеживают маркеры на шлеме.

СистемаТипТочностьЗонаПрименение
SteamVR Lighthouse 2.0ИК-лазеры + фотодиодыменее 1 мм10x10 мPC VR (Valve Index, Vive)
OptiTrackИК-камеры + ретрофлекторыменее 0.1 ммНастраиваетсяMotion capture, наука
ViconИК-камеры + маркерыменее 0.1 ммДо 100+ кв.мКино, биомеханика
PlayStation VR1Камера + световые маркеры~5 мм~2x2 мКонсольный VR (устарел)

Главное преимущество outside-in - **точность**. Lighthouse достигает субмиллиметровой точности, OptiTrack и Vicon - ещё выше. Это критично для motion capture в кино (костюмы с маркерами на актёрах), научных исследований движения, профессиональных VR-тренажёров.

Ещё одно преимущество - **отслеживание окклюдированных объектов**. Если пять камер OptiTrack расставлены по комнате, маркер на руке виден хотя бы двум камерам практически из любого положения - даже если рука за спиной. Inside-out с камерами на шлеме этого не может.

Индустрия движется в сторону inside-out: Meta Quest, Apple Vision Pro, все автономные шлемы используют камеры на устройстве. Outside-in остаётся в нишах, где субмиллиметровая точность критична: профессиональный motion capture, научные лаборатории, VR-аркады с full body tracking.

Inside-out трекинг принципиально хуже outside-in по точности и качеству

Для 95% задач (игры, продуктивность, обучение, MR) inside-out трекинг обеспечивает достаточную точность (2-5 мм) и при этом несравнимо удобнее: не нужно устанавливать внешнее оборудование, работает в любой комнате, поддерживает неограниченную зону перемещения

Стереотип сформировался в эпоху ранних VR-шлемов (Rift CV1, Vive 2016), когда inside-out ещё не дозрел. Quest 3 и Vision Pro показывают стабильный 6DoF без единой внешней камеры. Outside-in оправдан только там, где нужна точность менее 1 мм - motion capture, научные эксперименты, хирургические тренажёры

Ключевые идеи

  • **IMU** (акселерометр + гироскоп) даёт данные 1000 раз в секунду, но страдает от drift - накопления ошибок при интегрировании
  • **SLAM** объединяет камеры (точность) и IMU (скорость), одновременно строя карту окружения и определяя позицию на ней
  • **Inside-out** (камеры на шлеме) - удобен, работает в любой комнате, стандарт для потребительских устройств (Quest, Vision Pro)
  • **Outside-in** (внешние сенсоры) - субмиллиметровая точность для motion capture и научных задач, но требует установки оборудования

Связанные темы

Трекинг - мост между сенсорами и визуальным опытом в XR:

  • Оптика и дисплеи — Данные трекинга определяют, что рендерить - ATW и foveated rendering зависят от точности head и eye tracking
  • Введение в XR — Тип трекинга (3DoF vs 6DoF) определяет, какой XR-опыт возможен - от AR до полноценного VR

Вопросы для размышления

  • Почему Visual-Inertial SLAM стал стандартом, а не чисто визуальный SLAM или чисто инерциальная навигация? Какие слабости каждого подхода компенсирует другой?
  • Как спроектировать систему трекинга для VR-аркады на 200 кв.м с десятками игроков? Inside-out, outside-in или гибрид?
  • SLAM-алгоритмы из XR используются в автопилотах и роботах. Какие дополнительные требования появляются, когда вместо шлема на голове - автомобиль на дороге?

Связанные уроки

  • arvr-02 — Оптика и дисплеи: ATW и foveated rendering зависят от точности трекинга
  • arvr-01 — Тип трекинга (3DoF vs 6DoF) определяет возможный XR-опыт
  • rob-03 — SLAM в роботах и XR - та же математика, разные применения
  • rob-04 — Навигация автономных роботов и VR-трекинг используют Visual-Inertial SLAM
  • emb-03 — IMU подключается к MCU через I2C/SPI - физический уровень трекинга
  • ml-01 — Hand tracking и распознавание жестов - применение computer vision поверх SLAM
  • la-06-transformations
Трекинг: 6DoF

0

1

Войти

Почему Lighthouse (SteamVR) достигает субмиллиметровой точности?