单摄实现 SLAM 定位与 3D 手势背后的难点与突破

  网络渗透测试     |      2023-03-25 10:30

文 /VR 陀螺 案山子

戴上眼镜,张开手掌,菜单立马浮现在手掌上,并跟随手掌移动;

手指捏合,便可进入应用;拖住一个 3D 模型,就可以把它拽到现实环境中,360 度转一圈看一下,还能捏住模型对角进行拉伸和缩小……

《黑客帝国》电影中的酷炫操作,如今离普通用户越来越近了。

要说体验最为接近《黑客帝国》的产品,纵观全产业,微软的 HoloLens 如果排在第二必定无人敢说第一。但由于 HoloLens 中融合了众多传感器来实现高精度的 SLAM 定位与手势识别算法,也导致了其 " 类头盔 " 型的庞大体积,以及动辄 3000 美金的高昂价格,这个前提下面向消费市场几乎无望。

如果在不影响核心体验的基础上,保持一定精度,并将产品和价格都调整至更接近消费端的形态呢?

或许 Rokid 近日公布的全新一代自研 AR 空间操作系统—— YodaOS-Master,首创基于单摄像头即可实现 SLAM 及 3D 裸手交互等能力,提供了新的参考思路。

双目、四目到单目

背后的技术难点与突破

至今为止,大部分 VR 或者 AR 设备上所使用的 SLAM 定位,大多采用了 2 个或 2 个以上的摄像头来实现,部分甚至会结合更多的深度传感器。

如 HoloLens 针对 SLAM 空间定位和手势识别,采用了 4 个可见光摄像头、2 个红外摄像头、1 个 ToF 深度传感器,同时还结合了加速度计、陀螺仪、磁强计等辅助定位。因此它能够实现非常高精度的定位效果。

而目前主流的 VR 终端,也从早期的双目升级到了 4 目及以上,如 Quest 2、Quest Pro、PICO 4、PS VR2 等。

回到 AR,关于定位追踪或手势识别的实现,并无大家 " 默认 " 的标准,毕竟每家的产品定位和定义以及主打的场景都不尽相同。只是对于消费市场,大家会一致将 " 轻便 " 作为产品的第一要素。

空间定位和手势识别的技术方案经过多年迭代发展,在成本、易用性、便携性、精准度和延迟各方面都迎来了较大的突破。

如空间定位的方式,从以可见光、激光、红外为主的 Outside-In(由外向内)方式,进化到以 CV 视觉为主的 Inside-Out(由内向外)方式,去除了冗杂繁琐的安装调试步骤,并且让 VR、AR 终端随时随地可实现 6DoF 空间定位。

手势识别同样如此,为了平衡功耗、重量以及对处理器的负担,摒弃红外、ToF 等深度传感器,直接共用 SLAM 空间定位的硬件基础,通过算法优化来实现手势识别的技术方案越来越成为主流,Quest 2 就是一个非常典型的案例。

只是,在追求极致轻便的消费级 AR 产品上,且不论四目,就连双目都稍显多余。因此,基于单目摄像头的 SLAM 和手势识别技术方案,逐渐变成了众多企业重点攻坚的技术难点。

原本双目或者多目的目的,一方面是便于获取深度信息,正如人的双眼,由于产生了视差所以能够判断物体的距离;另一方面则是为了扩大捕捉范围,所有摄像头都有 FOV 限制,而视觉定位的局限性在于,其不可被遮挡,同时被捕捉物体必须在摄像头的 FOV 范围内,所以通过增加摄像头,就能够让捕捉范围更广。

单摄实现 SLAM 定位与 3D 手势背后的难点与突破

Rokid Max Pro(图源:Rokid)

而单目由于只有一个平面摄像头,无法用视差获取深度信息,如何实现 SLAM 定位?

VR 陀螺与 Rokid 首席科学家周军博士、XR 中心负责人王俊杰,以及负责 BSP 和 SLAM 算法的马超,三位技术专家展开了对话。

据了解,使用纯视觉的单目摄像头,无法获取深度信息,也就是尺度信息,因此会分不清物体的远近距离。而恢复深度有两种方法,第一种是用双目或者四目,通过视差来获取,另一种方法则是通过不同的角度来观测同一个物体,利用前后帧补偿计算来获取与双目一样的视差信息,从而反推出尺度信息。其原理与双目类似,只是这个视差计算不在同一个时间内进行,而是前后关系。

而恢复尺度的时候,核心的问题则在于怎么确定前后帧两个不同视角之间物体的位置,因为这个位置需要标准的尺度信息来恢复,通过位置来反推物体的深度信息,所以要实现单目 SLAM,惯性传感器(IMU)是必不可少的,也就是加速度计和陀螺仪,通过它们能够计算出真实的物理位移,然后反推物体的距离。

但是在处理的过程中会出现一个问题,在于加速度计本身的精度是不准的,会造成如果只是单纯用这种简单的方法来反推的话误差较大,所以需要一套初始化算法来精准地将尺度信息估算出来,这也是为什么大部分单目 SLAM 算法,需要一开始精确初始化。初始化时一般需要用户在空间内来回走动,但这将影响用户体验,因此在 Rokid AR 初始化的设定中,只需要用户稍微运动就能将深度信息计算出来。