2021SC@SDUSC
前言
1.SLAM简介
1.1总述
SLAM是**同步定位与地图构建(Simultaneous Localization And Mapping)**的缩写,最早由Hugh Durrant-Whyte 和 John J.Leonard提出。SLAM主要用于解决移动机器人在未知环境中运行时定位导航与地图构建的问题。
1.2应用
1)室内机器人
扫地机要算机器人里最早用到SLAM技术这一批了,国内的科沃斯、塔米扫地机通过用SLAM算法结合激光雷达或者摄像头的方法,让扫地机可以高效绘制室内地图,智能分析和规划扫地环境,从而成功让自己步入了智能导航的阵列。
不过有意思的是,科沃斯引领时尚还没多久,一大帮懂Slam算法的扫地机厂商就开始陆陆续续地推出自己的智能导航,直到昨天雷锋网还看到一款智能扫地机新鲜出炉,而这追逐背后的核心,大家都知道就是SLAM技术的应用。
2)AR
目前基于SLAM技术开发的代表性产品有微软的Hololens,谷歌的Project Tango以及同样有名的Magic Leap,后者4月20号公布它的新一代水母版demo后,国内的AR公司更加看到了这个趋势,比如进化动力近期就公布了他们的SLAM demo, 用一个小摄像头实现VR头显空间定位,而易瞳去年10月雷锋网去试用新品的时候,就发现已经整合SLAM技术了,国内其他公司虽然没有正式公布,但我们可以肯定,他们都在暗暗研发这项技术,只等一个成熟的时机就会展现给大家。
3)无人机
国外的话,原来做 Google X Project Wing 无人机的创始人 MIT 机器人大牛 Nicholas Roy 的学生 Adam Bry 创办的 Skydio,挖来了 Georgia Tech 的 Slam 大牛教授 Frank Dellaert 做他们的首席科学家。
国内大家非常熟悉的大疆精灵四避障用的双目视觉+超声波,一位大疆工程师徐枭涵在百度百家的撰文里坦率承认
“P4里面呈现的主动避障功能就是一种非常非常典型的Slam的弱应用,无人机只需要知道障碍物在哪,就可以进行 Planning,并且绕开障碍物。当然Slam能做的事情远远不止这些,包括灾区救援,包括探洞,包括人机配合甚至集群,所有的关于无人机的梦想都建立在Slam之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。”
4)无人驾驶
因为Google无人驾驶车的科普,很多人都知道了基于激光雷达技术的Lidar Slam。Lidar Slam是指利用激光雷达作为外部传感器,获取地图数据,使机器人实现同步定位与地图构建。虽然成本高昂,但目前为止是最稳定、最可靠、高性能的SLAM方式。
1.3研究内容
1.4主要分类
1.5 ORB-SLAM3的特性与优势(重点)
ORB-SLAM3是在ORB-SLAM2的基础上开发的,于2020年7月发布。它在定位精度和效果上几乎碾压了同类的开源算法,受到极大关注。从论文中我们先领略一下该算法的特点:
- 第一个可以运行视觉、视觉惯性和多地图,支持单目、双目和RGB-D相机,且支持针孔和鱼眼镜头模型的SLAM系统。
- 一个完全依赖最大后验估计,且基于特征点的单目和双目视觉惯性SLAM系统,包括在IMU初始化阶段。该算法可以在不同大小,室内和室外环境中鲁棒、实时的运行,精度上相比于以前的方法提升了2~5倍。和其他视觉惯性SLAM方法相比,即使在没有闭环的情况下,也具备良好的鲁棒性和更高的精度。
- 一个依赖高召回率的新位置识别算法的多地图系统。该多地图系统可以让系统在视觉信息缺乏的场景下长时间运行。比如当跟踪丢失的时候,它会重新建立新的地图,并在重新访问之前的地图时,无缝地与之前的地图融合。
- 与只使用最近几秒钟信息的视觉里程计相比,它是第一个能够在所有算法阶段重用之前所有信息的系统。能够在BA优化共视关键帧时,利用较大视差的观测来提高求解精度。这些大视差的观测可能间隔时间比较久,或者来自前面已经建立的不同的地图。
- 实验结果证明,在所有的传感器模式下,ORB-SLAM3和文献中可用的最优SLAM系统一样鲁棒,并且具有更高的精度。双目惯性模式下,该算法在无人机数据集EuRoC上可以达到平均3.6cm的定位精度,在手持设备快速移动的室内数据集TUM-VI上达到了9mm的定位精度。
ORB-SLAM3和ORB-SLAM2对比
1.6参考资料
1.小白级入门介绍!终于明白SLAM是什么了!
https://www.bilibili.com/video/BV1vM4y1K7Cj?share_source=copy_web
2.高翔.视觉SLAM十四讲:从理论到实践[M].北京:电子工业出版社.2017
3.VIO灭霸:ORB-SLAM3源码逐行解析
2.小组分工
组员A:Converter.cc Map.cc MapDrawer.cc MapPoint.cc LoopClosing.cc
组员B:Viewer.cc TwoViewReconstruction.cc Initializer.cc ImuTypes.cc Atlas.cc
组员C:Pinhole.cpp Optmizable Types.cc Pnpsolver.cc System.cc sim3solver.cc
组员D:Frame.cc FrameDraw.cc KeyFrame.cc Tracking.cc LocalMapping.cc
我分析部分:G2oTypes.cc KeyFrameDatabase.cc Optimizer.cc ORBextractor.cc ORBmatcher.cc
注:虽然一部分关键技术代码在别人负责的部分中,但我也会进行自我学习分析,故可能存在部分重合。