Skutečné zbraně jako ovladače: Jak přivést cokoli do VR

Jsem Christopher O'Hagan, softwarový inženýr společnosti @ KainosSoftware a pracuji v oddělení Aplikované inovace. Zaměření na pohlcující technologie. Tento blog pojednává o tom, jak jsme nedávno změnili téměř plně fungující pušku na ovladač virtuální reality a jak překonali problémy, které s ním byly.

Nedávno nás oslovil kanadský zákazník, který hledal pomoc při budování realistické střelce jako atrakce pro jejich pasáž. To je součástí rostoucího trendu, který jsme pozorovali, když se pohlcující technologie, jako je VR, používá pro zábavní podniky na místě, jako jsou únikové místnosti a horské dráhy. Přestože vybavení a nastavení může být drahé, je životaschopné kvůli vysokému počtu kroků a novému prostředí, které tyto podniky nabízejí. Skvělým příkladem zábavy na místě je virtuální paintball, kterému se společnosti, jako je „The Void“, daří.

Naší hlavní výzvou pro pohlcující střelce, se kterým jsme pomáhali, bylo vybudovat a využít skutečnou střelnou zbraň ... nebo alespoň něco, co vypadalo a cítilo se jako jedna.

Získání ovladače

Původně jsme věřili, že získání zdroje pro správce bude obtížné. Natáhli jsme se k místnímu dodavateli vzduchových měkkých zbraní Gear of War. Naše požadavky byly:

  • Replika vzduchem měkké pušky, která vypadala, cítila a vážila se jako skutečná puška
  • Zbraň, která by při vystřelení produkovala realistický zpětný ráz
  • Spoušť a bezpečnost, které byly zapojeny, abychom je mohli použít pro vstupy naší simulace

Mysleli jsme si, že to bude hodně žádat, ale překvapilo nás, že se jim to zdálo normální. Udělali spoustu rekvizit pro TV a Films, takže dostali podivné žádosti. Poté jsme použili namontovaný sledovač Vive ke sledování zbraně ve VR.

Nastavení ovladače

Zde jsme zažili náš hlavní problém, vibrace: Tento problém byl způsoben realistickým zpětným rázem naší zbraně. Protože Vive Tracker používá IMU (inerciální pohybové jednotky) pro sledování na vysoké frekvenci, a Vive lighthouse systém pro sledování na relativně nižší frekvenci a pro korekci driftu. IMU pracují tak, že měří zrychlení v každé ose a poté vypočítají posun z tohoto měření. Když jsou IMU agresivně vibrovány, například když jsou namontovány na realisticky palnou zbraň, nemohou přesně sledovat. To byl problém.

Protože nejsme odborníci na vibrace, pokusili jsme se problém vyřešit, ale nedosáhli jsme žádného pokroku. Poté jsme se rozhodli vytvořit reddit příspěvek na r / Vive. Reakce komunity byla nápomocná a opravovala některé jednoduché věci, které nám chyběly, například když byl tracker příliš daleko po zábradlí. K našemu překvapení nás HTC kontaktoval ohledně projektu, který projevil zájem o to, co jsme se snažili dělat. Měli beta verzi firmwaru Vive Tracker, která by mohla pomoci, dolní propust pro IMU, kterou nám dali.

Graf normálního vstupu versus vstupu po použití dolního propusti

Nízkopásmový filtr lze nakonfigurovat prostřednictvím rozhraní USB HID. Podařilo se nám odeslat zprávy „0xB3“, které odesílají základní informace o používaném zařízení a konfiguraci dolního průchodu, z MacBooku do Trackeru se správným nastavením, aby dostatečně tlumily vibrace. Dalším krokem bylo odeslání zprávy o funkcích, která nám umožňuje komunikovat změny v nastavení a ovládat HID zařízení, do Trackeru z malinového pi, protože jsme potřebovali něco, co by se vešlo do náboje zbraně, aby uživatel nemohl podívejte se na zapojení.

Dolní propust

Toto jsou kroky k nastavení Raspberry Pi pro tento druh projektu

  • Nainstalujte raspbian na malinový pi
  • Aktualizujte verzi „Node.js“ pi
  • Nainstalujte do svého projektu knihovnu „node-hid“, kde najdete konkrétní pokyny, jak to udělat na Pi
  • Přidejte do udev soubor nazvaný `60-HTC-Vive-perms.rules` s tímto řádkem
KERNEL == "hidraw *", SUBSYSTEM == "hidraw", ATTRS {idVendor} == "28de", ATTRS {idProduct} == "2022", TAG + = "uaccess"

Problém, který můžete mít, je, že node-hid používá nesprávnou hodnotu wIndex, v tomto případě se wIndex používá ke specifikaci rozhraní nebo k odeslání sestavy. Zde je něco, co vám pomůže získat hlavu při řešení požadavků USB. „Uzel skrytý“ neumožňuje určit rozhraní. Naštěstí, když jsem se ohlédl zpět na „show-devices.js“, která přichází s knihovnou „node-hid“ a vydává všechna připojená HID zařízení, měla pro každé rozhraní odlišné cesty.

Používání show-devices.js, které je součástí knihovny uzlů. Můžete najít, kterou cestu použít v kódu pro případ, že by se zdálo jinak

Pokud máte se skriptem nějaké další problémy, „usbmon“ přichází s Raspbian a umožňuje vám zobrazit všechny usb žádosti. Zde je užitečný odkaz, který vám pomůže tyto požadavky dekódovat. (Začíná na straně 15)

Závěr

Použití pistole jako VR ovladače nebylo v žádném případě snadné. Vibrace střelby z pistole jsou dostatečně silné, aby narušily schopnost IMU přesně se sledovat. Pomocí funkce dolní propusti trackeru a palubního malinového pi jsme dokázali tento problém překonat, aniž bychom ohrozili sledování nebo sílu, při které zbraň vibruje.

Děkuji za přečtení
@ cohagan154