文章

AR 导航技术概览

室内导航

传统的室内导航

首先一种比较受欢迎的做法是基于蓝牙信标定位的导航方法。以苹果推出的iBeacon为例,在一个或多个 iBeacon 基站的帮助下,智能手机的软件能大致得到其在地图上的位置,从而进行路线规划和导航。但是由于蓝牙的传输距离较短,从而导致在大型室内环境(商场、写字楼)中会产生极高的部署和维护成本。 另外一种解决方案是基于 Wi-Fi 信号进行定位和导航。相比蓝牙信标,Wi-Fi 在室内环境中更加常见。与蓝牙方法类似,这类方法主要通过无线信号衰减模型和三角定位法确定移动设备的大致位置。亦有其他一些通过信号相位差、传输时间差、信道状态等方式的定位系统。但其本质都是利用来自不同 Wi-Fi 天线的信号差异及相互关系进行定位。 此外,也可以利用机器学习算法将室内区域进行网格划分,根据每个区域的信号强度信息生成热力图进行训练,从而提高定位的准确性。但是由于室内环境的复杂性,Wi-Fi信号很容易受环境的变化而改变,因此维护成本依然很高、精度也受到 Wi-Fi 路由器部署密度、环境稳定性、训练时长等的制约。还有一些基于专用设备的解决方案。通过在室内各个区域部署大量的专业传感设备,包括RFID、红外线、超声波、摄像头甚至激光设备等等。这类解决方案虽然克服了精度问题,但是高昂的硬件成本也使其难以扩展和推广。

其他方案?

随着手机的一代代升级,如今手机上的各种传感器越来越多,比如加速度传感器、陀螺仪、电子罗盘、气压计等。如何最大限度地发挥这些传感器的功能,用这类传感器数据作为室内导航的依据便成了主要的研究课题。 有哪些使用了室内的传感器来实现与导航相关的应用呢?

  • 往往在研究智能机器人的时候,会使用视觉 SLAM 算法,这就用到了摄像头。
  • 无人机、飞机、潜艇、航天飞机等运输工具及导弹等会使用惯性导航。陀螺仪和加速度计是惯性导航系统中不可缺少的核心测量器件。这些传感器在手机内置。 这个方案,不需要在室内预装任何硬件设备,在智能手机上下载应用后即可立即使用,完全实现了低成本、即插即用和易扩展的室内导航推广需求。 这一算法就是视觉惯性里程计——VIO。

VIO

Visual-Inertial Odometry(VIO)即视觉惯性里程计,有时也叫视觉惯性系统(VINS, visual-inertial system),是融合相机和IMU数据实现 SLAM 的算法。

核心思想

  • 视觉部分:特征模块(特征检测、特征匹配);不同帧间位姿估计
  • 惯性传感器部分:收集传感器运动数据,陀螺仪、加速度计等,对数据进行处理,计算位置、方向的变化。

为什么要惯性+视觉

惯性传感器(IMU)能够测量传感器本体的角速度和加速度,被认为与相机传感器具有明显的互补性,而且十分有潜力在融合之后得到更完善的 SLAM 系统。

  1. IMU虽然可以测得角速度和加速度,但这些量都存在明显的漂移(Drift),使得积分两次得到的位姿数据非常不可靠。比如,我们将IMU放在桌上不动,它的读数积分得到的位姿也会漂出十万八千里。但是,对于短时间内的快速运动,IMU能够提供一些较好的估计。这正是相机的弱点。当运动过快时,(卷帘快门的)相机会出现运动模糊,或者两帧之间重叠区域太少以至于无法进行特征匹配,所以纯视觉SLAM非常害怕快速的运动。 而有了 IMU,即使在相机数据无效的那段时间内,我们也能保持一个较好的位姿估计,这是纯视觉 SLAM 无法做到的。
  2. 相比于 IMU,相机数据基本不会有漂移。如果相机放在原地固定不动,那么(在静态场景下)视觉 SLAM 的位姿估计也是固定不动的。所以,相机数据可以有效地估计并修正 IMU 读数中的漂移,使得在慢速运动后的位姿估计依然有效。
  3. 当图像发生变化时,本质上我们没法知道是相机自身发生了运动,还是外界条件发生了变化,所以纯视觉 SLAM 难以处理动态的障碍物。 而IMU能够感受到自己的运动信息,从某种程度上减轻动态物体的影响。

duibi-w400

如何视觉+惯性

既然视觉和惯性都在一定程度上都能得到运动数据,那么现在最关键的问题就是如何耦合,从而充分发挥两者的优点,弥补两这个缺点,从而得到高精度的、稳定的定位。 目前VIO的框架已经定型为两大类:按照是否把图像特征信息加入状态向量来进行分类:

  1. 松耦合(Loosely Coupled):松耦合是指 IMU 和相机分别进行自身的运动估计,然后对其位姿估计结果进行融合。
  2. 紧耦合(Tightly Coupled):紧耦合是指把 IMU 的状态与相机的状态合并在一起,共同构建运动方程和观测方程,然后进行状态估计。

紧耦合理论也必将分为 基于滤波(filter-based) 和 基于优化(optimization-based) 两个方向。

  1. 滤波方面,传统的EKF以及改进的MSCKF(Multi-State Constraint KF)都取得了一定的成果,研究者对EKF也进行了深入的讨论。
  2. 优化方面亦有相应的方案。

算法分成的四个模块

DraggedImage-w878

  1. 第一个模块为测量数据预处理模块。这个模块为摄像头捕捉的每一帧图片检测提取特征点,并在不同帧之间跟踪这些特征点。于此同时,对相邻两帧之间捕捉到的惯性测量单元(IMU)的数据进行预积分(Pre-Integration)。
  2. 第二个模块执行估计的初始化工作。这部分通过三维重建(Structure From Motion, SFM),从时间系列的2D图像中推算3D信息,并结合预积分得到的IMU测量数据,可恢复以米标度的特征位置、平台的运动速度、重力方向以及陀螺仪偏差。
  3. 第三个模块主要完成基于非线性优化的单目惯性视觉系统估计。通过综合考虑视觉数据、IMU测量数据以及闭环检测数据,以滑动窗口法建立非线性优化模型。
  4. 第四个模块在后台线程中运行,负责建立关键帧数据库,并为每个新传入的关键帧进行闭环检测。

具体的算法步骤——紧耦合、优化

DraggedImage-1-w479

整个流程图可以分解为五部分:数据预处理、初始化、局部非线性优化、回环检测和全局优化。

各个模块的主要作用是:

  1. 图像和IMU数据预处理:对于图像,提取特征点,利用 KLT 金字塔进行光流跟踪,为后面仅视觉初始化求解相机位姿做准备。对于IMU,将IMU数据进行预积分,得到当前时刻的位姿、速度、旋转角,同时计算在后端优化中将要用到的相邻帧间的预积分增量,及预积分的协方差矩阵和雅可比矩阵。
  2. 初始化:初始化中,首先进行仅视觉的初始化,解算出相机的相对位姿;然后再与IMU预积分进行对齐求解初始化参数。
  3. 局部非线性优化:对应流程图中滑动窗口的视觉惯导非线性优化,即将视觉约束、IMU约束放在一个大目标函数中进行优化,这里的局部优化也就是只优化当前帧及之前的 $n$ 帧的窗口中的变量,局部非线性优化输出较为精确的位姿。
  4. 回环检测:回环检测是将前面检测的图像关键帧保存起来,当再回到原来经过的同一个地方,通过特征点的匹配关系,判断是否已经来过这里。前面提到的关键帧就是筛选出来的能够记下但又避免冗余的相机帧(关键帧的选择标准是当前帧和上一帧之间的位移超过一定阈值或匹配的特征点数小于一定阈值)。
  5. 全局优化:全局优化是在发生回环检测时,利用相机约束和IMU约束,再加上回环检测的约束,进行非线性优化。全局优化在局部优化的基础上进行,输出更为精确的位姿。

AR?VIO?什么关系?

让我们回到一开始,我们所用的 AR 导航,和这个VIO惯性视觉里程计是什么关系呢?

AR增强现实

增强现实(Augmented Reality)技术是一种将虚拟信息与真实世界巧妙融合的技术。

为了实现虚拟信息和真实场景的无缝叠加,这就要求虚拟信息与真实环境在三维空间位置中进行配准注册。而移动设备摄像头与虚拟信息的位置需要相对应,这就需要通过跟踪技术来实现。当然这里的跟踪就是跟踪移动设备的移动。

比如我们所用到的AR导航,那么虚拟的场景就是导航的路线。导航路线要真实的与地面结合,这就需要三维跟踪。

这种跟踪可以创建沉浸式AR体验:即使用户将设备倾斜到物体的上方或下方,或者将设备四处移动以查看虚拟物体,虚拟物体也可能相对于现实世界停留在同一位置。比如以下的场景:

DraggedImage-2-w680

AR体验基于VIO

如果要实现上述的 AR 三维跟踪体验,那么就需要追踪移动设备的位置方向变化,所以使用到了 VIO。

导航的其他思考

思考到这里,我们发现其实我们目前所做的,就是将惯性视觉追踪数据用于AR中的三维跟踪,目标就是时时刻刻让导航的路线与实际的场景融合。

当然,我们也可以继续利用这部分数据,做传统的可视化即传统的地图显示样式,如下图的下半部分:

DraggedImage-3-w213

应用开发

现有免费框架:ARKit 、ARCore

ARKit和ARCore使用视觉惯性测距法(VIO)。ARKit 为 Apple 的框架,ARCore 为 Google 的框架。

  • ARKit 的主要产品包括点、平面检测,AR 世界地图,光线估计,锚点,面部跟踪,运动捕捉,人员遮挡和多人 AR 分享。
  • ARCore 提供点、平面检测,姿势,光估计,锚点,图像跟踪,面部跟踪,对象遮挡和云锚点。这些功能和结果类似于 ARKit。

比较:

  • ARKit 保持稳定的更新,目前版本为 5.0。ARCore 则更新较慢。
  • ARKit 仅限 iOS 设备。ARCore 可跨平台。

值得注意的是,VIO 涉及到的图像识别、匹配等都是在移动终端本地完成的,因此对设备配置有一定的要求,例如苹果 ARKit 的使用至少为 iOS11、iPhone 6s。

本文由作者按照 CC BY 4.0 进行授权