为了方便SLAM跟深度学习的结合,别人用python实现了Stereo-PTAM和RGBD-PTAM,基本是很完整的系统了,包含了多线程跟踪和建图、covisibility graph、local bundle adjustment、位姿图优化、回环检测、点云可视化等模块。在KITTI, EuRoC MAV, TUM RGB-D, ICL-NUIM RGBD这些数据集上跑过,效果和速度都不错,希望能对大家有所帮助。github地址:
https://github.com/uoip/stereo_ptam 和 https://github.com/uoip/rgbd_ptam
另外 Youtube上看到的视频,代码开源,兴许有人需要。
Py-MVO: Monocular Visual Odometry using Python
ORB-SLAM 基本介绍ORB-SLAM 是西班牙 Zaragoza 大学的 Raúl Mur-Arta 编写的视觉 SLAM 系统。 它是一个完整的 SLAM 系统,包括视觉里程计、跟踪、回环检测,是一种完全基于稀疏特征点的单目 SLAM 系统,同时还有单目、双目、RGBD 相机的接口。其核心是使用 ORB (Orinted FAST and BRIEF) 作为整个视觉 SLAM 中的核心特征。ORB-SLAM 基本延续了 PTAM 的算法框架,但对框架中的大部分组件都做了改进, 归纳起来主要有 4 点: ORB-SLAM 选用了 ORB 特征, 基于 ORB 描述量的特征匹配和重定位, 都比 PTAM 具有更好的视角不变性。此外, 新增三维点的特征匹配效率更高, 因此能更及时地扩展场景。扩展场景及时与否决定了后续帧是否能稳定跟踪。ORBSLAM 加入了循环回路的检测和闭合机制, 以消除误差累积。系统采用与重定位相同的方法来检测回路(匹配回路两侧关键帧上的公共点), 通过方位图 (Pose Graph) 优化来闭合回路。PTAM 需要用户指定 2 帧来初始化系统, 2 帧间既要有足够的公共点, 又要有足够的平移量. 平移运动为这些公共点提供视差 (Parallax) , 只有足够的视差才能三角化出精确的三维位置。ORB-SLAM 通过检测视差来自动选择初始化的 2 帧。PTAM 扩展场景时也要求新加入的关键帧提供足够的视差, 导致场景往往难以扩展. ORB-SLAM 采用一种更鲁棒的关键帧和三维点的选择机制——先用宽松的判断条件尽可能及时地加入新的关键帧和三维点, 以保证后续帧的鲁棒跟踪; 再用严格的判断条件删除冗余的关键帧和不稳定的三维点,以保证 BA 的效率和精度。引自《基于单目视觉的同时定位与地图构建方法综述》
ORB-SLAM 的整体系统框架图
ORB-SLAM 它是由三大块、三个流程同时运行的。第一块是跟踪,第二块是建图,第三块是闭环检测。
1.跟踪(Tracking) 这一部分主要工作是从图像中提取 ORB 特征,根据上一帧进行姿态估计,或者进行通过全局重定位初始化位姿,然后跟踪已经重建的局部地图,优化位姿,再根据一些规则确定新关键帧。2. 建图(LocalMapping) 这一部分主要完成局部地图构建。包括对关键帧的插入,验证最近生成的地图点并进行筛选,然后生成新的地图点,使用局部捆集调整(Local BA),最后再对插入的关键帧进行筛选,去除多余的关键帧。3. 闭环检测(LoopClosing) 这一部分主要分为两个过程,分别是闭环探测和闭环校正。闭环检测先使用 WOB 进行探测,然后通过 Sim3 算法计算相似变换。闭环校正,主要是闭环融合和 Essential Graph 的图优化。
ORB-SLAM 优缺点优点:一个代码构造优秀的视觉 SLAM 系统,非常适合移植到实际项目。采用 g2o 作为后端优化工具,能有效地减少对特征点位置和自身位姿的估计误差。采用 DBOW 减少了寻找特征的计算量,同时回环匹配和重定位效果较好。重定位:比如当机器人遇到一些意外情况之后,它的数据流突然被打断了,在 ORB-SLAM 算法下,可以在短时间内重新把机器人在地图中定位。使用了类似「适者生存」的方案来进行关键帧的删选,提高系统追踪的鲁棒性和系统的可持续运行。提供最著名的公共数据集( KITTI 和 TUM 数据集)的详尽实验结果,以显示其性能。可以使用开源代码,并且还支持使用 ROS。 (Github: alejocb/dpptam: DPPTAM: Dense Piecewise Planar Tracking and Mapping from a Monocular Sequence)缺点:构建出的地图是稀疏点云图。只保留了图像中特征点的一部分作为关键点,固定在空间中进行定位,很难描绘地图中的障碍物的存在。初始化时最好保持低速运动,对准特征和几何纹理丰富的物体。旋转时比较容易丢帧,特别是对于纯旋转,对噪声敏感,不具备尺度不变性。如果使用纯视觉 slam 用于机器人导航,可能会精度不高,或者产生累积误差,漂移,尽管可以使用 DBoW 词袋可以用来回环检测。最好使用 VSLAM+IMU 进行融合,可以提高精度上去,适用于实际应用中机器人的导航。
ORB-SLAM2ORB-SLAM2 在 ORB-SLAM 的基础上,还支持标定后的双目相机和 RGB-D 相机。双目对于精度和鲁棒性都会有一定的提升。ORB-SLAM2 是基于单目,双目和 RGB-D 相机的一套完整的 SLAM 方案。它能够实现地图重用,回环检测和重新定位的功能。无论是在室内的小型手持设备,还是到工厂环境的无人机和城市里驾驶的汽车,ORB-SLAM2 都能够在标准的 CPU 上进行实时工作。ORB-SLAM2 在后端上采用的是基于单目和双目的光束法平差优化(BA)的方式,这个方法允许米制比例尺的轨迹精确度评估。此外,ORB-SLAM2 包含一个轻量级的定位模式,该模式能够在允许零点漂移的条件下,利用视觉里程计来追踪未建图的区域并且匹配特征点。深度相机选择目前的主流视觉深度传感器方案主要分结构光,Time-of-Flight 和纯双目三类。双目跟结构光一样,都是使用三角测量法根据物体匹配点的视差反算物体距离,只是双目是用自然光,而结构光是用主动光发射特定图案的条纹或散斑。ToF 是通过给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉冲的飞行(往返)时间来得到目标物距离。ToF 和结构光都属于主动光,比如 Kinect 1,2 代(现已停产),容易受可见光和物体表面干扰,所以更适合室内和短距离的应用场景。
小觅双目深度相机系列融合了 VSLAM+IMU ,提升精度的同时减少了累积误差和漂移,(IR)红外主动光探测器可辅助识别室内白墙和无纹理物体