OpenVR Arduino HMD

July 8, 2024 · View on GitHub

EN RU

OpenVR Arduino HMD

Драйвер для OpenVR / SteamVR, позволяющий отслеживать голову, с помощью любого Arduino трекера вращения, для самодельного VR шлема из HDMI дисплея и гарнитуры.

Настройка

  1. Подключите второй VR дисплей и установите расширенный режим в настройках мониторов.
  2. Установите SteamVR.
  3. Распакуйте драйвер в папку "...\Steam\steamapps\common\SteamVR\drivers". Настройте необходимые параметры (windowX, windowY, windowWidth, windowHeight и другие), в файле конфигурации "...\Steam\steamapps\common\SteamVR\drivers\arduinohmd\resources\settings\default.vrsettings".
  4. Запустите SteamVR и окне статуса SteamVR нажать -> Настройки комнаты -> Маленькая комната -> Калибровка -> 170 см. SteamVR демонстрация может быть закрыта, а запуск SteamVR Home может быть отключен в настройках SteamVR.
  5. Наденьте шлем, при необходимости отцентрируйте его, с помощью клавиши (по умолчанию Numpad 5 или CTRL + ALT + R, изменить кнопку можно в файле конфигурации, вписав нужное название кнопки).

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

Быстро включать и выключать расширенный VR монитор шлема можно, с помощью оболочки HMD Assistant или MultiMonitorTool.

Arduino и трекеры вращения

Подойдут любые COM трекеры с выводом 3 float значения yaw, pitch, roll или 4 float значения кватерниона w, x, y, z. Скорость вывода должна составлять.

Для отслеживания поворотов головы понадобится купить Arduino Nano и подключить к ней плату с датчиками вращения, например, MPU 6050 GY-521, MPU 9250, MPU 3200 GY-85 или любую другую при наличии прошивки с выводом трёх float значений yaw, pitch, roll (рысканье, тангаж, крен) или 4 float значения кватерниона w, x, y, z и калибровкой. Вывод данных происходит бинарный (3 float или 4 float значения), пример можно посмотреть тут. При использовании кватерниона измените значение RotationQuaternion на true. Скорость вывода должна составлять 115200.

Готовая прошивка Arduino есть для MPU 3200 GY-85, называется она Razor AHRS. Вместе с ней идет программа для калибровки и демонстрации. После калибровки замените файл "Output.ino", в папке с прошивкой, на этот. Здесь важно отметить, что появились новые ревизии GY-85, которые несовместимы с этой прошивкой. Прошивкой поддерживаются следующие сенсоры: акселерометр ADXL345, гироскоп ITG-3200 и магнитометры HMC5843, HMC5883L. Инструкцию по калибровке можно найти на youtube.

Готовая прошивка Arduino есть для MPU 6050 GY-521. Необходимо спаять по схеме, загрузить библиотеки, распаковать их в папку "libraries" Arduino IDE. Положить трекер на ровную поверхость, прошить скетч "MPU6050_calibration.ino" и получить данные для калибровки. Далее нужно прошить скетч "HMD_MPU6050_DMP6.ino", вписав в него уже полученные данные калибровки.

Параметры файла конфигурации

НазваниеОписание
COMPortНомер COM порта Arduino, можно посмотреть в диспетчере устройств. Используйте порты от 1 до 9, измените при необходимости его в свойствах устройства.
CenteringKeyКод кнопки центрирования изображения, изменить кнопку можно в файле конфигурации, вписав нужное название кнопки).
CrouchPressKeyКод кнопки приседания, изменить кнопку можно в файле конфигурации, вписав нужное название кнопки). Необходимо для связи с другими драйверами, например, используя контроллеры Razer Hydra и используя этот драйвер можно приседать.
CrouchOffsetВысота приседания по нажатию кнопки.
FOVГрадус поля зрения. Можно увеличить, в зависимости от линз VR гарнитуры.
IPDМежзрачковое расстояние.
DistanceBetweenEyesРасстояние между стерео изображениями, чем больше, тем ближе.
DistortionK1, DistortionK2Коэффициенты искажения линз.
ScreenOffsetXСдвиг изображения по горизонтали.
ZoomHeight, ZoomWidthКоэффициенты масштабирования стерео изображений.
DisplayFrequencyЧастота обновления экрана.
RenderWidth, RenderHeightРазрешение рендера изображения для одного глаза.
WindowWidth, WindowHeightВысота и ширина выводимого окна.
WindowX, WindowYСмещение окна, требуется для отображения на других мониторах (расширенных). Например, для отображения на втором дисплее, который отображается справа, нужно указать значение 1920 (при условии, что первый дисплей имеет разрешение 1920 на 1080). Точные данные можно просмотреть, с помощью MultiMonitorTool утилиты, которая также может выключать и включить второй монитор, через bat-файл.
DebugModeРежим отладки, заблокирован на 30 FPS. Рекомендуется после проверки отключить (поставить false).
ArduinoRequireТребование подключенного Arduino, для запуска драйвера. Параметр необходим для быстрых тестов контроллеров, чтобы не подключать и одевать шлем для тестов. Для отключения измените на false.

Горячие клавиши

НазваниеОписание
Numpad 5, CTRL + ALT + RЦентрирование изображения.
Page Up, Page DownПодняться или опуститься.
Numpad 8, 2, 4, 6Перемещение вперед, назад, влево, вправо.
Numpad 1, 3Изменить yaw (рысканье).
Numpad 7, 9Изменить roll (крен).
Numpad -Сброс перемещений и поднятия.

Известные проблемы

  1. Красный экран. Исправить это можно выбрав окно "Headset Window".

Загрузка

Версия для x86 и x64.
Загрузить

Обратная связь

r57zone[собака]gmail.com