Armas reales como controladores: cómo llevar cualquier cosa a la realidad virtual

Soy Christopher O'Hagan, ingeniero de software en @KainosSoftware y estoy trabajando en el departamento de Innovación Aplicada. Centrándose en tecnologías inmersivas. Este blog trata sobre cómo recientemente convertimos un rifle casi completamente funcional en un controlador de Realidad Virtual y cómo superamos los problemas que conllevaba.

Recientemente nos ha contactado un cliente canadiense que busca ayuda para construir un juego de disparos realista como una atracción para su sala de juegos. Esto es parte de una tendencia creciente que hemos observado en los casos en que se utiliza tecnología inmersiva, como la realidad virtual, para negocios de entretenimiento en el lugar, como salas de escape y montañas rusas. Si bien el equipo y la configuración pueden ser costosos, es viable debido a la gran cantidad de pisadas y los nuevos entornos que ofrecen estas empresas. Un gran ejemplo de entretenimiento en el lugar es el paintball virtual que empresas como "The Void" han logrado hacer.

Nuestro principal desafío para el tirador inmersivo con el que estábamos ayudando era construir y utilizar un arma de fuego real ... o al menos algo que se viera y se sintiera como tal.

Conseguir el controlador

Originalmente creíamos que obtener un controlador sería difícil. Nos comunicamos con un proveedor local de armas de aire suave, Gear of War. Nuestros requisitos fueron:

  • Una réplica de rifle de aire suave que se veía, sentía y pesaba como un verdadero rifle
  • Un arma que, cuando se dispara, produciría un retroceso realista.
  • Un gatillo y seguridad que fueron cableados para que podamos usarlos para las entradas de nuestra simulación

Pensamos que esto sería pedir mucho, pero nos sorprendió el hecho de que esto les parecía normal. Han hecho muchos accesorios para TV y películas, por lo que recibieron solicitudes más extrañas. Luego usamos un rastreador Vive montado para rastrear el arma en VR.

Configurar el controlador

Aquí es donde experimentamos nuestro problema principal, las vibraciones: el problema fue causado por el retroceso realista de nuestro arma. Dado que Vive Tracker utiliza IMU (unidades de movimiento inercial) para el seguimiento a una frecuencia alta, y el sistema de faro Vive para el seguimiento a una frecuencia comparativamente más baja y para la corrección de la deriva. Las IMU funcionan midiendo la aceleración en cada eje y luego calculando el desplazamiento de esa medición. Cuando las IMU vibran agresivamente, como cuando se montan en un arma de disparo realista, no pueden rastrear con precisión. Esto fue un problema.

Como no somos expertos en vibración, hicimos algunos intentos para resolver el problema pero no progresamos mucho. Luego decidimos hacer una publicación de reddit en r / Vive. La respuesta de la comunidad fue útil, corrigiendo algunas cosas simples que pasamos por alto, como que el rastreador estaba demasiado lejos. Para nuestra sorpresa, HTC nos contactó acerca del proyecto mostrando interés en lo que estábamos intentando hacer. Tenían una versión beta del firmware Vive Tracker que podría ayudar, un filtro de paso bajo para la IMU, que nos dieron.

Gráfico de entrada normal versus entrada después del uso de un filtro de paso bajo

El filtro de paso bajo podría configurarse a través de la interfaz USB HID. Pudimos enviar informes "0xB3", que envían información básica sobre el dispositivo que se está utilizando, así como la configuración de paso bajo, desde un MacBook al Tracker con la configuración correcta para amortiguar suficientemente las vibraciones. El siguiente paso fue enviar el informe de características, que nos permite comunicar los cambios en la configuración, así como controlar los dispositivos HID, al Tracker desde una frambuesa pi ya que necesitábamos algo que pudiera caber dentro del cartucho de la pistola para que el usuario no pudiera Ver el cableado.

Filtro de paso bajo

Estos son los pasos para configurar Raspberry Pi para este tipo de proyecto

  • Instalar raspbian en la frambuesa pi
  • Actualice la versión de pi de "Node.js"
  • Instale la biblioteca "node-hid" en su proyecto, para obtener instrucciones específicas para hacerlo en el pi, consulte aquí
  • Agregue un archivo en udev llamado `60-HTC-Vive-perms.rules` con esta línea
KERNEL == "hidraw *", SUBSYSTEM == "hidraw", ATTRS {idVendor} == "28de", ATTRS {idProduct} == "2022", TAG + = "uaccess"

Un problema que puede tener es que node-hid está utilizando un valor incorrecto de wIndex, en este caso wIndex se utiliza para especificar la interfaz o el lugar donde se envía el informe. Aquí hay algo para ayudarlo a entender las solicitudes de USB. "Node-hid" no le permite especificar la interfaz. Afortunadamente, cuando volví a mirar "show-devices.js", que viene con la biblioteca "node-hid" y genera todos los dispositivos HID conectados, tenía diferentes rutas para cada interfaz.

Usando show-devices.js, que viene con la biblioteca node-hid. Puede encontrar qué ruta usar en el código en caso de que parezca diferente

Si tiene otros problemas con el script, ‘usbmon’ viene con Raspbian y le permite ver todas las solicitudes usb que se realizan. Aquí hay un enlace útil para ayudarlo a decodificar esas solicitudes. (Comienza en la página 15)

Conclusión

Usar una pistola como controlador de realidad virtual no fue de ninguna manera fácil. Las vibraciones del disparo de la pistola son lo suficientemente fuertes como para interrumpir la capacidad de las IMU de rastrearse con precisión. Al utilizar la función de filtro de paso bajo del rastreador y un raspberry pi incorporado, pudimos superar este problema sin comprometer el seguimiento o la fuerza a la que vibra la pistola.

Gracias por leer
@ cohagan154