深入探索Oculus Insight如何提高追踪保真度,确保内向外追踪系统性能
(映维网 2019年09月24日)Constellation是Oculus研发的追踪系统。日前,负责AR/VR设备输入追踪的Facebook工程经理安德鲁·梅利姆撰文介绍了他们是如何用基于Constellation追踪的控制器来提高交互保真度。下面是映维网的具体整理:
我们的计算机视觉工程师团队一直在努力为Oculus Quest和Rift S实现高保真的交互。我们已经证明Constellation可以为Oculus Rift提供出色的用户体验,但Quest和Rift S有着完全不同的传感配置,所以我们需要从零开始重新构想堆栈。由于将摄像头是嵌入至头显而非摆在外部桌面,所以红外LED的检测和追踪变得更加困难。再加上控制器追踪圆环容易被遮挡或离开头显摄像头视场,问题正在成倍地增加。
通过Oculus Quest和Rift S的最新追踪性能更新,我们解决了内线外追踪系统所固有的众多挑战,尤其是对于控制器而言。所述更新与Rift S的1.39版本和Quest的v7版本一起发布。在接下来的博文中,我们将深入探索如何提高追踪保真度,并确保内向外追踪系统能够满足VR内容的需求。
1. 挑战
驱动Constellation追踪的关键是对摄像头图像中的红外LED的检测和三角测量,而它们有着极短的曝光时间。对于每个控制器,追踪系统都会尝试求解3D姿态,即3D位置与方向。在每一帧内,系统执行以下步骤:
- 搜索摄像头图像中的红外光量。
- 确定图像投影与基础控制器3D模型之间的匹配策略。
- 计算控制器相对于头显的3D姿态并融合惯性数据。
为了支持系统获取足够数量的约束条件来求解位置和方向,我们需要最低数量的观察值。反过来,我们在追踪Quest控制器时遇到的其中一个主要问题是,任何给定摄像头图像中可见的LED数量都很少。由于较低的摄像头分辨率和各种其他限制,Quest控制器搭载的LED数量较少(15个,而Rift Touch控制器有22个)。下面这个事实令事情变得更加复杂:多个摄像头一次可以看到的控制器姿态很少,而Rift则通常一次可由两个或三个摄像头感知控制器,具体取决于你的设置。
在本文中,我们将重点介绍如何改进检测和分割算法,从而构成Constellatio追踪管道的第一步。在检测到的blob中获得更高的精度,减少误报,并扩大检测算法的工作范围是改善控制器追踪的关键一步。
2. 全新的blob分割
Blob分割是一个相对简单的概念。对于每个图像,我们要标识亮像素(blob)的连续区块,从而确定LED的潜在位置。但这隐藏了一个非常具有挑战性的技术问题:如何识别与LED相对应的blob(真报),并忽略与场景中其他明亮元素相对应的blob(误报)。
如果我们简单地获取红外光的每个点,将控制器放置在具有许多光源或反射的环境中将变得非常困难。对于知道要拒绝和忽略哪些光源,这与知道要用于求解控制器姿态的光源一样重要。所以,大量的边缘情况,约束和试探法将用于帮助减少不太可能来自控制器的blob。
改善追踪的第一步始于LED blob分割算法的质量。这涵盖了三个主要技术问题:
- 能够检测合并到单个双态blob中的LED blob,而不是将它们丢弃。
- 扩展blob检测以支持多个图像金字塔,从而确保我们能够追踪近距离的blob。
- 允许检测器检测到模糊的blob(距离摄像头很远的位置)
当用户以一臂距离握持控制器时,靠近用户的LED可能会显示为一个连续blob,从而造成LED位置的错误检测。错误计算的LED位置会大大增加姿态估计的误差,并导致糟糕的追踪效果,或者是追踪丢失。通过利用围绕计算的新启发式方法,blob像素与围绕所述区域计算的边界框的大小之比,我们发现我们可以非常准确地检测到是否存在两个与摄像头成高入射角的不同blob。这为检测许多常见的姿态提供了帮助。
如下图所示,图像是从远方位置捕获,未精确检测到下方的LED,而且来自上方两个LED合并为一个blob(单个红色质心)。使用我们的新方法,我们可以准确地检测每个控制器的三个blob,并在这种极端情况下提供追踪支持。
我们解决的另一个问题是检测到的blob大小差异很大,这是Oculus Insight内向外追踪系统面临的新挑战。当以一臂距离握持控制器时,LED的投射可能只跨越几个像素,而当紧挨着摄像头放置时,LED的投射可能会多达几十个像素。系统最初会拒绝太大或太小的blob。尽管最初的效果符合预期,但由于检测到的blob大小不同,这个解决方案带来了更多的挑战。
上面是改进的近距离分割方法的示例(包括来自桌面的反射)。在右侧,我们采用了新的分割代码,从而可以准确地检测到较大的blob,并且不会检测到错误的blob。
我们的解决方案是实现图像金字塔,这是一种众所周知的缩放图像信息的方法,但它可能是计算量非常大的操作。对图像进行下采样可以支持我们用特征检测器运行相同的摄像头帧,从而提供比例不变性,并允许我们检测距离头显更近的blob。不是每一帧都计算图像金字塔,甚至不是每个摄像头都计算图像金字塔,而是根据估计的控制器姿态和启发式方法来决定何时计算金字塔。这为系统带来了灵活性。当以高置信度知晓控制器位置时,系统可以减少计算量,并在位置未知时提升计算以搜索控制器。
3. 好好利用这些blob
检测这些新blob是解决追踪挑战的第一步,并且是为Quest和Rift S改进追踪的许多步骤中的第一步。在下一篇博文中,我将介绍如何使用这些新数据来解决将blob映射到LED,以及使用投影几何来求解位置和方向的有趣问题。