Истински оръжия като контролери: Как да внесем нещо в VR

Аз съм Кристофър О'Хаган, софтуерен инженер в @KainosSoftware и работя в отдела за приложни иновации. Фокусиране върху потапящи технологии. Този блог е за това как наскоро превърнахме почти напълно функционираща пушка в контролер за виртуална реалност и как преодоляхме проблемите, които идваха с нея.

Наскоро се обърнахме към канадски клиент, който търси помощ за изграждането на реалистичен стрелец като атракция за аркадата им. Това е част от нарастващата тенденция, която наблюдаваме, когато потапяща технология като VR се използва за развлекателни предприятия на място, като например стаи за бягство и влакчета. Макар че оборудването и настройката могат да бъдат скъпи, то е жизнеспособно поради високия крак и нова среда, предлагана от тези предприятия. Чудесен пример за забавление на място е виртуален пейнтбол, който компании като „The Void“ успяха да направят.

Основното ни предизвикателство за потапящия стрелец, на когото помагахме, беше да създадем и използваме действително огнестрелно оръжие ... или поне нещо, което изглеждаше и се чувстваше като едно.

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

Първоначално вярвахме, че намирането на контролер ще бъде трудно. Свързахме се с местен доставчик на въздушно меко оръжие Gear of War. Нашите изисквания бяха:

  • Реплика с въздушна мека пушка, която изглеждаше, усещаше и беше претеглена като истинска пушка
  • Пистолет, който при изстрел би произвел реалистичен удар
  • Спусък и безопасност, които бяха окабелени, така че да можем да ги използваме за входовете на нашата симулация

Мислехме, че това ще иска много, но бяхме изненадани от факта, че това им се струва нормално. Те направиха много реквизити за телевизията и филмите, така че получиха по-странни заявки. След това използвахме монтиран Vive tracker за проследяване на пистолета в VR.

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

Това е мястото, където изпитахме основния си проблем, вибрации: Проблемът беше причинен от реалистичния обрат на нашия пистолет. Тъй като Vive Tracker използва IMU (инерциални единици за движение) за проследяване на висока честота, а системата Vive фар за проследяване на сравнително по-ниска честота и за корекция на дрейфа. IMU работят чрез измерване на ускорението във всяка ос, след което изчисляват изместване от това измерване. Когато IMU са вибрации агресивно, например когато са монтирани към реалистично стрелящи оръжия, те не са в състояние да проследят точно. Това беше проблем.

Тъй като не сме експерти по вибрациите, направихме няколко опита да разрешим проблема, но не постигнахме голям напредък. След това решихме да направим Reddit публикация към r / Vive. Отговорът на общността беше полезен, като коригирахме някои прости неща, които пропуснахме, като например, че тракерът е твърде далеч нагоре по железницата. За наша изненада HTC се свърза с нас относно проекта, който проявява интерес към това, което се опитваме да направим. Те имаха бета версия на фърмуера Vive Tracker, който можеше да помогне, нискочестотен филтър за IMU, който ни предоставиха.

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

Нискочестотният филтър може да бъде конфигуриран чрез USB HID интерфейс. Успяхме да изпратим отчети „0xB3“, който изпраща основна информация за използваното устройство, както и конфигурацията с нисък пропуск, от MacBook до Tracker с правилните настройки, за да заглуши достатъчно вибрациите. Следващата стъпка беше да изпратим отчета за характеристиките, който ни позволява да съобщаваме промените в настройките, както и да контролираме HID устройства, до Tracker от малинов пи, тъй като ни трябваше нещо, което може да се побере в патрона на пистолета, така че потребителят да не може виж окабеляването

Нискочестотен филтър

Това са стъпките за настройка на Raspberry Pi за този вид проект

  • Инсталирайте raspbian на малината pi
  • Актуализирайте 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 контролер в никакъв случай не беше лесно. Вибрациите при стрелба на пистолета са достатъчно силни, за да нарушат способността на IMU за точното проследяване на себе си. Използвайки нискочестотния филтър на Tracker и бордовия малинов пи, успяхме да преодолеем този проблем, без да компрометираме проследяването или силата, с която пистолетът вибрира.

Благодаря за четенето
@ cohagan154