对SLAM的理解

https://blog.csdn.net/u010128736/article/details/53141681

一、我与SLAM不得不说的二三事

早在一年多前就接触了一点SLAM,当时研究的是LSD-SLAM,一个半稠密的SLAM系统,也是当时可以说是最好的SLAM系统。当时看着算法建出的美丽的点云图、准确的摄像机定位、以及作者在youtube上放出的大场景建图视频和基于LSD-SLAM做的手机端AR应用视频,真的是被LSD-SLAM酷炫的效果所吸引。然后自己凭借着蹩脚的视觉几何基础啃着论文,在ROS上搭着环境,也测试了自己采集的数据,还把运行离线数据的部分从ROS里抽离出来移植到了Windows平台上。当时用无人机拍了一组数据如下图所示:
这里写图片描述

那会儿确确实实学习到了很多技能,但对SLAM的理解还是不是那么透彻。后来因为被叫去做其他项目,就没有再接着往下研究了。下面附一下LSD-SLAM的相关网址,感兴趣的朋友可以去关注一下。
LSD-SLAM的主页:http://vision.in.tum.de/research/vslam/lsdslam
Github网址:https://github.com/tum-vision/lsd_slam

随着项目的需要,以及视觉几何知识的积累,现在需要用到目前更高效、更便于二次开发的最新的ORB-SLAM,既然又要拾起SLAM,所以想整理一下有关于SLAM的一些东西,便于更好地理解。ORB-SLAM是一个基于特征点的稀疏建图框架,但对于大规模的KITTI这些测试数据来说,也是相当漂亮的。目前国内网上找到讲解的比较好的、在该领域比较活跃是大神是高博,ID为半闲居士。知乎上一些关于SLAM的问题也能看到高博的讲解。讲的还是很好的,这里贴一个高博的博客地址,大家可以去拜读一下。http://www.cnblogs.com/gaoxiang12/。在附上LSD-SLAM和ORB-SLAM运行的十分漂亮的结果图~

二、SLAM综述

SLAM,全称是Simultaneous Localization and Mapping,即同时定位与建图。所以我们能看到SLAM的主要工作是定位以及建图。SLAM目前有很多实现方法,主要分为激光雷达和视觉传感器两个方向。视觉SLAM(Visual SLAM)包括使用单目SLAM、双目SLAM和以Kinect为代表的使用景深摄像头的RGB-D SLAM。Visual SLAM领域比较好的SLAM系统有:

单目SLAM:
(1).PTAM(Parallel Tracking And Mapping):2007年 很牛逼的SLAM项目,是第一个使用BA完成实时SLAM的系统,论文中提出的关键帧以及多线程处理思想成为之后视觉SLAM标配。但其由于缺乏回环检测和重定位等功能,只能作用于小规模的场景,且稳定性也不是很高;
(2).DTAM(Dense tracking and mapping in real-time):2011年,Direct SLAM方法的鼻祖;
(3).LSD-SLAM(Large-Scale Direct Monocular SLAM):2014年一个半稠密SLAM系统;
(4).ORB-SLAM:2015年一个比较完整的基于特征点的SLAM系统。

RGBD:
(1).KinectFusion 2011
(2).RGBD-SLAM2 2014
(3).ElasticFusion 2015
三、SLAM框架

视觉SLAM主要分为几个模块:数据采集、视觉里程计(Visual Odometry)、后端优化、建图(Mapping)、闭环检测(Loop closure detection)。如下图所示:
这里写图片描述
视觉里程计

视觉里程计就是利用一个图像序列或者一个视频流,计算摄像机的方向和位置的过程。一般包括图像获取后、畸变校正、特征检测匹配或者直接匹配对应像素、通过对极几何原理估计相机的旋转矩阵和平移向量。
这里写图片描述
后端优化

后端优化理论上来说,如果视觉里程计模块估计的相机的旋转矩阵R和平移向量t都正确的话,我们就能得到完美的定位和建图了。但实际试验中,我们得到的数据往往有很多噪声,且由于传感器的精度、错误的匹配等,都对造成结果有误差。并且由于我们是只把新的一帧与前一个关键帧进行比较,当某一帧的结果有误差时,就会对后面的结果产生累计误差,最后的结果肯定误差越来越大。为了解决这个问题,引入后端优化。
  后端优化一般采用捆集调整(BA)、卡尔曼滤波(EKF)、图优化等方式来解决。其中基于图优化的后端优化,效果最好。Graph-based SLAM一般使用g2o求解器,进行图优化计算。

闭环检测

后端优化可能得到一个比较优的解,但当运动回到某一个之前去过的地方,如果我们能认出这个地方,并找到那个时候的关键帧进行比较,我们就可以得到比单用后端优化更准确更高效的结果。闭环检测就是要解决这个问题。
  闭环检测有两种方式,一是根据估计出来的相机的位置,看是否与之前否个位置邻近;另外一种是根据图像,去自动识别出来这个场景之前到过,并找到那时候的关键帧。现在比较常用的是后一种方法,其实是一个非监督的模式识别问题。比较常用的方法是使用Bag-of-Words(BOW),ORB-SLAM就是使用这个方法来进行闭环检测。
原文:https://blog.csdn.net/u010128736/article/details/53141681

发布了38 篇原创文章 · 获赞 5 · 访问量 5114

猜你喜欢

转载自blog.csdn.net/weixin_40367126/article/details/90754381
今日推荐