视觉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系统跟踪丢失进入重定位状态。
视觉SLAM技术应用的更多相关文章
- (转) SLAM系统的研究点介绍 与 Kinect视觉SLAM技术介绍
首页 视界智尚 算法技术 每日技术 来打我呀 注册 SLAM系统的研究点介绍 本文主要谈谈SLAM中的各个研究点,为研究生们(应该是博客的多数读者吧)作一个提纲挈领的摘要.然后,我 ...
- 如何从零开始系统化学习视觉SLAM?
由于显示格式问题,建议阅读原文:如何从零开始系统化学习视觉SLAM? 什么是SLAM? SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻 ...
- 视觉SLAM关键方法总结
点"计算机视觉life"关注,置顶更快接收消息! 最近在做基于激光信息的机器人行人跟踪发现如果单独利用激光信息很难完成机器人对行人的识别.跟踪等功能,因此考虑与视觉融合的方法,这样 ...
- 转:SLAM算法解析:抓住视觉SLAM难点,了解技术发展大趋势
SLAM(Simultaneous Localization and Mapping)是业界公认视觉领域空间定位技术的前沿方向,中文译名为“同步定位与地图构建”,它主要用于解决机器人在未知环境运动时的 ...
- 漫谈 SLAM 技术(上)
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:解洪文 导语 随着最近几年机器人.无人机.无人驾驶.VR/AR的火爆,SLAM技术也为大家熟知,被认为是这些领域的关键技术之一.本文对S ...
- 经典视觉SLAM框架
经典视觉SLAM框架 整个视觉SLAM流程包括以下步骤: 1. 传感器信息读取.在视觉SLAM中主要为相机图像信息的读取和预处理. 2. 视觉里程计(Visual Odometry,VO).视觉里程计 ...
- 视觉SLAM漫谈 (三): 研究点介绍
1. 前言 读者朋友们大家好!(很久很久)之前,我们为大家介绍了SLAM的基本概念和方法.相信大家对SLAM,应该有了基本的认识.在忙完一堆写论文.博士开题的事情之后,我准备回来继续填坑:为大家介绍S ...
- 视觉SLAM实战(一):RGB-D SLAM V2
写在前面 首先打个广告.SLAM研究者交流QQ群:254787961.欢迎各路大神和小白前来交流. 看了前面三篇博文之后,是不是有同学要问:博主你扯了那么多有用没用的东西,能不能再给力一点,拿出一个我 ...
- SLAM技术在国内的发展现状
近年来,由于扫地机的出现使得SLAM技术名声大噪,如今,已在机器人.无人机.AVG等领域相继出现它的身影,今天就来跟大家聊一聊国内SLAM的发展现状. SLAM的多领域应用 SLAM应用领域广泛,按其 ...
随机推荐
- 微软加入字节码联盟,进一步开发支持Blazor 的WebAssembly技术
字节码联盟 (Bytecode Alliance)宣布已正式成为 501(c)(3) 非营利组织,参与组建的企业/组织包括 Fastly.英特尔.Mozilla 和微软,此外还邀请到了 Arm.DFI ...
- Linux下查看CPU、内存占用率
linux下查看最消耗CPU.内存的进程 CPU占用最多的前10个进程: ps auxw|head -1;ps auxw|sort -rn -k3|head -10 内存消耗最多的前10个进程: ps ...
- 基于Xposed Hook实现的Android App的协议算法分析小工具-CryptoFucker
本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80962121 在进行Android应用的网络协议分析的时候,不可避免涉及到网络传 ...
- Windows核心编程 第九章 线程与内核对象的同步(下)
9.4 等待定时器内核对象 等待定时器是在某个时间或按规定的间隔时间发出自己的信号通知的内核对象.它们通常用来在某个时间执行某个操作. 若要创建等待定时器,只需要调用C r e a t e Wa i ...
- 【CSS】CSS3从入门到深入(复习查漏向
CSS3从入门到深入(复习查漏向 pre_section CSS:层叠样式表,决定网页表现 网页为多层结构,CSS为每一层设置样式,最后显示最上一层 CSS语句 = 选择器 + 声明块 形式 内联样式 ...
- Asp.NetCore Web开发之RazorPage
这节讲一下Razor页面. 首先要明确,Razor 不是一种编程语言.它是服务器端的标记语言,配合C#语言,就可以像PHP语言语言一样(但它们并不相同),处理HTML页面逻辑.它是Asp.NetCor ...
- iNeuOS工业互联平台,WEB组态(iNeuView)增加动态图元,例如液位
目 录 1. 概述... 2 2. 平台演示... 2 3. 应用过程... 2 4. 实现动态图元的效果... 3 1. 概述 最近,有潜在用 ...
- JVM虚拟机 类加载过程与类加载器
目录 前言 类的生命周期 类加载过程 加载 连接 验证 准备 解析 初始化 类加载器 三大类加载器 双亲委派模型 概念 为什么要使用双亲委派模型 源码分析 反双亲委派模型 参考 前言 类装载器子系统是 ...
- 转: inline关键字使用
1.inline用在函数声明时,还是函数定义时?还是两边都加? 首先,内联函数声明和定义最好在同一个文件中,其它的情况没有实用上的意义. 只要在同一个文件中,声明和定义至少其一加"inlin ...
- java基础——Scanner的基础和进阶
Scanner对象 目的:用来获取用户的输入 基本语法: Scanner s = new scanner (System.in); 通过Scanner 类的next()和nextLine()方法,获取 ...