视觉slam基本问题

       视觉slam从根本上其实就是为了回答两个问题,机器人在哪,机器人所处的环境是什么样的。这其实和人进入一个陌生的环境时所思考的问题非常相似。比如我们被拉进了一个陌生的屋子,我们会首先观察这个屋子,观察我们处在一个什么样的环境之中,接下来我们就会思考我们这是在哪。机器人同样如此,我们是通过眼睛、大脑来完成,而机器人就是利用摄像头和处理器来实现。
       视觉SLAM分为三大主要模块:前端的视觉里程计,后端优化,回环检测。做完这些,就可以进行建图的工作了,也就是我们常说的三维点云图。前端视觉里程计的作用,简而言之,第一是要根据摄像头回传的图像计算相机的帧间运动,第二就是估计路标点大致的空间位置坐标。后端优化的作用就是根据前端在不同时刻计算的相机位姿计算最大后验概率估计,可以起到状态预测的作用。回环检测的作用显而易见,当摄像头在环境中到达了自己曾经先前到达过的位置后,因为传感器和计算过程存在误差,所以通常建立出的点云图都不能做到曲线闭合。回环检测的功能便是判断相机是否回到过先前位置,从而修正误差,保证点云图与实际空间的理想。
从前端视觉里程计讲起。
图像用什么摄像头获取? 
1.单目相机      优点:便宜啊      缺点:初始化非常不精确,容易Tracking Lost;  存在尺度不确定的问题,比如丢失深度信息的相片中,我们能见到“手捏太阳”“借位拍照”这样的现象。
2.双目相机       优点:被动测量深度,即可以通过计算获得物体的深度(距离相机的前后距离)     缺点:计算量大,在特征少的白墙、沙漠等环境很容易Tracking Lost。
3.RGB-D相机    优点:利用传感器主动测量深度,TOF相机更是被称为相机的未来。建图准确,不易Tracking Lost           缺点:受阳光,墙面反光等影响
相机的帧间运动用什么描述?
1.旋转矩阵、平移矢量   2.四元数    3.欧拉角   
这些都是描述刚体在三维空间中运动的方式,具体有什么运算规则或者几何意义,这篇就不详细讲了,我这个小白也讲不清楚,毕竟自己都不太明白2333

怎么通过图像计算帧间运动?       
1.相机模型:针孔相机模型

2.视觉里程计中最基本的问题就是给定两个已经成功匹配的空间点在相机平面内投影的坐标,如何计算相机在这两个观察点之间的运动状态。
怎么进行点的匹配?
每帧图像包含的信息:关键点、描述子。关键点是图像信息最集中的部分。描述子是用于区别每个特征点的信息,用于不同帧图像间同一对特征点的匹配。
特征点匹配算法:ORB、SIFT、SURF 等。

怎么计算两点间的运动状态?
1)计算方法:对极几何方法、PnP方法、ICP方法。
对极几何方法:知道两组像素的位置,估计相机运动状态。  每两个成功匹配的点可以 提供一对对极约束,提供八个点就可以计算出本质矩阵(八点法),对本质矩阵进行SVD分解就可以解出相机运动的旋转矩阵R和平移矢量t。
PnP方法:知道一组匹配点的空间位置和在相机平面的投影位置,估计相机运动状态。
ICP方法:知道两组点的空间位置,估计相机运动状态。
2)优化方法:BA优化。BA优化是利用迭代法(牛顿迭代、列文伯格-马克尔特迭代法等)对R,t的值进行多次迭代使得误差值最小化。

后端优化部分(多为一些比较成熟的算法)
主要方法:
1、基于滤波器  :KF、EKF
2、基于非线性优化:图优化、因子图

EKF:将系统线性化,用高斯分布近似观测噪声,并利用卡尔曼滤波进行状态更新。
图优化:给定初值后不断迭代更新图,主要利用的是g2o库


回环检测部分
作用:当相机在空间中运动的时候,很有可能出现相机所在的点在之前到达过的情况。此时三维重建的点云图上,相机的运动轨迹应该是闭合的曲线。但是由于传感器存在误差,计算过程也有很大的误差,所以点云图上,相机的轨迹通常不闭合。词袋检测可以判断相机是否在曾经到达过当前点,如果到达过,则让点云图轨迹闭合。
实现方法:创建词袋,可以理解为一个袋子,这个袋子里装着每一帧图像中的特征元素。利用词袋比较每两帧图像的相似度,当相似度大于某一个阈值的时候,就认为这两幅图像是在同一点观测到的,相机回到了曾经到达过的位置。
视觉slam大概简介就这些,最近刚看完了lsdslam和orbslam的源码,有很多不懂的地方,等搞懂了里面的数学运算再写一写。

参考:https://blog.csdn.net/qq_42037180/article/details/80032835 
 

猜你喜欢

转载自blog.csdn.net/weixin_39752599/article/details/83661875
今日推荐