Справжні гармати як контролери: як залучити що-небудь до VR

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

До нас нещодавно звернувся канадський клієнт, який шукає допомоги зі створення реалістичного шутера як атракціону для своєї аркади. Це частина зростаючої тенденції, яку ми спостерігали, коли занурювальні технології, такі як VR, використовуються для розважальних підприємств на місцях, таких як кімнати для втечі та американські гірки. Незважаючи на те, що обладнання та налаштування можуть бути дорогими, воно є життєздатним завдяки великій потужності та новим умовам, які пропонує цей бізнес. Чудовим прикладом розваг на місцях є віртуальний пейнтбол, який компанії, як-от "The Void", досягли успіху.

Нашим головним завданням для занурюючого стрільця, з яким ми допомагали, було створення та використання фактичної вогнепальної зброї… або, принаймні, щось, що виглядало і відчувалося таким.

Отримання контролера

Спочатку ми вважали, що знайти контролер буде важко. Ми звернулися до місцевого постачальника повітряної м’якої зброї Gear of War. Нашими вимогами були:

  • Репліка повітряно-м'якої гвинтівки, яка виглядала, відчувала і зважувалась, як справжня гвинтівка
  • Пістолет, який при стрільбі дасть реалістичну віддачу
  • Спусковий механізм та безпека, які були використані для того, щоб ми могли використовувати їх для входів у наше моделювання

Ми думали, що про це багато запитають, але були здивовані тим фактом, що це їм здається нормальним. Вони зробили багато реквізитів для телебачення і фільмів, тому отримали більш дивні запити. Тоді ми використовували змонтований трекер Vive для відстеження пістолета у ВР.

Налаштування контролера

Тут ми відчули нашу головну проблему, вібрації. Ця проблема була спричинена реалістичним віддачею нашої зброї. Оскільки Vive Tracker використовує IMU (інерційні блоки руху) для відстеження на високій частоті, а маякову систему Vive для відстеження на порівняно нижчій частоті та для корекції дрейфу. IMU працюють, вимірюючи прискорення в кожній осі, а потім обчислюють переміщення від цього вимірювання. Коли ВМС агресивно вібрують, наприклад, коли вони встановлені на реально стріляючу зброю, вони не в змозі точно відстежити. Це була проблема.

Оскільки ми не є фахівцями з вібрації, ми зробили кілька спроб вирішити проблему, але не добилися великого прогресу. Тоді ми вирішили зайняти Reddit до r / Vive. Відповідь громади була корисною, виправляючи деякі прості речі, які ми пропустили, такі як трекер був занадто далеко вгору. На наш сюрприз HTC зв’язався з нами з приводу проекту, що виявляє інтерес до того, що ми намагалися зробити. Вони мали бета-версію прошивки Vive Tracker, яка могла б допомогти, фільтр низьких частот для IMU, який вони нам дали.

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

Фільтр низьких частот можна налаштувати через інтерфейс USB HID. Нам вдалося надіслати звіти "0xB3", які надсилають основну інформацію про використовуваний пристрій, а також про конфігурацію низьких частот, від MacBook до Tracker з правильними налаштуваннями, щоб достатньо зменшити вібрації. Наступним кроком було надіслати звіт про функції, який дозволяє нам повідомляти зміни в налаштуваннях, а також керувати HID-пристроями, до Tracker з малинового пі, оскільки нам потрібно було щось, що могло б поміститися всередині патрона пістолета, щоб користувач не міг дивіться проводку.

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

Це кроки, щоб налаштувати Raspberry Pi для такого роду проектів

  • Встановіть raspbian на малиновий пі
  • Оновіть pi-версію "Node.js"
  • Встановіть у свій проект бібліотеку "схована" від вузла, щоб отримати конкретну інструкцію на пі-дивіться тут
  • Додайте файл у udev під назвою `60-HTC-Vive-perms.rules` з цим рядком у ньому
KERNEL == "hidraw *", SUBSYSTEM == "hidraw", ATTRS {idVendor} == "28de", ATTRS {idProduct} == "2022", TAG + = "uaccess"

Проблема, яка може виникнути, полягає в тому, що неправильне значення wIndex використовується невірно захованим, в цьому випадку wIndex використовується для визначення інтерфейсу або куди надсилається звіт. Ось що допоможе вам обернутися навколо USB-запитів. "Прихований вузол" не дозволяє вказувати інтерфейс. На щастя, коли я оглянувся на "show-devices.js", який постачається з бібліотекою "схована вузлом" і видає всі підключені пристрої HID, у нього були різні шляхи для кожного інтерфейсу.

Використовуючи show-devices.js, який постачається з бібліотекою, схованою вузлом. Ви можете знайти, який шлях використовувати в коді, якщо він виявиться іншим

Якщо у вас є якісь інші проблеми зі сценарієм, "usbmon" постачається з Raspbian і дозволяє переглядати всі запити usb, які ви робите. Ось корисне посилання, яке допоможе вам розшифрувати ці запити. (Починається на сторінці 15)

Висновок

Використовувати пістолет як контролер VR, аж ніяк не було просто. Коливання стрільби з гармати є досить сильними, щоб порушити здатність ВМУ точно відслідковувати себе. Використовуючи функцію фільтра низьких частот прослідковування та бортовий малиновий пі, ми змогли подолати цю проблему без шкоди для відстеження чи сили, від якої пістолет вібрує.

Дякуємо за прочитане
@ cohagan154