大家好,又见面了,我是你们的朋友全栈君。
早在 2005 年的时候,激光 SLAM 就已经被研究的比较透彻,框架也已初步确定。激光 SLAM,是目前最稳定、最主流的定位导航方法。
激光 SLAM 地图构建
随着计算机视觉的迅速发展,视觉 SLAM 因为信息量大,适用范围广等优点受到广泛关注。
视觉 SLAM 地图构建,图片来源:百度 AI
(1)基于深度摄像机的 Vslam,跟激光 SLAM 类似,通过收集到的点云数据,能直接计算障碍物距离;
(2)基于单目、鱼眼相机的 VSLAM 方案,利用多帧图像来估计自身的位姿变化,再通过累计位姿变化来计算距离物体的距离,并进行定位与地图构建;
一直以来,不管是产业界还是学术界,对激光 SLAM 和 VSLAM 到底谁更胜一筹,谁是未来的主流趋势这一问题,都有自己的看法和见解。下面就简单从几个方面对比了一下激光 SLAM 和 VSLAM。
不管是 Sick,北洋,还是 Velodyne,价格从几万到几十万不等,成本相对来说比较高,但目前国内也有低成本激光雷达(RPLIDAR)解决方案。VSLAM 主要是通过摄像头来采集数据信息,跟激光雷达一对比,摄像头的成本显然要低很多。但激光雷达能更高精度的测出障碍点的角度和距离,方便定位导航。
从应用场景来说,VSLAM 的应用场景要丰富很多。VSLAM 在室内外环境下均能开展工作,但是对光的依赖程度高,在暗处或者一些无纹理区域是无法进行工作的。而激光 SLAM 目前主要被应用在室内,用来进行地图构建和导航工作。
激光 SLAM 在构建地图的时候,精度较高;VSLAM,比如常见的,大家也用的非常多的深度摄像机 Kinect,(测距范围在 3-12m 之间),地图构建精度约 3cm;所以激光 SLAM 构建的地图精度一般来说比 VSLAM 高,且能直接用于定位导航。
激光 SLAM 和基于深度相机的 VSLAM 均是通过直接获取环境中的点云数据,根据生成的点云数据,测算哪里有障碍物以及障碍物的距离。但是基于单目、双目、鱼眼摄像机的 VSLAM 方案,则不能直接获得环境中的点云,而是形成灰色或彩色图像,需要通过不断移动自身的位置,通过提取、匹配特征点,利用三角测距的方法测算出障碍物的距离。
雷达最先开始应用于军事行业,后来逐渐民用。被大家广泛知晓最先应该是从谷歌的无人车上所知道的。当时 Velodyne 雷达体积、重量都较大,应用到一些实际场景中显然不适合。比如无人机、AR、VR 这种,本身体积就很小,再搭载大体积的激光雷达的话,根本无法使用,也影响美感和性能。所以 VSLAM 的出现,利用摄像头测距,弥补了激光雷达的这一缺点,安装方式可以随着场景的不同实现多元化。
除了上面几点之外,在探测范围、运算强度、实时数据生成、地图累计误差等方面,激光 SLAM 和视觉 SLAM 也会存在一定的差距。
比如:
注:左为 Lidar SLAM,右为 VSLAM,数据来源:KITTI
可以明显看出,对于同一个场景,VSLAM 在后半程中出现了偏差,这是因为累积误差所引起的,所以 VSLAM 要进行回环检验。
激光 SLAM 是目前比较成熟的定位导航方案,视觉 SLAM 是未来研究的一个主流方向。所以,未来,多传感器的融合是一种必然的趋势。取长补短,优势结合,为市场打造出真正好用的、易用的 SLAM 方案。
ORB SLAM https://github.com/raulmur/ORB_SLAM2 优势: 在静态环境下定位准确,稳定, 单目和双目版本都可以达到实时(高于10frames/s)。代码可读性强,易扩展, 网上也有实现和imu融合的版本。
劣势:建的地图点云稀疏。 运行速度方面,因为提特征点的时间有瓶颈最快的运行速度应该不超过30frames/s, 我在本机 (i7-6600U) 测的速度基本都在20frames/s左右,因此对于高帧率的相机需要降帧率才能用。对动态物体很敏感,再有动态物体时非常容易tracking lost。
总的来说ORB-SLAM还是在智能驾驶领域用的最广泛的SLAM算法,因为它在work的时候可以work的很好,急需解决的问题是对特征点提取的加速,以及处理的环境中的动态物体。
优势:可以生成相当稠密的点云, 这个优点给DSO很大想象空间。 速度在可以work的时候很快, 大概在20-30frames/s。
劣势:对场景光照要求高,要求尽量保持曝光时间的稳定。对动态物体没有orb那样敏感。代码可扩展性比较差,目前开源的只有单目版本,这个版本没有做尺度恢复因此没法在实际中直接用。这里贴一个我开发的stereo dso: https://github.com/JiatianWu/stereo-dso, 可以恢复相对准确的pose。
DSO的缺点和优点都很明显,目前的局限应该是还没有一个开源可用的像双目orb那样稳定的版本,但是有很大的潜力去做一些orb无法做的事,比如建稠密的高精地图,甚至semantic的高精地图都有可能。
简单说一下LSD,自从DSO出来后LSD就没多少价值了,因为DSO在准确性,稳定性和速度上都比LSD好。LSD有个优势就是回环检测,这个对于DSO有些鸡肋,因为如果odometry都可以很精确为什么需要用额外的计算量去做回环检测呢。
优点:非常快, 快到可以在laptop上达到300frames/s。
缺点:误差大,不准确。这也是为达到高速度牺牲性能的结果吧。
SVO适用的主要场景是无人机,因此代码中采用了一些无人机上的假设,比如假设相机的姿态是向下看的。SVO的最大问题就是不准确,这个可以通过融合imu改善,前提是你拥有一个准确的imu。。
Visual-inertial SLAM
另外经典的VIO还是ETH的OKVIS: https://github.com/ethz-asl/okvis 。VINS和OKVIS性能差不多, OKVIS开发得更早一些, 后端优化的一些思想比如sliding window optimization也被DSO和VINS所借鉴。
参考:http://blog.csdn.net/akunainiannian/article/details/45363731
链接:https://www.zhihu.com/question/51045335/answer/340167377
MonoSLAM、Co-SLAM、Swarm SLAM、ORB_SLAM、RGB-D SLAM
国内激光雷达Slam武汉大学做得好,李明教授是最早一批做3Dslam的;国防科大的应该也不错。
国外的话斯坦福的塞巴斯蒂安是绝对的大牛,他的徒弟也都很厉害;KIT的SLAM6D做的很好,现在网上有开源的3DTK,内部集成了slam6D;
德国弗莱堡大学做的也不错。
作者:Darlingqiang 来源:CSDN 原文:https://blog.csdn.net/Darlingqiang/article/details/80689922 版权声明:本文为博主原创文章,转载请附上博文链接!
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/172377.html原文链接:https://javaforall.cn