适用于 Linux 的 AR&VR
一个快速发展并变得越来越流行的计算领域是虚拟现实和增强现实。 谢谢 阀门 Linux 下完全支持 HTC 头戴式耳机,感谢社区开发人员,我们也在努力支持 眼罩 Linux下的耳机。 在这次采访中,Christian Schaller 与 扬·施密特 他正在对 Oculus Rift VR 耳机的驱动程序进行逆向工程。 他们谈论了 Linux 下 VR 的一般状态,Jan 的使用 Fedora 工作站,以及他对他的驱动程序的具体工作。
Christian Schaller:嗨,Jan,告诉我们一些关于你自己的事情,比如你以什么为生,你是如何进入 Linux 的,以及 Fedora 工作站?
Jan Schmidt:我从事 GStreamer 多媒体框架的工作,我从 2003 年就开始参与其中。
我和一些朋友一起经营一家名为 中心的,我们帮助人们和公司建立多媒体项目和产品。 我们使用该咨询作为资助上游开发的一种方式 GStreamer,以及其他取决于我们个人兴趣的开源项目。 GStreamer 是一个在世界范围内使用的大型且活跃的项目,因此帮助构建它是非常有益的。
我在 1995 年上大学时第一次安装了 Linux。 从那时起,它一直是我的主要操作系统。 多年来我使用了很多发行版,但最终选择了 Fedora Linux 用于我的主工作站。 它集成(并且经常驱动)正在改变 Linux 桌面工作方式的项目——比如 系统 和 管线,并在保持了解这些发展的最新情况之间取得了很好的平衡,而不必处理自己编译所有内容的不稳定性。
Christian Schaller:所以告诉我们一些关于你的 Fedora 工作站设置? 使用任何特殊工具或配置?
Jan Schmidt:我使用了一个相当标准的 Fedora 工作站。 它启用了 rpmfusion,因为我需要 Fedora 不能在上游分发,我还有一些从源代码编译的其他东西——用于 VR 开发和机器学习的包,这些包没有被打包 Fedora 然而。
Christian Schaller:那么您正在领导 Oculus Rift 耳机的 Linux 驱动程序的开发,是什么让您决定接手该项目?
Jan Schmidt:我一直希望能够在我的 Linux 计算机上做我在其他平台上可以做的所有事情。 我在 2016 年底拿到了最初的 Oculus Rift CV1。当时,人们仍然希望 Oculus 会发布 Linux 支持,但随着时间的推移,这种可能性消失了。 因此,Linux 人员做了我们在那种情况下一直在做的事情,并在没有供应商帮助的情况下开始逆向工程驱动程序支持。
Philipp Zabel 和 OpenHMD 项目中的其他人一直致力于支持早期的 Oculus DK1 和 DK2 开发耳机,并将其扩展到还包括对消费者 CV1 的支持——但驱动程序是 3DOF(这意味着它只支持从固定头部位置),并且不包括(当时)新的触摸手控制器。 Philipp 做了一堆 USB 协议检查并计算出与设备通信的细节。
我在 2019 年初开始参与,并开始使用 Philipp 的代码,并使用它将对 Touch 控制器的 3DOF 支持添加到现有的 OpenHMD 驱动程序中。 在那之后,我开始研究如何进行完整的位置跟踪,并从那时起一直将其作为我的周末激情项目。 我真的不知道我在做什么!
2020 年,我做了一个简短的旁观,当新的 Oculus Rift S 耳机问世时,我自己盯着 USB 数据包跟踪,记录了协议并为该耳机实现了 3DOF 驱动程序。
Christian Schaller:请告诉我们一些关于 Linux atm 下 VR/AR 支持的总体情况?
Jan Schmidt:这是一个非常有趣的领域,正在发生很多事情。 在一个明显的层面上,有一些耳机可以开箱即用地与 Linux 和 SteamVR 一起使用——HTC Vive 和 Valve Index 硬件。 除此之外,还有一些项目旨在为更广泛的硬件实现开放驱动程序,让我们做的不仅仅是玩游戏(当然人们也想这样做!)
在某些时候,我希望对虚拟现实和增强现实耳机的支持能够像现在的 2D 桌面一样在 Linux 上成为不可或缺的一部分。 Windows 10 已经为 Windows Mixed Reality 耳机内置了该功能。 在 Linux 上,有多个项目正在朝着这个目标努力,但主要是在后台——它们还没有出现在发行版中。
这是一项艰巨的任务,需要从内核向上的整个软件堆栈进行更改。
为了 example,为了让位置跟踪与多个相机一起工作,我必须修复 USB3 堆栈中错误计算可用带宽的错误。 内核必须学会识别连接的显示器何时属于头戴式显示器,这样 X 服务器和 Wayland 就不会尝试将桌面扩展到它上面,就好像它是一个新显示器一样。
这些显示服务器获得了“出租”显示设备的能力——移交连接的显示器,以便 VR/AR 软件可以直接控制和输出。 这是驱动具有低延迟和准确定位的 VR/AR 耳机所需的精确时间。
在那个舞台上,有 莫纳多项目,它提供了一个 OpenXR 运行时和合成器。 作为跨平台 VR/AR 应用程序的标准 API,这非常重要。 将其视为 VR 耳机的 X 服务器。
OpenHMD 等项目, 自由生存 和 psmoveapi 正在实施驱动程序以与不同的 VR 耳机通话。 这就是我正在为 CV1 提供位置跟踪支持的地方。
xrdesktop 和 模拟VR 正在开发 3D 桌面体验,以获取传统应用程序并在 3D 显示器中使用它们。
有 星尘XR, 北极星计划 和 伊利克斯 致力于增强现实作品的项目——比如了解周围的世界,以便将计算机生成的元素合并到其中。
在应用层面, Blender 3D建模软件 和 Godot开源游戏引擎 支持 OpenXR 输出。
Christian Schaller:从 Oculus 获得任何反馈/Facebook 关于你的工作? 我的意思是我记得注册了他们的 Kickstarter,他们确实承诺支持 Linux,但过了一会儿就安静了。
简·施密特:一点也不。 我怀疑 Rift S 是我们从 Oculus 看到的最后一款 PC 耳机。 像 Quest 这样的独立耳机对他们来说有更多的价值,他们可以控制和监控整个用户体验,我认为这就是他们未来努力的方向。 借助 Quest Link 电缆,以及从 PC 无线流式传输 VR 的能力不断增强,它们仍然可以支持更高端的渲染,而不会失去这种控制。
Christian Schaller:您在 VR 方面的工作进展如何?
Jan Schmidt:我维护一个 fork 头显 在 https://github.com/thaytan/OpenHMD/ 我正在为 CV1 耳机提供位置跟踪支持。 目前,这种跟踪“通常有效”——您可以使用头显和控制器通过 SteamVR-OpenHMD 包装器在 SteamVR 中玩游戏,或通过 Monado 使用任何 OpenXR 应用程序。
我现在关注的是修复控制器上的跟踪故障。 根据你握持控制器的方式,计算机视觉算法可能会误解它们的姿势,或者它可能会混淆哪个控制器是哪个控制器,而你的手最终会在 VR 世界中交换。
当我对 CV1 的运行情况感到满意时,我想解决对 Oculus Rift S 和 Windows Mixed Reality (WMR) 头显等内向外头显的位置跟踪支持。 我还拥有一台 HP Reverb G2(它是一款 WMR 耳机),并在该耳机上做了一些工作,以获得具有正确渲染的 3DOF 显示。
由内而外的跟踪与我一直在研究的由外而内的跟踪形成对比。 与观察用户四处移动的固定摄像头不同,inside-out 头显在头显上安装了摄像头,可以在用户移动时观察世界,挑战在于使用这些观察结果使用 SLAM 和 VIO 算法计算用户位置和姿势。 第二部分是使用相同的移动摄像机跟踪手控制器。 对于这部分,我希望建立在我已经为 CV1 编写的控制器跟踪之上。
Christian Schaller:如果人们想帮助 Linux 上的 VR,有哪些简单易行的参与方式? 例如,是否有一些包装可以通过包装让您的生活更轻松 Fedora? 您和 VR 社区的其他成员是否有任何特定的 IRC 频道或类似频道?
Jan Schmidt:我现在主要使用 SteamVR 进行测试,因为它是一个成熟的平台,可以通过 Proton/WINE 兼容层从 Windows 访问许多 VR 游戏。 我真正想要的应用程序——增强现实交互和虚拟桌面环境仍然在一定程度上出现。
在什么方面 Fedora 可以为这些做好准备——打包诸如 xr-hardware udev 规则集和 Monado 依赖项之类的东西将是一个很好的基础。
对于开发人员讨论,libera.chat 上的#openhmd IRC 频道和 Monado discord 是寻找从事这些工作的人的好地方。
Christian Schaller:有什么喜欢的 VR 应用或游戏吗?
Jan Schmidt:这有点陈词滥调——但我真的很喜欢用 击败军刀. 这是对在真正快速运动下跟踪效果如何的强大测试。 为了测试精细动作,我使用 半条命:爱丽克斯,其中有很多需要稳定的手的交互。
本次采访由 克里斯蒂安·FK Schaller,一定要关注我 Twitter 了解更多 linux 更新和采访。 还要确保遵循 简·施密特在推特上 了解他的最新作品 VR 和 GStreamer。