AR中的SLAM(二)
写在前面
本文想讨论一下AR的架构和SLAM在其中的作用。
AR
AR的框架可以简单划分为感知和交互两部分。
感知部分主要负责信息的收集和处理。信息主要通过不同的传感器收集,包括图像、设备加速度、距离(深度)、语音、手势等。利用这些信息,可以进行运动追踪(定位)、地图构建、语音识别、手势识别等一系列感知行为。这部分主要通过APP或者Default service调用不同的Service模块实现。
交互部分主要负责根据指令触发感知行为或者根据感知结果输出交互行为,比如根据运动追踪得到的姿态渲染虚拟物体,根据场景扫描的结果控制虚拟物体的运动、控制系统界面等等。这部分主要通过APP调用操作系统命令和渲染模块实现。
下面是一个简单的示意图,虚线代表调用和反馈机制。
如图所示,一个APP可能同时调用多个service模块,一个service模块可能调用多个传感器。理清service模块和传感器之间的最佳组合及最优算法,是AR算法的核心问题。
AR中的SLAM
如果一个设备想要提供3D效果的AR,显然运动追踪模块是必备的。如果想让虚拟物体和场景交互,或是想要扫描一个真实物体,那么(稠密)三维地图可以提供场景的三维几何信息。
而定位(运动追踪)和建图(稀疏或者稠密地图)构成了SLAM的核心功能。因此,SLAM可以说是AR中最基础的模块,属于设备感知周边环境的范畴。
以Tango为例
下面以Tango的API为例,尝试说明一下AR中的SLAM算法和各个传感器之间的关系。
Tango API提供三个核心功能
- 运动追踪(motion tracking)
- 场景学习(area learning)
- 深度感知(depth percetion)
运动追踪
运动追踪的输出是实时的6DOF姿态。这个模块有滤波框架和优化框架可供选择,现在也有结合深度学习在做的。传感器主要包括单目、双目、IMU的排列组合。Tango用的算法是VIO(fisheye camera+IMU)。
Tango implements Motion Tracking using visual-inertial odometry, or VIO, to estimate where a device is relative to where it started.
Tango团队和苏黎世联邦理工学院(ETHZ)有深入合作,ETHZ现在还在基于Tango做一些工作。
场景学习
场景学习的输出是场景中的一些特征,并将它们保存下来,以便将来能够重新定位以前到过的场景,或者用于校正漂移(drift),提高追踪算法的整体精度。
Area Learning gives the device the ability to see and remember the key visual features of a physical space—the edges, corners, other unique features—so it can recognize that area again later.
When a Tango device has learned an area, there are two key things it can do to improve upon the information provided by Motion Tracking alone: a. Improve the accuracy of the trajectory by performing "drift corrections." b.
Orient and position itself within a previously learned area by performing "localization."
重定位常用的方法有DBoW2(3)、FabMap、相关性(PTAM)、Fern(Elastic Fusion)以及基于机器学习的算法。校正漂移一般通过回环检测(和重定位类似)和全局优化实现(g2o、GTSAM、iSAM等优化框架)。
深度感知
深度感知的输出是一些点云。通过API调用,可以从Tango设备得到原始点云。结合motion tracking,可以将不同视角下的点云拼接起来,得到场景完整的点云。调用一些APP可以实现距离测量、场景扫描等功能。注意Tango的深度传感器的测量范围是0.5m到4m,不方便用于手势识别(一般小于0.5m)。
这部分主要对应于SLAM中的稠密地图重建。原始点云既可通过双目也可通过结构光、TOF等深度传感器获取。点云拼接可以通过ICP或者运动追踪辅助实现。点云处理、网格生成可以通过OctoMap、TSDF重建、Poisson重建实现。
有兴趣的同学可以关注
RTAB-Map,目前在Tango设备上实现了接近实时的点云拼接、单帧点云的网格生成和纹理贴图。
展望
随着硬件的发展和算法的成熟,运动追踪模块估计一两年之内会有大规模的商用,嵌入到手机、VRAR和机器人中。场景扫描模块对硬件(传感器性能、工业设计、功耗控制)和软件(算法、需求定位、架构设计和工程实现)均有较高的要求。由于尚无高效可靠的开源算法,有可能作为一个optional的应用开放一些底层API给开发者。
AR虽然对SLAM的实时性和精度要求较高,但由于能够看到真实世界,其实容许一定的错误率,不像无人车那样,对错误零容忍。