原文链接:「学习路线」SLAM/深度估计/三维重建/标定/传感器融合…(本文较长,建议收藏)
经常有粉丝问视觉/激光/SLAM、三维重建等方向的学习路线,这里我再总结给大家,如下所示:
随着最近几年智能机器人、自动驾驶、AR/MR等领域的快速发展,企业对3D视觉算法及SLAM算法需求越来越强烈,该领域迎来了爆发式发展。
按照应用不同我们把3D视觉及SLAM算法分为如下方向:
视觉深度估计
视觉(惯性)SLAM
激光/多传感器融合SLAM
几何/深度学习三维重建
视觉传感器标定
下面分别介绍(本文较长,建议收藏):
视觉深度估计的目的就是估计图像中场景的深度,即场景中各点像素到相机成像平⾯的垂直距离,分为绝对距离和相对距离。我们看下面这个例子,左边是原图,右边是算法估计的对应深度图:
最近⼏年,⾃动驾驶 、⼈机交互、虚拟现实、机器⼈等领域发展极为迅速,尤其是视觉⽅案在⾃动驾驶中取得惊艳的效果,在这些应⽤场景中,如何获取场景中的深度信息是关键且必须的。同时,从深度图中获得前后的关系更容易分辨出物体的边界,简化了CV中很多任务的算法,例如3D⽬标检测和分割、场景理解等。相⽐于激光雷达测距,相机价格低廉、体积小巧,操作简单等优点,目前视觉深度估计是三维视觉最重要的基础模块之一,不仅在学术届各大CV顶会上有很多深度估计相关新的论文,在工业界应用也非常广泛,是比较热门的研究⽅向。
深度估计在自动驾驶领域的应用
SLAM是指某种移动设备(如机器人、无人机、手机、汽车、智能 穿戴设备等) 从一个未知环境里的未知地点出 发, 在运动过程中通过传感器(如相 机、激光雷达、 IMU等)观测定位 自身位置和姿态,再根据自身位 姿进行增量式的地图构建, 从而达到同时定位和地图构建的 目的。SLAM技术是智能机器人、自动驾驶汽车、AR/MR等领域的底层核心技术之一。
如果SLAM过程使用的主要是视觉相关的传感器(如单目、双目、RGB-D、鱼眼、全景相机),一般称之为视觉SLAM。目前最知名的、效果最好的视觉SLAM是ORB-SLAM2/3系列和VINS-Mono/Fusion系列。
2015年,西班牙萨拉戈萨大学机器人感知与实时研究组开源了ORB-SLAM第一个版本,由于其出色的效果受到广泛关注。该团队分别在2016年和2020年开源了第二个版本ORB-SLAM2和第三个版本ORB-SLAM3。
其中ORB-SLAM2是业内最知名、应用最广泛的开源代码。它有如下优点:
支持单目,双目和RGB-D相机的完整开源SLAM方案,能够实现地图重用、回环检测和重新定位的功能。
支持轻量级定位模式,可以达到零漂移,此时不使用局部建图和回环检测的线程,可以用视觉里程计来跟踪未建图区域。
采用ORB特征,具有旋转不变性、光照不变性、尺度不变性,匹配速度快,适合实时应用。无论是在室内的小型手持设备,还是到工厂环境的无人机和城市里驾驶的汽车,ORB-SLAM2都能够在CPU上进行实时工作。
跟踪、局部地图、闭环、重定位等所有的任务都采用相同的ORB特征,使得系统内数据交互更高效、稳定可靠。
单目初始化和应用场景解耦,不管是平面还是非平面场景,都可以自动初始化,无需人工干预。
地图点和关键帧创建比较宽松,但后续会进行严格筛选,剔除冗余关键帧和误差大的地图点,增加建图过程的弹性,在大旋转、快速运动、纹理不足等恶劣情况下可以提高跟踪的鲁棒性。
采用共视图,使得跟踪和建图控制在局部共视区域,与全局地图大小无关,可以在大场景下运行。
使用本质图(Essential Graph)来优化位姿实现回环检测,耗时少精度高 。
相比于直接法,可以用于宽基线特征匹配,更适合于对深度精度要求较高的场景,比如三维重建。
定位精度高,可达厘米级,是特征点法SLAM的经典代表作品。
代码可读性强,包含很多工程化技巧,非常实用。
下面是ORB-SLAM2的算法框架
ORB-SLAM2 在汽车上应用
ORB-SLAM2 用于室内三维重建
ORB-SLAM3是在特征点法SLAM经典之作ORB-SLAM2的基础上开发的,于2020年7月发布。它在定位精度和效果上几乎碾压了同类的开源算法,被称为VIO算法的巅峰之作。受到极大关注。该算法流程图如下所示
该算法的特点如下所示:
1、 第一个可以运行视觉、视觉惯性和多地图,支持单目、双目和RGB-D相机,且支持针孔和鱼眼镜头模型的SLAM系统。
2、该算法可以在不同大小,室内和室外环境中鲁棒、实时的运行,精度上相比于以前的方法提升了2~5倍。
3、 多地图系统可以让系统在视觉信息缺乏的场景下长时间运行。比如当跟踪丢失的时候,它会重新建立新的地图,并在重新访问之前的地图时,无缝地与之前的地图合并。
4、实验结果证明,双目惯性模式下,该算法在无人机数据集EuRoC上可以达到平均3.6cm的定位精度,在手持设备快速移动的室内数据集TUM-VI上达到了9mm的定位精度。
先来直观的看看视觉效果
看 ORB-SLAM3 疯狂绕圈,稳的很!甚至滑滑梯从黑管子中穿过!
从室内到室外,丝滑闭环
ORB-SLAM3效果展示
上面是定性的结果,下图是量化结果。
从统计数据来看,ORB-SLAM3确实碾压同类算法。功能强大到让SLAM算法研究者感慨“把自己想做的都做了”
VINS即Visual-Inertial navigation Systems,是视觉惯性导航系统的统称,不过我们平时所说的一般是指VINS-Mono/Fusion。香港科技大学飞行机器人实验室(沈邵劼团队)在2018年开源了VINS-Mono算法。第一作者秦通(2019华为天才少年),该论文获2018年机器人顶级期刊IEEE Transactions on Robotics最佳论文奖。它用一个单目相机+惯性测量单元(Inertial Measurement Unit,简称IMU)实现了紧耦合的视觉和惯性联合状态估计,在保证高精度里程计效果的同时,还可以同时估计出传感器外参,IMU零偏以及传感器时延。2019年该团队开源了VINS-Mono的升级版VINS-Fusion,它支持多种视觉惯性传感器类型,包括单目+IMU,双目+IMU,以及纯双目。VINS-Mono和VINS-Fusion在当年一骑绝尘,是非常经典且优秀的VIO框架。
以下是VINS-Mono效果展示,在室外大尺度效果也非常鲁棒,以下是它在香港科技大学操场的SLAM效果:
在手机AR上应用,该算法完胜当前最先进的Google Tango效果如下:
以下是VINS-Fusion在汽车SLAM上的效果:
如果SLAM过程使用的主要是激光雷达相关的传感器,一般称之为激光SLAM。目前最知名的、效果最好的激光SLAM是Google发布的Cartographer,以及LOAM、LEGO-LOAM。
Cartographer是Google推出的一套基于图优化的激光SLAM算法,它同时支持2D和3D激光SLAM,可以跨平台使用,支持Lidar、IMU、Odemetry、GPS、Landmark等多种传感器配置。是目前落地应用最广泛的激光SLAM算法之一。
Cartographer建图过程
Cartographer代码最重要的 贡献不仅仅是算法,而是**工程实现实在是太优秀了!**它不依赖PCL,g2o, iSAM, sophus, OpenCV等第三方库,所有轮子都是自己造的,2D/3D的SLAM的核心部分仅仅依赖于Boost、Eigen(线性代数库)、Ceres(Google开源的非线性优化库)等几个底层的库。
这明显不是搞科研的玩儿法,就是奔着产品去的!因为依赖库少,可以直接在产品级嵌入式系统上应用,关键是开源免费,而且效果还针不戳!极大的降低了开发者的门槛。目前在GitHub的star数目是非常高的。
因此Cartographer非常适合于扫地/清洁机器人、仓储物流机器人、送餐机器人等室内服务机器人场景的实时定位和建图。
如果SLAM过程使用了3种以上传感器,比如视觉、激光、IMU、GPS等,一般称之为多传感器融合SLAM。比较知名的是LIO-SAM、LVI-SAM、R3LIVE等。
LIO-SAM 是Tixiao Shan在LeGO-LOAM的扩展,添加了IMU预积分因子和GPS因子:前端使用紧耦合的IMU融合方式,替代原有的帧间里程计,使得前端更轻量;后端沿用LeGO-LOAM,在此基础上融入了GPS观测。同时前端后端相互耦合,提高系统精度。
LIO-SAM效果展示
指用相机拍摄真实世界的物体、场景,并通过计算机视觉技术进行处理,从而得到物体的三维模型。常见的重建方法包括视觉几何三维重建,以及最近的基于 深度学习的三维重建。它是增强现实(AR)、混合现实(MR)、机器人导航、自动驾驶等领域的核心技术之一。三维重建通常需要SFM或者SLAM得到的位姿和地图点作为输入条件,下图是视觉三维重建的基本流程:
视觉几何三维重建效果展示
根据不同的实现方法,我们可以将三维重建分为:传统基于几何的三维重建和深度学习方法三维重建。具体细分如下所示:
传统的重建方法是使用光度一致性等来计算稠密的三维信息。虽然这些方法在理想的Lambertian场景下,精度已经很高。但也有一些常见的局限性,例如弱纹理,高反光和重复纹理等,使得重建困难或重建的结果不完整。因此,传统三维重建方法在重建的完整性等方面仍有很大的改进空间。
近年来深度学习在三维重建上取得了很大的成功。基于学习的方法可以引入比如镜面先验和反射先验等全局语义信息,使匹配更加鲁棒,从而解决传统方法无法克服的难题。因此掌握基于深度学习的三维重建前沿算法非常重要。另外,在这个大数据时代,深度学习已经是大家必须掌握的技能,传统视觉算法已经很难有新的突破,各个领域都在朝深度学习方向研究,近几年各大视觉会议论文都是基于深度学习来实现三维重建,各个大厂招聘也越来越看重深度学习三维重建方法。
下图是我们整理的独家深度学习MVS网络演化图:
下面学习路线以深度学习MVS网络演化图为主线,重点讲解三个优秀的开源框架 MVSNet(经典的深度学习MVS开源库)、PatchMatchNet(有监督MVS网络中最新最佳)、JDACS-MS(无监督MVS网络中最新最佳),并梳理各种变种网络,覆盖目前深度学习MVS最前沿、最优秀的技术。
包括常见的单目/鱼眼/双目/阵列相机标定。相机标定是指借助专用的标志物(如棋盘格)来估计相机的图像传感器参数(内参、外参)和镜头参数(畸变系数)。相机标定是一切三维视觉的基础。它广泛应用于双目视觉、手眼机械臂、机器人定位建图、图像拼接、三维重建等场景。
相机标定学习路线
以上所有教程,我们都有对应的源码解析课程。
欢迎进入店铺查看↓
店铺链接:「学习路线」SLAM/深度估计/三维重建/标定/传感器融合…(本文较长,建议收藏)
独家重磅课程!
1、详解Cartographer源码:多LiDAR时间同步/去畸变、IMU里程计融合、点云匹配、分支定界。。。
2、深度学习三维重建 详解深度学习三维重建网络:MVSNet、PatchMatchNet、JDACS-MS
3、三维视觉基础 详解视觉深度估计算法(单/双目/RGB-D+特征匹配+极线矫正+代码实战)
4、视觉SLAM必备基础 详解视觉SLAM核心:地图初始化、实时跟踪、局部建图、回环检测、BA优化,工程技巧
5、 VINS:Mono+Fusion SLAM面试官:看你简历上写精通VINS,麻烦现场手推一下预积分!
6、VIO进阶:ORB-SLAM3(单/双目/RGBD+鱼眼+IMU紧耦合+多地图+闭环)独家70+讲全部上线!
7、图像三维重建课程:视觉几何三维重建教程(第2期):稠密重建,曲面重建,点云融合,纹理贴图
8、重磅来袭!基于LiDAR的多传感器融合SLAM 系列教程:LOAM、LeGO-LOAM、LIO-SAM
9、系统全面的相机标定课程:单目/鱼眼/双目/阵列 相机标定:原理与实战
链接:「学习路线」SLAM/深度估计/三维重建/标定/传感器融合…(本文较长,建议收藏)
全国最棒的SLAM、三维视觉学习社区↓
链接:「学习路线」SLAM/深度估计/三维重建/标定/传感器融合…(本文较长,建议收藏)