视觉SLAM技术应用

视觉SLAM技术应用

  • SLAM技术背景

SLAM技术全称Simultaneous localization and mapping,中文为“同时定位与地图构建”。SLAM可以在未知的环境中实时定位自身的位置,并同时构建环境三维地图,是计算机视觉领域以及机器人领域中非常关键的一项技术,有着非常广泛的应用,例如VR、AR、机器人、自动驾驶等领域。

 

SLAM技术在机器人领域应用广泛,可以采用各种各样的传感器,例如激光雷达,深度摄像头,单目、双目、多目摄像头,惯性传感器等等。

 

根据传感器的信息,SLAM可以实时计算自身位置(在空间中的位置和朝向),并同时恢复场景的三维结构,构建环境三维地图。根据这个三维结构恢复的稀疏程度,可以分为稀疏SLAM和稠密SLAM,其中稠密SLAM是把场景的三维几何结构都恢复出来。

 

SLAM技术经过多年的发展,整体框架相对稳定,目前主流SLAM系统采用的是2007年牛津大学提出的并行跟踪与建图框架。首先,前台线程根据输入的传感器信息,实时计算设备位姿。同时后台线程持续构建地图,并对三维点云进行优化,以减少实时计算带来的误差累积。一旦存在回路,需要把回路检测出来并进行闭合。

 

PTAM是第一个真正接近实际应用的技术,后面的SLAM系统基本延续这个框架,像DTAM主要是做小场景比较稠密的几何重建,ORB-SLAM对PTAM框架做了进一步改进,包括自动初始化,采用ORB特征,以及有回路闭合功能。有一些直接法(例如DSO)还能够做到大场景半稠密的重建。

  • 视觉SLAM的技术挑战

 

视觉SLAM,主要使用单目、双目或多目摄像头。从广义上讲,也可以以视觉传感器为主,加上其他传感器作为辅助。视觉SLAM最主要的优势是成本比较低廉,目前已经被证明至少在小范围内可以实现较高的定位精度,可以满足AR的应用要求。

 

视觉SLAM的基本原理是多视图几何。空间上的三维点,如果从某个视角看不被遮挡,那就有对应的投影点。另外,它有对应的二维观测点,理论上三维点的投影点跟二维的观测点应该是重合的,但实际上由于噪声等原因不会严格重合,这时通过最小化目标函数,可以把这里的投影矩阵P和三维点X都解出来。

 

在实际应用中,视觉SLAM面临精度和稳定性,以及实时性这两大关键挑战。精度和稳定性方面,因为环境往往是动态变化的,弱纹理和重复纹理问题很容易造成视觉特征匹配不准确,从而导致优化计算不稳定。实时性方面,主要是在大规模场景下,SLAM计算复杂度高,而低功耗设备的计算能力有限,如何做到实时计算。

 

关键思路在于,对SLAM稳定求解,这可以从约束的正确性和约束的稳定性这两个方面考虑。SLAM本质上就是一个目标函数构造和优化问题。为此,我们要保证目标函数里的约束项都是正确的,这就需要尽可能把错误的匹配剔除掉。在弱纹理情况下,匹配点过少使得约束项不足,优化求解不稳定。解决这个问题一般有两方面的思路,一个是可以通过添加一些运动先验的约束,使约束方程变得比较稳定。另一个是添加场景的先验结构约束,比如一些平面结构约束,把这样的先验结构约束加入到这个目标函数里,也会使得它变得稳定。

 

基于这两个思路,我们开展了面向复杂场景的视觉SLAM技术的研究工作。比如在2013年的RDSLAM这个工作,我们会在线地检测哪些特征点发生了改变,同时排除遮挡造成的情况。通过在线持续的检测变化,及时更新地图,使得地图里的三维点都是有效的,从而能够处理场景动态变化甚至逐渐改变的情况。2016年,我们提出的RKSLAM工作,能够在移动设备做到实时。它主要是通过视觉方法估计出连续帧之间的运动角度得到角速度的估计,然后把这些运动约束加入到目标函数里进行优化求解,从而大大提升了位姿估计的稳定性,即使在晃动比较剧烈的情况下依然比较稳定。另外,从速度上来看,我们的RKSLAM速度是ORB-SLAM的将近五倍。

 

第二个关键思路是如何解决计算效率的问题。这里非常关键的技术就是集束调整,通过最小化一个目标函数来对所有相机的参数和三维点进行同时优化。相机参数和三维点数目可能非常多,复杂度非常高,非线性优化的每次迭代都是在求解一个线性方程组。我们发现这个Hessian矩阵是高度稀疏的,如果充分利用这个稀疏性来求解,效率会高很多。

 

但即使充分利用了稀疏性,求解效率依然是集束调整的一大挑战。对于大尺度三维场景重建,无论是内存、效率都会遇到这样的瓶颈,而采用局部优化策略很容易陷入局部最优解。对于实时SLAM来说,还面临功耗问题以及如何在精度和效率之间取舍的问题。

 

可以从分治求解和增量式计算这两个思路对集束调整进行加速。

 

分治求解主要有两类方式,一类是基于分段的BA,比如将一个长序切分为若干段短序列,每段序列整体做一个7DoF的相似变换。如果优化后误差大于阈值,则继续分裂再优化。通过这样的由粗到细的优化策略,来实现累积误差的快速分散和优化。另一类思路是分布式BA,将整体切分成若干个子地图,各地图独立优化,然后通过共享变量的方式来实现整体的优化。

 

很多时候SLAM往往是新来一个关键帧就要BA优化一下。增量式BA的代表性方法有iSAM、iSAM2,以后我们提出的EIBA、ICE-BA。增量式BA方法的主要思想是充分利用前面构造好的信息,仅对新加入的变量或需要更新的变量所对应的矩阵元素进行更新计算,这可以大幅降低计算复杂度。可以说,增量式BA在很多时候其计算复杂度跟局部BA差不多,但精度是跟全局BA几乎是一样的。

 

这是ICE-BA跟传统的BA方法的效率对比。分为局部BA(固定帧数)和全局BA(帧数随时间增长)两类。可以看到,无论是局部BA还是全局BA,ICE-BA都比传统的方法快一个数量级,甚至更多。这部分工作的代码已经开源。

  • 视觉SLAM应用落地

 

 

我们和商汤科技合作开发的SenseAR平台,能够方便实现各种AR应用。今年新推出的SenseAR 2.0主要是在1.0的基础上增加了云-端结合的功能,并融合了AI能力,而且一些模块的性能也有明显的提升。通过结合云端的高精度地图,可以实现比如室内外定位与AR导航,以及AR多人共享。比如,几个玩家拿着各自的手机,可以在真实的场景下玩设定的游戏,这对SLAM的跟踪精度以及重定位能力要求很高。

 

AR的应用场景复杂多变,由于用户拿着手机,其运动类型非常复杂,而且场景有动态物体,并存在遮挡、弱纹理以及重复纹理等问题。因此,要保证良好的AR用户体验,就需要保证精确且一致的跟踪注册,而且尽量保证跟踪成功率高,若跟踪失败,需要能够快速恢复正常状态。

  

 

为了解决这个问题,我们构建了一个面向AR的单目视觉惯性数据集。我们用两款手机拍摄数据,一个是iPhone X,还有一个是小米8,这是它们的图像和分辨率的参数。我们采用VICON运动捕捉系统来获得手机的运动轨迹真值。

 

为了模拟AR运动的情况我们选了五种运动类型。我们分别用小米8手机录了A系列序列,iPhone X录了B系列序列。

 

我们来看一下这些序列的情况。A系列序列还是属于比较正常的运动类型,就是我刚才说的几种常规的运动,主要是用来测试跟踪精度的;而B系列序列是测试鲁棒性的,相对来说比较极端,比如说突然手去挡住相机,或者突然把图像变成黑色,强迫SLAM系统跟踪丢失进入重定位状态。

猜你喜欢

转载自www.cnblogs.com/wujianming-110117/p/12548879.html