SLAM(Simultaneous localization and mapping)即同步定位与建图,应用场景一般为机器人导航,场景识别等场景;SLAM的主要实现过程:通过跟踪运动中的相机,估算出来其在每个时刻的位置和姿态,并将相机在不同时刻获取的图像融合重建成完整的三维地图。传统的SLAM可分为视觉前端优化后端两大模块。

视觉前端:

总体概括来说,视觉前端主要完成的任务为:利用运动中的相机在不同时刻获取到的图像帧,通过特征匹配,求解除相邻域之间的相机位姿变换,并完成图像帧之间的融合,重建除地图。视觉前端也是一个局部优化的过程,由于进行优化约束条件仅限于相邻图像帧,因此在相机运动过程中,容易产生误差漂移。

视觉前端主要依赖于机器人搭载的传感器,常用的传感器有相机(单目相机,双目相机,TOF深度相机)IMU(惯性测量单元)激光雷达等,单纯通过视觉传感器(相机)来完成的SLAM又称为视觉SLAM。若使用单目相机作为视觉传感器,优点是成本低,硬件简单,缺点是算法复杂,对相机的运动具有一定的条件要求,因为其通过SFM算法弯沉深度信息的计算,因此若相机在运动时只是发生了旋转而没有发生平移的话,则无法通过三角测量来计算目标的深度信息。由于SFM算法计算出的深度信息并不是真实的深度信息,因为它毕竟不是真正的双目深度重建。

若使用双目相机作为视觉传感器,优点是获取点云数据时,受物体表面材质的反光性质的影响比使用辅助光源的深度传感器方案(如TOF,结构光等)要小,同时其测量距离也相较其他方案要更远,深度图的分辨率更高。缺点是计算复杂度大(计算图像特征及完成特征匹配),同时对于特征的设计具有高鲁棒性的要求。这导致双目视觉SLAM在建立稠密地图(dense map)和算法实时性上具有先天的劣势。

若使用结构光方案的深度相机作为视觉传感器,与双目相机方案大同小异。原理都是利用了双目视差和三角测量,不同之处在于,结构光方案对图像的特征进行了编码,该编码特征在计算和匹配时相比双目相机方案的手工设计特征(如ORB,SIFT等)鲁棒性更好,计算更快,缺点是结构光对物体表面的材质敏感,如果是具有反射、透射性质的表面,或者是漫反射过强的表面,都会出现结构光编码信息的丢失,从而无法正确地匹配特征,导致深度信息的缺失

使用TOF方案的深度相机作为视觉传感器,优点是帧率高,无需通过特征计算及匹配来获取深度信息,因此计算复杂度低,用于SLAM上具有更优的实时性。缺点是同结构光方案,对物体表面的材质比较敏感。此外,TOF相机在图像分辨率和测量距离上,也同结构光方案,不如双目相机的方案

在视觉前端中,主要的任务是完成对相机位姿的估计和建图,这时得到的还是一个局部优化的粗略结果,后续还需要通过后端优化,利用更多约束条件对其进行微调,以获得精确的位姿和地图

估计相机位姿的常用算法是ICP,简而言之是寻找源点集中的每个点在目标点集中的最近邻点作为其对应点,建立起多组对应点。对于每组对应点,都用同一个仿射变换矩阵来描述这组对应点的坐标之间的关系(即旋转和平移关系),建立起一个超定方程组,求解出该仿射变换矩阵。计算出该仿射变换矩阵后,将其应用于源点集上,使源点集整体旋转平移到目标点集上,再计算变换后的各组对应点的坐标的总误差,如果小于给定阈值则停止迭代,如果大于给定阈值,则重复上述过程,直到两个点集的对齐收敛

在SLAM中的做法是,通过ICP来完成相邻帧之间的图像配准进而得到相邻帧之间的相机坐标系之间的旋转平移关系。通常以初始位置的相机坐标系作为全局坐标系,每一帧对应的相机坐标系相对于全局坐标系的旋转平移用于描述该帧对应的时刻的相机的位姿。由于所有相邻帧对之间的旋转平移都可以通过对该相邻帧对进行配准来得到,因此每一帧与第一帧之间的旋转平移也就都可以通过这些中间过程的旋转平移来计算得到,从而得到每一帧的相机位姿

除了通过ICP算法直接对相邻帧的点云进行三维配准,图像配准还可以通过重投影算法来完成: 本质上是最小化重投影误差,即先将当前帧的点云投影到前一帧的相机坐标系中再从前一帧的相机坐标系投影到前一帧的图像坐标系中;同时,前一帧的点云也重投影到其图像坐标系中。通过最小化该图像坐标系上这两个点集里所有对应点对的总误差,来得到当前帧和前一帧的相机坐标系之间的变换矩阵。相邻帧的点云可以使用重投影算法来完成配准,相邻帧的RGB图像也可以使用重投影算法来完成配准,前者称之为几何位姿估计,后者称之为光度位姿估计

相机的位姿由一个旋转变换和一个平移变换来描述。由于相机位姿的求解是一个非线性优化问题,通常的一种求解思路是利用目标函数的梯度下降方向去寻找极值点,即通过不断地调整下降方向和搜索步长,以迭代的方式去逼近极值点

在完成了位姿估计后,就可以通过每一帧的全局位姿,不断地将新的图像帧中的点云变换到全局坐标系中,与已重建的全局地图/模型完成融合逐帧地更新重建地图。对于稀疏SLAM而言,在视觉前端中的建图部分至此就结束了。而对于稠密SLAM而言,此时得到的地图不仅是不精确的,而且在可视化上式不够直观的,就是一群离散的点。所以对于稠密SLAM而言,还多了一个步骤就是对地图/模型进行渲染

至此,SLAM流程之前端优化完成了,谢谢各位,若有不足,还请多多指导!

SLAM流程之视觉前端相关推荐

  1. SLAM总结(四)-视觉前端

    SLAM总结(四)-视觉前端 1.数据关联 1.特征法 2.直接法: 2.姿态解算 3.初始化 4.局部地图 5.选取关键帧策略 前端的主要功能一般是求解当前帧的位姿.前端需要保持与传感器帧率相同的频 ...

  2. vins 解读_代码解读 | VINS 视觉前端

    AI 人工智能 代码解读 | VINS 视觉前端 本文作者是计算机视觉life公众号成员蔡量力,由于格式问题部分内容显示可能有问题,更好的阅读体验,请查看原文链接:代码解读 | VINS 视觉前端 v ...

  3. SLAM综述(2)-视觉SLAM

    SLAM包含了两个主要的任务:定位与构图,在移动机器人或者自动驾驶中,这是一个十分重要的问题:机器人要精确的移动,就必须要有一个环境的地图,那么要构建环境的地图就需要知道机器人的位置. 本系列文章主要 ...

  4. [学习SLAM]深度学习+视觉SLAM 的可行性/方向

    时间:2019.07 作者:干磊 背景:本文统计的是2018年及以前的相关论,未涉及2019年的论文. 1,深度学习+SLAM的可行性 长期来讲,深度学习有极大可能会去替代目前SLAM技术中的某些模块 ...

  5. SLAM综述(3)-视觉与惯导,视觉与深度学习SLAM

    SLAM包含了两个主要的任务:定位与构图,在移动机器人或者自动驾驶中,这是一个十分重要的问题:机器人要精确的移动,就必须要有一个环境的地图,那么要构建环境的地图就需要知道机器人的位置. 本系列文章主要 ...

  6. 滴滴开源 LogicFlow:专注流程可视化的前端框架

    桔妹导读:LogicFlow 脱胎于滴滴技术团队在客服业务下的实践,是由滴滴智能中台体验平台研发的一款流程可视化的前端框架,提供了一系列流程图交互.编辑所必需的功能和灵活的节点自定义.插件等拓展能力, ...

  7. vue2中,使用vite流程之应用前端构建工具vite和vite-plugin-vue2插件

    vue2中,使用vite流程之应用前端构建工具vite和vite-plugin-vue2插件 Vite 官方中文文档--https://cn.vitejs.dev/ vite-plugin-vue2包 ...

  8. 激光slam坐标系和视觉slam坐标系对齐,两个slam系统之间坐标对齐,轨迹对齐,时间戳对齐

    1. 面临的问题 两个独立的SLAM系统中,常常面临一个问题,那就是一个系统上的某一个pose,对应到另一个系统中是在哪里? 紧耦合的SLAM系统,不存在这个问题,比如激光雷达和相机融合的SLAM系统 ...

  9. 拆分基础slam(2)-前端视觉里程计

    二 前端几何原理 对极几何 2D-2D PNP 3D-2D 直接线性变换(DLT) 非线性优化:Bundle Adjustment P3P ICP(Iterative Closest Point) 3 ...

最新文章

  1. ubuntu vasp 安裝_VASP安装过程(64位)
  2. 数组的遍历你都会用了,那Promise版本的呢
  3. 自定义Quartz超实用工具类
  4. curl: (7) couldn‘t connect to host 解决方法
  5. 常考数据结构与算法:数组中相加和为0的三元组
  6. iOS - UIButton 开发总结
  7. Java面试宝典系列之基础面试题String、变量、类与对象、集合类、SSH(二)
  8. linux查看目录大小
  9. jq中查找上级_【节能学院】电能管理系统在福州三岐小学项目中的设计及应用...
  10. 我的世界方块云服务器bug,我的世界:两个方块能无限刷经验?这装置太BUG了
  11. 2021中国音乐市场年度综合分析
  12. 图像质量评价指标: PSNR 和 SSIM
  13. 复合赋值位运算符“&=、| =”
  14. 笔记本安装linux
  15. 关于在GridControl中添加GridLookUpEdit绑定数据
  16. 29个行业106个史上最全数据源汇总(推荐收藏)
  17. 新闻抓取门道全面解析
  18. 虚拟键盘 html,Jquery虚拟键盘(VirtualKeyboard)
  19. 计算机硬件环境指啥,硬件环境指的是什么呢?
  20. pandas合并excel

热门文章

  1. word如何设置上标形式_word如何将107中的7设置为上标表示形式
  2. C++ Win32程序编写入门
  3. 什么是大数据(Big Data)?
  4. 58 同城 iOS 客户端 Hybrid 框架探索
  5. Linux组播编程 组播发送和组播接收
  6. 在Xshell上下载vim
  7. 远程桌面连接:提示出现身份验证错误,要求的函数不受支持。这可能是由于CredSSP加密数据库修正错误。
  8. 16g电脑内存有什么好处_电脑内存4G/8G/16G有什么区别?
  9. CF #689(Div. 2) B - Find the Spruce
  10. final 使用详解