Настоящие орудия как контроллеры: как перенести что-либо в виртуальную реальность

Я Кристофер О'Хаган, инженер-программист @KainosSoftware, и я работаю в отделе прикладных инноваций. Ориентация на иммерсивные технологии. Этот блог рассказывает о том, как мы недавно превратили практически полностью работающую винтовку в контроллер виртуальной реальности, и о том, как мы преодолели возникающие проблемы.

Недавно к нам обратился канадский заказчик, который ищет помощь в создании реалистичного шутера в качестве аттракциона для своей аркады. Это является частью растущей тенденции, которую мы наблюдаем, когда иммерсивные технологии, такие как VR, используются для развлечений на местах, таких как квесты и американские горки. Хотя оборудование и настройка могут быть дорогими, они жизнеспособны из-за высокой производительности и новых условий, предлагаемых этими предприятиями. Отличным примером развлечений на месте является виртуальный пейнтбол, который компаниям, таким как «The Void», удалось это сделать.

Наша основная задача для иммерсивного стрелка, с которым мы помогали, заключалась в создании и использовании настоящего огнестрельного оружия ... или, по крайней мере, чего-то, что выглядело и ощущалось как единое целое.

Получение контроллера

Первоначально мы полагали, что поиск контролера будет трудным. Мы обратились к местному поставщику пневматического оружия Gear of War. Наши требования были:

  • Точная копия пневматической винтовки, которая выглядела, ощущалась и весила, как настоящая винтовка.
  • Пистолет, который при выстреле производит реалистичную отдачу
  • Триггер и безопасность, которые были подключены, чтобы мы могли использовать их для входов нашего моделирования

Мы думали, что это будет много, но были удивлены тем фактом, что это казалось им нормальным. Они сделали много реквизита для телевидения и фильмов, поэтому получили странные запросы. Затем мы использовали установленный трекер Vive для отслеживания оружия в VR.

Настройка контроллера

Вот где мы испытали нашу главную проблему, вибрации: проблема была вызвана реалистической отдачей нашего пистолета. Поскольку Vive Tracker использует IMU (единицы инерционного движения) для отслеживания на высокой частоте, и систему маяка Vive для отслеживания на сравнительно более низкой частоте и для коррекции дрейфа. IMU работают, измеряя ускорение по каждой оси, а затем вычисляя смещение из этого измерения. Когда ИДУ агрессивно вибрируют, например, когда его устанавливают на реально стреляющее оружие, они не могут точно отследить. Это была проблема.

Поскольку мы не являемся экспертами в области вибрации, мы предприняли некоторые попытки решить эту проблему, но не добились большого прогресса. Затем мы решили сделать реддит пост в R / Vive. Реакция сообщества была полезна, исправляя некоторые простые вещи, которые мы пропустили, такие как трекер слишком далеко вверх по железной дороге. К нашему удивлению, HTC связался с нами по поводу проекта, который проявил интерес к тому, что мы пытались сделать. У них была бета-версия прошивки Vive Tracker, которая могла бы помочь, фильтр низких частот для IMU, который они нам дали.

График нормального ввода по сравнению с вводом после использования фильтра нижних частот

Фильтр нижних частот можно настроить через интерфейс USB HID. Мы смогли отправить отчеты «0xB3», которые отправляют основную информацию об используемом устройстве, а также о конфигурации нижних частот, с MacBook на Tracker с правильными настройками для достаточного гашения вибраций. Следующим шагом была отправка отчета о функциях, который позволяет нам сообщать об изменениях в настройках, а также управлять устройствами HID, на трекер с малинового пи, поскольку нам нужно было что-то, что могло бы поместиться в патрон пистолета, чтобы пользователь не мог увидеть проводку.

Фильтр низких частот

Вот шаги, чтобы настроить Raspberry Pi для такого рода проекта

  • Установите Rasbian на Raspberry Pi
  • Обновите версию Pi для Node.js
  • Установите библиотеку «node-hid» в свой проект, для конкретной инструкции, чтобы сделать это на пи смотрите здесь
  • Добавьте в udev файл с именем `60-HTC-Vive-perms.rules` с этой строкой в ​​нем
KERNEL == "hidraw *", SUBSYSTEM == "hidraw", ATTRS {idVendor} == "28de", ATTRS {idProduct} == "2022", TAG + = "uaccess"

Проблема, которая может возникнуть, заключается в том, что node-hid использует неправильное значение wIndex, в этом случае wIndex используется для указания интерфейса или места отправки отчета. Вот что поможет вам разобраться с USB-запросами. Node-hid не позволяет вам указать интерфейс. К счастью, когда я оглянулся на «show-devices.js», который поставляется с библиотекой «node-hid» и выводит все подключенные устройства HID, у него были разные пути для каждого интерфейса.

Использование show-devices.js, который поставляется с библиотекой node-hid. Вы можете найти, какой путь использовать в коде, если он кажется другим

Если у вас есть другие проблемы со сценарием, «usbmon» поставляется с Raspbian и позволяет вам просматривать все запросы usb. Вот полезная ссылка, которая поможет вам декодировать эти запросы (начинается на стр. 15).

Заключение

Использование пистолета в качестве контроллера VR было далеко не простым делом. Вибрации выстрела оружия достаточно сильны, чтобы нарушить способность IMU точно отслеживать себя. Используя функцию фильтра низких частот Tracker и встроенный Raspberry Pi, мы смогли преодолеть эту проблему, не ставя под угрозу отслеживание или силу, с которой пистолет вибрирует.

Спасибо за чтение
@ cohagan154