Arme reale ca controlori: Cum să aducem orice în VR

Sunt Christopher O’Hagan, inginer software la @KainosSoftware și lucrez în departamentul de inovație aplicată. Concentrarea pe tehnologii imersive. Acest blog este despre modul în care recent am transformat o pușcă funcționând aproape complet într-un controler de realitate virtuală și cum am depășit problemele care au venit cu acesta.

Am fost recent abordate de un client canadian care caută ajutor pentru construirea unui shooter realist ca atracție pentru arcada lor. Aceasta este o parte a unei tendințe în creștere pe care am observat-o unde tehnologia imersivă, cum ar fi VR, este folosită pentru întreprinderile de divertisment din locație, cum ar fi camerele de evacuare și montele montane. În timp ce echipamentul și configurația pot fi costisitoare, acesta este viabil datorită gradului ridicat și a mediilor noi oferite de aceste companii. Un excelent exemplu de divertisment în locație este paintball virtual pe care companii, precum „The Void” au reușit să le facă.

Provocarea noastră principală pentru trăgătorul cu scufundare cu care ne ajutam era să construim și să folosim o armă de foc efectivă ... sau cel puțin ceva care arăta și se simțea ca unul.

Obținerea controlerului

Inițial, credeam că aprovizionarea unui controler va fi dificilă. Am ajuns la un furnizor local de arme de aer soft, Gear of War. Cerințele noastre au fost:

  • O replică pușcă moale, care arăta, simțea și era cântărită ca o pușcă adevărată
  • O armă care, atunci când este trasă, ar produce recul realist
  • Un declanșator și siguranță care au fost conectate, astfel încât să le putem folosi pentru intrări ale simulării noastre

Ne-am gândit că asta va cere multe, dar am fost surprinși de faptul că acest lucru li s-a părut normal. Ei au făcut o mulțime de recuzită pentru TV și Filme, astfel încât au primit solicitări mai ciudate. Apoi am folosit un tracker Vive montat pentru a urmări pistolul în VR.

Configurarea controlerului

Aici am experimentat problema noastră principală, vibrațiile: Problema a fost cauzată de reculul realist al pistolului nostru. Întrucât Vive Tracker folosește IMU (unități de mișcare inerțială) pentru urmărirea la o frecvență ridicată, iar sistemul Vive far pentru urmărirea la o frecvență relativ mai mică și pentru corectarea derivării. IMU acționează prin măsurarea accelerației pe fiecare axă, apoi se calculează deplasarea de la acea măsurare. Atunci când IMU-urile vibrează agresiv, cum ar fi atunci când sunt montate pe o armă de tragere realistă, acestea nu sunt în măsură să urmărească cu exactitate. Aceasta a fost o problemă.

Deoarece nu suntem experți în vibrații, am încercat să rezolvăm problema, dar nu am făcut progrese. Am decis apoi să facem o postare reddit pentru a r / Vive. Răspunsul comunității a fost de ajutor, corectând unele chestii simple care ne-au lipsit, cum ar fi următorul fiind prea departe. Spre surprinderea noastră, HTC ne-a contactat în legătură cu proiectul arătând interes pentru ceea ce încercam să facem. Au avut o versiune beta a firmware-ului Vive Tracker, care ar putea ajuta, un filtru de trecere mică pentru IMU, pe care ni l-au oferit.

Grafic de intrare normală versus intrare după utilizarea unui filtru de trecere mică

Filtrul de trecere mică poate fi configurat prin interfața USB HID. Am putut trimite rapoarte „0xB3”, care trimite informații de bază despre dispozitivul folosit, precum și configurația de trecere mică, de la un MacBook la Tracker cu setările potrivite pentru a amortiza suficient vibrațiile. Următorul pas a fost să trimitem raportul de caracteristică, care ne permite să comunicăm modificările în setări, precum și să controlăm dispozitivele HID, către Tracker de la un zmeură pi, deoarece aveam nevoie de ceva care să se potrivească în cartușul pistolului, astfel încât utilizatorul să nu poată vezi cablarea.

Filtru de trecere mică

Aceștia sunt pașii pentru a configura Raspberry Pi pentru acest tip de proiect

  • Instalați raspbian pe zmeura pi
  • Actualizați versiunea pi a „Node.js”
  • Instalați biblioteca „ascuns de noduri” în proiectul dvs., pentru instrucțiuni specifice de a face asta în aspectul pi aici
  • Adăugați un fișier în udev numit `60-HTC-Vive-perms.rules` cu această linie în el
KERNEL == "hidraw *", SUBSYSTEM == "hidraw", ATTRS {idVendor} == "28de", ATTRS {idProduct} == "2022", TAG + = "uaccess"

O problemă pe care o puteți avea este aceea că valoarea wIndex greșită este folosită de nod-hid, în acest caz wIndex este utilizat pentru a specifica interfața sau unde este trimis raportul. Iată ceva care să vă ajute să vă faceți capul în jurul solicitărilor USB. „Ascuns de noduri” nu vă permite să specificați interfața. Din fericire, când m-am uitat înapoi la „show-devices.js”, care vine cu biblioteca „ascunsă cu nodul” și scoate toate dispozitivele HID conectate, avea căi diferite pentru fiecare interfață.

Folosind show-devices.js, care vine cu biblioteca nodului ascunsă. Puteți găsi ce cale să utilizați în cod, în cazul în care acesta pare diferit

Dacă aveți alte probleme cu scriptul, „usbmon” vine cu Raspbian și vă permite să vizualizați toate solicitările usb. Iată un link util pentru a vă ajuta să decodificați aceste solicitări (începe la pagina 15)

Concluzie

Folosirea pistolului ca controler VR nu a fost deloc ușoară. Vibrațiile de tragere a armelor sunt suficient de puternice pentru a perturba capacitatea IMU de a se urmări cu exactitate. Folosind funcția de filtrare a trecerii scăzute a Tracker-ului și o zmeură pi de la bord am putut depăși această problemă fără a compromite urmărirea sau forța cu care pistolul vibrează.

Mulțumesc pentru citit
@ cohagan154