真正的枪手作为控制器:如何在VR中获得一切

我是@KainosSoftware的软件工程师Christopher O'Hagan,我在应用创新部门工作。 专注于沉浸式技术。 该博客介绍了我们最近如何将几乎功能齐全的步枪变成虚拟现实控制器,以及如何解决随之带来的问题。

最近有一位加拿大客户与我们联系,该客户正在寻求帮助,以建造一个逼真的射手作为他们街机的吸引力。 这是增长趋势的一部分,我们已经看到像VR这样的沉浸式技术被用于诸如逃生室和过山车之类的现场娱乐业务。 设备和装置虽然昂贵,但由于这些公司提供的高流量和新颖的环境而有利可图。 虚拟娱乐彩弹是现场娱乐的一个很好的例子,它由The Void等公司生产。

对于我们所帮助的身临其境的射手,我们面临的最大挑战是制造和使用真正的枪支……或至少看起来和感觉上像一个枪支。

获取控制器

我们原本以为很难获得控制器。 我们联系了当地的软武器供应商,战争机器。 我们的要求是:

  • 看起来像是真正的步枪,看上去,感觉和重量都较轻的气步枪
  • 发射时会产生真实后坐力的武器
  • 触发和安全接线,以便我们可以将其用作模拟的输入

我们以为这会问很多问题,但对他们来说这似乎很正常感到惊讶。 他们为电视和电影制作了许多道具,因此他们提出了更陌生的要求。 然后,我们使用安装的Vive跟踪器在VR中跟踪枪支。

设置控制器

这是我们遇到的主要问题,即振动:问题是由我们武器的现实后坐力引起的。 因为Vive Tracker使用IMU(惯性运动单元)进行高频跟踪,而Vive Lighthouse系统则使用相对较低的频率进行跟踪并进行漂移校正。 IMU通过测量每个轴上的加速度,然后从该测量值计算位移来工作。 当IMU剧烈振动时,例如 B.如果将它们安装在逼真的射击武器上,它们将无法准确跟踪。 那是个问题。

由于我们不是振动方面的专家,因此我们尝试了一些方法来解决该问题,但进展甚微。 然后,我们决定向r / Vive发送一个reddit帖子。 社区的回应很有帮助。 我们修复了一些我们忽略的简单问题,例如跟踪器在轨道上的位置过高。 令我们惊讶的是,HTC与该项目取得了联系,并对我们想做的事情表现出了兴趣。 他们拥有Beta版本的Vive Tracker固件,可以帮助他们为我们提供的IMU创建低通滤波器。

正常输入与使用低通滤波器后的输入图

可以通过USB-HID接口配置低通滤波器。 我们能够发送0xB3报告,该报告发送有关正在使用的设备的基本信息,以及从MacBook到跟踪器的低通配置,并具有正确的设置以充分抑制振动。 下一步是发送功能报告,这将使我们能够将设置的更改以及对HID设备的控制从Raspberry Pi发送到跟踪器,因为我们需要可以装在枪弹中的东西用户看不到接线。

低通滤波器

这些是为此类项目设置Raspberry Pi的步骤

  • 在Raspberry Pi上安装Raspberry
  • 更新Pi版本的“ Node.js”
  • 在您的项目中安装“ node-hid”库以获取特定说明
  • 在udev中,在此行添加一个名为“ 60-HTC-Vive-perms.rules”的文件
内核==“ hidraw *”,子系统==“ hidraw”,ATTRS {idVendor} ==“ 28de”,ATTRS {idProduct} ==“ 2022”,TAG + =“ uaccess”

潜在的问题是节点隐藏使用了错误的索引值。 在这种情况下,索引用于标识接口或发送报告。 以下是一些熟悉USB请求的知识。 您不能使用“ Node-Hid”指定接口。 幸运的是,“ node-hid”库附带的“ show-devices.js”文件可显示所有连接的HID设备,每个接口具有不同的路径。

使用node-hid库随附的show-devices.js文件。 您可以找到代码中使用的路径,以防它看起来有所不同

如果脚本有其他问题,Raspbian随附了“ usbmon”,您可以查看正在发出的任何USB请求。 这是一个有用的链接,可用于解密这些要求。 (从第15页开始)

结论

使用枪支作为VR控制器绝非易事。 枪击产生的振动足够强,足以干扰IMU精确跟踪自身的能力。 使用跟踪器的低通滤波器和内置的Raspberry Pi,我们可以解决此问题,而不会影响跟踪或喷枪振动的力。

感谢您阅读@ cohagan154