Echte wapens als controllers: alles in VR brengen

Ik ben Christopher O'Hagan, een software-ingenieur bij @KainosSoftware en ik werk op de afdeling Toegepaste innovatie. Focus op meeslepende technologieën. Deze blog gaat over hoe we recent een bijna volledig functionerend geweer in een Virtual Reality-controller hebben veranderd en hoe we de bijbehorende problemen hebben overwonnen.

We zijn onlangs benaderd door een Canadese klant die op zoek was naar hulp bij het bouwen van een realistische shooter als attractie voor hun arcade. Dit is een onderdeel van een groeiende trend die we hebben waargenomen waarbij meeslepende technologie zoals VR wordt gebruikt voor entertainmentbedrijven op locatie zoals escape rooms en achtbanen. Hoewel de apparatuur en installatie duur kan zijn, is het levensvatbaar vanwege de grote bezoekersaantallen en nieuwe omgevingen die deze bedrijven bieden. Een goed voorbeeld van entertainment op locatie is virtueel paintball waar bedrijven als 'The Void' in zijn geslaagd.

Onze primaire uitdaging voor het meeslepende schietspel waarmee we hielpen, was om een ​​echt vuurwapen te bouwen en te gebruiken ... of op zijn minst iets dat eruitzag en aanvoelde.

De controller verkrijgen

Oorspronkelijk geloofden we dat het vinden van een controller moeilijk zou zijn. We namen contact op met een lokale leverancier van luchtzacht geweer, Gear of War. Onze vereisten waren:

  • Een replica luchtzacht geweer dat eruitzag, voelde en gewogen was als een echt geweer
  • Een pistool dat, wanneer afgeschoten, een realistische terugslag zou produceren
  • Een trigger en veiligheid die bedraad waren zodat we ze konden gebruiken voor input van onze simulatie

We dachten dat dit veel gevraagd zou worden, maar waren verrast door het feit dat dit normaal voor hen leek. Ze hebben veel rekwisieten gedaan voor tv en films en hadden dus vreemdere verzoeken ontvangen. We gebruikten vervolgens een gemonteerde Vive-tracker om het pistool in VR te volgen.

De controller instellen

Hier hebben we ons belangrijkste probleem, trillingen, ervaren: het probleem werd veroorzaakt door de realistische terugslag van ons pistool. Omdat de Vive Tracker IMU's (traagheidsbewegingen) gebruikt voor het volgen op een hoge frequentie, en het Vive-vuurtorensysteem voor het volgen op een relatief lagere frequentie en voor driftcorrectie. IMU's werken door de versnelling in elke as te meten en vervolgens de verplaatsing uit die meting te berekenen. Wanneer IMU's agressief worden getrild, zoals wanneer ze op een realistisch schietend wapen worden gemonteerd, kunnen ze niet nauwkeurig volgen. Dit was een probleem.

Omdat we geen experts in trillingen zijn, hebben we een aantal pogingen gedaan om het probleem op te lossen, maar hebben we niet veel vooruitgang geboekt. We hebben toen besloten om een ​​reddit-bericht te plaatsen bij r / Vive. De reactie van de gemeenschap was nuttig en corrigeerde enkele eenvoudige dingen die we misten, zoals de tracker die te ver op de rails staat. Tot onze verbazing nam HTC contact met ons op over het project dat interesse toonde in wat we probeerden te doen. Ze hadden een bètaversie van de Vive Tracker-firmware die kon helpen, een laagdoorlaatfilter voor de IMU, die ze ons gaven.

Grafiek van normale invoer versus invoer na het gebruik van een laagdoorlaatfilter

Het laagdoorlaatfilter kan worden geconfigureerd via de USB HID-interface. We konden ‘0xB3’ -rapporten verzenden, die basisinformatie over het gebruikte apparaat en de low pass-configuratie verzenden, van een MacBook naar de Tracker met de juiste instellingen om de trillingen voldoende te dempen. De volgende stap was om het functierapport, waarmee we veranderingen in instellingen kunnen communiceren en HID-apparaten kunnen besturen, vanaf een frambozen-pi naar de Tracker te sturen, omdat we iets nodig hadden dat in de patroon van het pistool kon passen, zodat de gebruiker niet kon zie de bedrading.

Laagdoorlaatfilter

Dit zijn de stappen om de Raspberry Pi voor dit soort projecten in te stellen

  • Raspbian installeren op de Raspberry Pi
  • Update pi's versie van ‘Node.js’
  • Installeer de ‘node-hid’ bibliotheek in uw project, voor specifieke instructies om dat te doen op de pi-look hier
  • Voeg een bestand in udev toe met de naam `60-HTC-Vive-perms.rules` met deze regel erin
KERNEL == "hidraw *", SUBSYSTEM == "hidraw", ATTRS {idVendor} == "28de", ATTRS {idProduct} == "2022", TAG + = "uaccess"

Een probleem dat u kunt hebben, is dat de verkeerde wIndex-waarde wordt gebruikt door node-hid, in dit geval wordt wIndex gebruikt om de interface op te geven of waar het rapport naartoe wordt verzonden. Hier is iets om u te helpen bij USB-verzoeken. Met ‘Node-hid’ kunt u de interface niet opgeven. Gelukkig toen ik terugkijkde op de ‘show-devices.js’, die wordt geleverd met de ‘node-hid’ bibliotheek en alle aangesloten HID-apparaten uitvoert, had het verschillende paden voor elke interface.

De show-devices.js gebruiken, die wordt geleverd met de node-hid-bibliotheek. U kunt vinden welk pad u in de code moet gebruiken als het anders lijkt

Als u andere problemen met het script heeft, wordt ‘usbmon’ geleverd met Raspbian en kunt u alle usb-aanvragen bekijken die worden gedaan. Hier is een handige link om u te helpen die verzoeken te decoderen (begint op pagina 15)

Gevolgtrekking

Het gebruik van een pistool als VR-controller was zeker niet eenvoudig. De trillingen van het afvuren van het pistool zijn sterk genoeg om het vermogen van de IMU om zichzelf nauwkeurig te volgen te verstoren. Met behulp van de laagdoorlaatfilterfunctie van de Tracker en een ingebouwde frambozenpi konden we dit probleem oplossen zonder de tracking of de kracht waarmee het pistool trilt in gevaar te brengen.

Bedankt voor het lezen
@ cohagan154