XR最关键的难题之一就是定位,为了定位XR头显在现实世界中的位置和角度,厂商们采用了多种方案,比如机械传感器、惯性传感器、磁传感器、声学传感器等等。这些定位方式有一个共同的问题,那就是传感器不够完善,且会产生噪音。
拿IMU为例,它通过访问陀螺仪来测量角速度,访问加速计来测量线性加速度,也可能会用上磁力计。理论上讲,如果IMU的测量结果是完美的,那么它应该能提供定位AR/VR头显空间姿态的完整数据。然而,IMU的测量误差通常可达数百米,并不理想。为了抵消它的不准确性,AR/VR头显会结合多个传感器,利用智能融合算法来推算出准确性更高的姿态。
开源VI-SLAM方案
(资料图)
近年来,基于摄像头和IMU单元的视觉惯性定位(VI)在XR中得到广泛应用,比如WMR头显就采用两个或更多定位摄像头,而Quest等VR一体机通常采用四颗或更多摄像头,Index等PC VR也配备多颗摄像头。VI定位方案通过光学来捕捉周围的场景,以实现设备定位,其优势是将传感器集成在头显中,不需要外部基站,设置起来更加方便。
然而,光学6DoF定位通常是XR头显专有的,不同的厂商需要独立开发光学定位算法,没有现成的光学6DoF定位方案可直接使用。一些初创的XR厂商如果没有获得特殊许可,很难获得光学6DoF算法和开发经验。
于是,Collabora顾问软件工程师Mateo de Mayo便开发了一种开源的Vi-SLAM光学定位方案:Monado,该方案特点是基于OpenXR的开源XR运行时,可在移动端、PC端运行AR/VR应用,或是通过AR/VR头显的摄像头实现Inside-Out 6DoF定位。
据悉,Vi-SLAM是视觉惯性方案与SLAM的结合,使用了快速的IMU样本(200Hz)和慢速的相机图像捕捉(20Hz),其中IMU主要用于测量头显的内部运动,而相机则用于捕捉环境变化,以校正IMU测量数据。而SLAM则负责从初始姿态扫描场景,并实时创建地图,进行定位。通常,VI-SLAM地图由场景中的地标组成,通过三角测量法来定位。
视觉惯性定位好处是比纯SLAM方案速度更快,虽然准确性有所牺牲,但随着过去几十年技术发展,其性能、稳定性、准确性、应用场景、易用性都在提升,几乎每年都会出现新迭代的版本。
Monado驱动程序此前仅兼容RealSense和WMR定位方案,在结合上述SLAM/VIO方案后,可兼容更多头显定位系统,包括North Star、Valve Index、WMR、PS VR、HTC Vive Pro等等,还兼容Intel实感相机定位。
除了Inside-Out定位外,Monado还可以为AR/VR头显带来VST透视功能,以及手势识别功能。
原理方面,Monado结合AR/VR头显的摄像头和IMU数据来实现6DoF定位,此外它还结合了三种开源的SLAM/VIO解决方案:Kimera-VIO、ORB-SLAM3和Basalt。利用这三种SLAM/VIO方案,摄像头驱动的支持。
Monado和OpenXR
Monado项目获得了Collabora支持,基于OpenXR标准,可为常见AR/VR硬件提供多种用于追踪定位的工具和驱动,后来在去年5月,在Collabora实习的Mateo de Mayo将Monado与SLAM/VIO方案集成,实现了视觉惯性定位功能。
de Mayo曾测试三种SLAM/VIO系统,其中Kimera-VIO兼容配备单摄或双摄定位、IMU的头显,而ORB-SLAM3几乎兼容任何传感器方案,不管是无IMU的纯单目SLAM,还是全立体IMU-LSMA,不过该方案依赖于预先记录的数据。相比之下,第三个系统Basalt是其中速度最快的,可以更好的满足AR/VR对于实时定位的需求。此外,Basalt的源代码整体比较适合软件开发流程,有大量文档支持。
多亏了Basalt模块,现在Monado可以在Linux上的一个完全开源的软件堆栈上跟踪OpenXR应用程序。
设备集成
为了将SLAM/VIO与Monado集成,开发者需要创建足够灵活的SLAM定位接口,目的是允许每个SDK将输入和输出管道开放给Monado进行定位。
Monado中的中央SLAM定位器可读取AR/VR头显的摄像头、IMU数据,同时也兼容RealSense D455深度感知相机模组。RealSense D455特点是支持3D传感,可测量场景深度,可以很好的定位。Sense D455不仅打在了RGB摄像头,也搭载了IMU来改善移动时深度感知效果。
此外,de Mayo还与WMR驱动程序开发者合作,为其扩展对SLAM定位的支持。现阶段,WMR定位效果不如RealSense驱动好,而且Monado还是一个开源方案,未来经过更多迭代后,可能会更好的商品化。参考:Collabora