Senjata Nyata sebagai Pengawal: Cara Bawa Apa-apa ke dalam VR

Saya Christopher O'Hagan, seorang jurutera perisian di @KosmosSoftware dan saya bekerja di jabatan inovasi Applied. Memfokuskan pada teknologi Immersive. Blog ini adalah tentang bagaimana kami baru-baru ini menghidupkan senapang hampir berfungsi sepenuhnya ke pengawal Realiti Maya dan bagaimana kami mengatasi masalah yang datang dengannya.

Kami baru-baru ini telah didatangi oleh pelanggan Kanada mencari bantuan membina penembak realistik sebagai daya tarikan untuk arcade mereka. Ini adalah sebahagian daripada trend yang semakin meningkat yang telah kami perhatikan di mana teknologi immersive seperti VR sedang digunakan untuk perniagaan hiburan di lokasi seperti bilik melarikan diri dan roller coaster. Walaupun peralatan dan persediaan boleh mahal, ia adalah berdaya maju kerana persekitaran yang tinggi dan persekitaran novel yang ditawarkan oleh perniagaan ini. Satu contoh hebat dari hiburan di lokasi adalah paintball maya yang mana syarikat, seperti 'The Void' telah berjaya melakukannya.

Cabaran utama kami untuk penembak yang immersive kami membantu adalah untuk membina dan menggunakan senjata api sebenar ... atau sekurang-kurangnya sesuatu yang kelihatan dan dirasakan seperti satu.

Mendapatkan Pengawal

Pada asalnya, kami percaya sumber pengawal akan menjadi sukar. Kami menjangkau pembekal senjata lembut tempatan, Gear of War. Keperluan kami ialah:

  • Rifle senapang lembut yang kelihatan, dirasai dan ditimbang seperti senapang yang sebenar
  • Pistol yang, apabila dipecat akan menghasilkan mundur yang realistik
  • Pencetus dan keselamatan yang disambungkan supaya kami boleh menggunakannya untuk input simulasi kami

Kami fikir ini akan meminta banyak tetapi terkejut dengan hakikat bahawa ini seolah-olah normal kepada mereka. Mereka telah melakukan banyak alat untuk TV dan Filem yang telah menerima permintaan pengganti. Kami kemudian menggunakan tracker Vive yang dipasang untuk mengesan pistol di VR.

Menetapkan Pengawal

Ini adalah di mana kita mengalami masalah utama, getaran: Masalah ini disebabkan oleh penangkapan senjata api yang realistik. Sejak Tracker Vive menggunakan IMU (unit pergerakan inersia) untuk menjejaki pada frekuensi tinggi, dan sistem mercusuar Vive untuk mengesan pada frekuensi yang relatif rendah dan untuk pembetulan drift. IMU berfungsi dengan mengukur percepatan pada setiap paksi kemudian mengira anjakan dari pengukuran itu. Apabila IMU secara agresif bergetar, seperti ketika dipasang pada senjata menembusi secara realistik, mereka tidak dapat mengesan dengan tepat. Ini masalahnya.

Oleh kerana kami bukan pakar dalam getaran, kami membuat beberapa percubaan untuk menyelesaikan masalah ini tetapi tidak banyak membuat kemajuan. Kami kemudian memutuskan untuk membuat jawatan reddit kepada r / Vive. Tanggapan komuniti membantu, membetulkan beberapa perkara mudah yang kita rindukan seperti tracker yang terlalu jauh dari rel. Untuk kejutan kami, HTC menghubungi kami mengenai projek yang menunjukkan minat terhadap apa yang kami cuba lakukan. Mereka mempunyai versi beta dari firmware Vive Tracker yang boleh membantu, penapis lulus rendah untuk IMU, yang mereka berikan kepada kami.

Graf input biasa berbanding input selepas penggunaan penapis pas rendah

Penapis pas rendah boleh dikonfigurasi melalui antara muka USB HID. Kami dapat menghantar laporan '0xB3', yang menghantar maklumat asas mengenai peranti yang digunakan serta konfigurasi lulus yang rendah, dari MacBook ke Tracker dengan tetapan yang tepat untuk melegakan getaran yang cukup. Langkah seterusnya adalah menghantar laporan ciri, yang membolehkan kami untuk menyampaikan perubahan dalam tetapan serta mengawal peranti HID, ke Tracker dari pi raspberry kerana kami memerlukan sesuatu yang boleh muat di dalam kartrij senjata supaya pengguna tidak dapat lihat pendawaian.

Penapis Pas Rendah

Ini adalah langkah-langkah untuk menubuhkan Raspberry Pi untuk projek semacam ini

  • Pasang raspbian pada pi raspberry
  • Kemas kini versi pi 'Node.js'
  • Pasang pustaka 'node-hid' ke dalam projek anda, untuk arahan tertentu untuk melakukan itu di sini
  • Tambah fail dalam udev yang dipanggil `60-HTC-Vive-perms.rules` dengan baris ini di dalamnya
KERNEL == "hidraw *", SUBSYSTEM == "hidraw", ATTRS {idVendor} == "28de", ATTRS {idProduct} == "2022", TAG + = "uaccess"

Satu isu yang boleh anda miliki ialah nilai wIndex yang salah sedang digunakan oleh simpul simpul, dalam kes ini wIndex digunakan untuk menentukan antara muka atau di mana laporan dihantar. Berikut adalah sesuatu untuk membantu mendapatkan kepala anda di sekitar permintaan USB. 'Node-hid' tidak membenarkan anda menentukan antara muka. Nasib baik ketika saya melihat kembali pada 'show-devices.js', yang datang dengan perpustakaan 'simpul simpul' dan mengeluarkan semua peranti HID yang bersambung, ia mempunyai laluan yang berbeza untuk setiap antara muka.

Menggunakan show-devices.js, yang disertakan dengan perpustakaan simpul simpul. Anda boleh mencari laluan mana yang hendak digunakan dalam kod itu sekiranya ia kelihatan berbeza

Jika anda mempunyai sebarang isu lain dengan skrip, 'usbmon' datang dengan Raspbian dan membolehkan anda melihat semua permintaan usb dibuat. Berikut adalah pautan yang berguna untuk membantu anda menyahkod permintaan tersebut. (Bermula pada halaman 15)

Kesimpulannya

Menggunakan pistol sebagai pengawal VR tidak semudah itu. Getaran penembakan senjata cukup kuat untuk mengganggu keupayaan IMU untuk mengesan dengan tepat. Menggunakan ciri penapis lulus rendah Tracker, dan sebuah raspberry pi di atasnya kami dapat mengatasi masalah ini tanpa menjejaki penjejakan atau daya di mana pistol itu bergetar.

Terima kasih untuk membaca
@ cohagan154