Armas reais como controladores: como trazer algo para a realidade virtual

Sou Christopher O'Hagan, engenheiro de software da @KainosSoftware e trabalho no departamento de Inovação Aplicada. Focando em tecnologias imersivas. Este blog é sobre como recentemente transformamos um rifle quase completamente funcional em um controlador de realidade virtual e como superamos os problemas que o acompanham.

Recentemente, fomos abordados por um cliente canadense que procurava ajuda para criar um jogo de tiro realista como atração para o fliperama. Isso faz parte de uma tendência crescente que observamos em que tecnologias imersivas, como a RV, estão sendo usadas para empresas de entretenimento local, como salas de escape e montanhas-russas. Embora o equipamento e a configuração possam ser caros, é viável devido ao alto número de passos e aos novos ambientes oferecidos por essas empresas. Um ótimo exemplo de entretenimento no local é o paintball virtual que empresas como 'The Void' conseguiram.

Nosso principal desafio para o atirador imersivo com o qual estávamos ajudando era construir e utilizar uma arma de fogo real ... ou pelo menos algo que parecia e parecia um.

Obtendo o controlador

Originalmente, acreditávamos que seria difícil contratar um controlador. Entramos em contato com um fornecedor local de armas leves, Gear of War. Nossos requisitos foram:

  • Uma réplica de espingarda de ar macio que parecia, sentiu e pesava como uma verdadeira espingarda
  • Uma arma que, quando disparada, produziria recuo realista
  • Um gatilho e segurança que foram conectados para que pudéssemos usá-los como entradas de nossa simulação

Achamos que isso seria pedir muito, mas ficamos surpresos com o fato de isso parecer normal para eles. Eles fizeram um monte de adereços para TV e filmes, então receberam pedidos mais estranhos. Em seguida, usamos um rastreador Vive montado para rastrear a arma em VR.

Configurando o Controlador

Foi aqui que experimentamos nosso principal problema, vibrações: o problema foi causado pelo recuo realista de nossa arma. Como o Vive Tracker usa IMUs (unidades de movimento inercial) para rastrear em alta frequência, e o sistema Vive farol para rastrear em uma frequência comparativamente mais baixa e para correção de desvio. As IMUs trabalham medindo a aceleração em cada eixo e calculando o deslocamento a partir dessa medição. Quando as IMUs são vibradas agressivamente, como quando são montadas em uma arma de tiro realista, elas não conseguem rastrear com precisão. Isso foi um problema.

Como não somos especialistas em vibração, fizemos algumas tentativas para resolver o problema, mas não fizemos muito progresso. Decidimos então fazer um post no reddit para o r / Vive. A resposta da comunidade foi útil, corrigindo algumas coisas simples que perdemos, como o rastreador estar muito longe do trilho. Para nossa surpresa, a HTC entrou em contato conosco sobre o projeto, mostrando interesse no que estávamos tentando fazer. Eles tinham uma versão beta do firmware do Vive Tracker que poderia ajudar, um filtro passa-baixo para a IMU, que eles nos deram.

Gráfico da entrada normal versus entrada após o uso de um filtro passa-baixo

O filtro passa-baixo pode ser configurado através da interface USB HID. Conseguimos enviar relatórios '0xB3', que enviam informações básicas sobre o dispositivo sendo usado, bem como a configuração de passa-baixo, de um MacBook para o Tracker com as configurações corretas para amortecer suficientemente as vibrações. O próximo passo foi enviar o relatório de recursos, que nos permite comunicar alterações nas configurações e controlar dispositivos HID, para o Tracker a partir de um pi raspberry, pois precisávamos de algo que pudesse caber dentro do cartucho da pistola para que o usuário não pudesse veja a fiação.

Filtro passa-baixo

Estas são as etapas para configurar o Raspberry Pi para esse tipo de projeto

  • Instale raspbian no raspberry pi
  • Atualizar a versão do pi de "Node.js"
  • Instale a biblioteca "node-hid" em seu projeto, para obter instruções específicas sobre isso no pi, veja aqui
  • Adicione um arquivo no udev chamado `60-HTC-Vive-perms.rules` com esta linha
KERNEL == "hidraw *", SUBSISTEMA == "hidraw", ATTRS {idVendor} == "28de", ATTRS {idProduct} == "2022", TAG + = "uaccess"

Um problema que você pode ter é que o valor errado do wIndex está sendo usado pelo node-hid; nesse caso, o wIndex é usado para especificar a interface ou para onde o relatório é enviado. Aqui está algo para ajudar você a entender as solicitações de USB. 'Node-hid' não permite que você especifique a interface. Felizmente, quando olhei para o 'show-devices.js', que vem com a biblioteca 'node-hid' e gera todos os dispositivos HID conectados, ele tinha caminhos diferentes para cada interface.

Usando o show-devices.js, que acompanha a biblioteca node-hid. Você pode encontrar qual caminho usar no código, caso pareça diferente

Se você tiver outros problemas com o script, o 'usbmon' vem com o Raspbian e permite visualizar todas as solicitações de USB que estão sendo feitas. Aqui está um link útil para ajudá-lo a decodificar essas solicitações (começa na página 15)

Conclusão

Usar uma arma como um controlador de realidade virtual não era nada fácil. As vibrações do disparo das armas são fortes o suficiente para atrapalhar a capacidade da IMU de se rastrear com precisão. Usando o recurso de filtro passa-baixo do Tracker e um raspberry pi integrado, conseguimos superar esse problema sem comprometer o rastreamento ou a força com que a pistola vibra.

Obrigado pela leitura
@ cohagan154