视觉SLAM十四讲 问题及习题资源整理

https://blog.csdn.net/jiahao62/article/details/80655542

https://blog.csdn.net/qq_35590091/article/details/95987844

阅读《视觉SLAM十四讲》中遇到的问题及习题资源整理,或为原创,或来自网络,如有问题请与我联系,会在第一时间加以修正。 后来自己写完看到另一位写的博客,相形见绌,大家可以互相结合的看。

第一讲

1.线性方程的解:转载自宋洋鹏(youngpan1101),了解线性代数可关注B站3Blue1Brown,以及线性代数,知乎上有其精细笔记。

2.高斯分布参考这位博主Johnny-Cuii的文章,具体学习可去  四川大学概率论与数理统计。参考链接:1    |      2 |

3.C++的学习可参考C++Primer(第五版)STL华山大师兄。

4.以前用VS写。

5.参考C++11新特性here。

6.这个参考鸟哥的讲解。

7.参考鸟哥1-2,5-8章节。

8.同上。

9.这个好多教程,参考这位博主。

 

第二讲

1.文献[1]主要专注于对基于单目视觉的 SLAM 方法的分析和讨论, 系统地介绍和分析目前 3 类(基于滤波,关键帧BA,直接跟踪)主流单目 V-SLAM 方法的优缺点, 并对它们的代表性系统进行性能分析和比较.另外, 也介绍和讨论了 V-SLAM 技术的最新研究热点和发展趋势, 并进行总结和展望.

文献[14]从帧间配准、环形闭合检测以及图优化技术3方面出发, 对基于图优化的SLAM技术进行综述.

2.文献[9]将SLAM发展分为三个年代,目前处于鲁棒性时代。·文献[15]大同小异。文献[16]介绍了拓扑地图,以解决度量地图计算量大的问题。[17]卡尔曼的介绍,[18]分类和介绍视觉SLAM技术的四个主要框架:卡尔曼滤波器(KF)为基础,圆锥滤波器(PF)为基础,基于期望最大化(EM)和基于成员资格的方案.

3. g++参数 

使用-o来更改生成的文件名,如g++ -o hello hello.cpp

4.好

5.哦哦额

6.undefined reference

7.看了忘,忘了看

8.hao

9.10.11 根据实际自行操作。

 

第三讲

1.验证旋转矩阵是正交矩阵。

2.罗德里格斯公式的推导。

3.验证四元数旋转某个点后,结果是一个虚四元数。

4.自制图片传不上来,太大了?成功了,的确太大会上传失败。

5.这个可以用block()

 
  1. #include

  2. #include "/usr/include/eigen3/Eigen/Dense"

  3. using namespace std;

  4. using namespace Eigen;

  5.  
  6. int main()

  7. {

  8. Matrix4d matrix_44 = Matrix4d::Constant(0.5);

  9. cout << "Here is a matrix:\n" << matrix_44 << endl;

  10. Matrix3d matrix_33 = Matrix3d::Constant(0.1);

  11. matrix_44.block(0,0,3,3) = matrix_33;

  12. cout << "左上角3×3的块取出来赋值为Matrix3_3\n" << matrix_44 << endl;

  13. return 0;

  14. }

发现这位博主的更好。

6.有6种做法:我不能实现,但他太优秀了

7.编程实现。

 
  1. #include

  2. #include

  3. #include

  4. #include

  5. #include

  6.  
  7. using namespace std;

  8. using namespace Eigen;

  9.  
  10. int main(int argc, char** argv) {

  11. Quaterniond q1(0.35, 0.2, 0.3, 0.1), q2(-0.5, 0.4, -0.1, 0.2);

  12. q1.normalize();

  13. q2.normalize();

  14. Vector3d t1(0.3, 0.1, 0.1), t2(-0.1, 0.5, 0.3);

  15. Vector3d p1(0.5, 0, 0.2);

  16.  
  17. Isometry3d T1w(q1), T2w(q2);

  18. T1w.pretranslate(t1);

  19. T2w.pretranslate(t2);

  20.  
  21. Vector3d p2 = T2w * T1w.inverse() * p1;

  22. cout << endl << p2.transpose() << endl;

  23. return 0;

  24. }

 

第四讲

1.验证SO(3),SE(3)和Sim(3)关于乘法成群。

2.验证(R^3,R,X)构成李代数。

3.验证so(3)和se(3)(李代数)满足李代数雅的性质,se(3)同so(3)证明相似。

4.验证性质(4.20)和(4.21)。

5.直观的来讲,反对称矩阵p和Rp相似,相似表示的是不同基下相同的变换,此式表达的是在以R为基的(Rp)^变换与原变换p^相同,公式推导在这里。外文有给了一种简单的推导。这个性质将在图优化用到。

6.这里有链接。

7.希望有伙伴可以帮我检验一下是否正确。

 

SO(3)右扰动:exp(\phi ^{_{\wedge }})\varphi ^{_{\wedge }}p=R\varphi ^{\wedge }p

经@meme哒哒提醒,结果分子应该是(R\varphi) ^{\wedge }p=-p(R\varphi) ^{\wedge }

2019/6/19更新 高博课程给出了结果

 

SE(3)右扰动:

8.参考CMake实践,或搜索相关关键字。

参考其他。

 

第五讲

1.笔记本摄像头的标定。

 
  1. // 获取相机图像代码

  2. cv::VideoCapture cap(0); // change to 1 if you want to use USB camera.

2.相机内参的物理意义:一点从相机坐标系到像素坐标系上的坐标变换。

fx,fy变为原来的两倍。

3.鱼眼相机的标定,区别体现在畸变系数。全景相机的标定,图像变形非常大。

4.全局快门相机和卷帘快门相机的异同。一般情况下使用卷帘快门,拍摄高速运动场景选择全局快门。

5.Kinerct相机标定。

6.遍历图像方法。

7.《OoenCV3编程入门》。

 

第六讲

1.系数矩阵超定时,求最小二乘法。

2.参考这两篇文章A,B;常用的优化库:liblbfgs; NLopt...

最速下降法,牛顿法:优:直观方便,求解增量时只需解线性方程即可。

最速下降法:缺:过于贪心,容易走出锯齿路线,反而增加迭代次数。

牛顿法:缺:需要计算目标函数的海塞矩阵,在问题规模较大时非常困难。

高斯牛顿法:优:用J^TJ作为牛顿法H矩阵的近似。

      缺:实际中该近似只有半正定性。

列文伯格-马夸尔特法:优:一定程度上避免系数矩阵的非奇异和病态问题。

          缺:收敛速度较慢。

3.Aand B(为什么不正定,可能为奇异矩阵或病态矩阵),几何含义(MIT线代)马同学二次型这里也有几何介绍 解不稳定 看几何图时只有正定,半正定才有极值点。

补充:1正定矩阵的几何意义 2如何理解二次型

4.DogLeg优化方法:相关材料

5.Ceres-tutorial

6.g2o回来再看

7.代码注释版

 

第七讲

1.斑点和角点是局部特征中比较流行的两种。

斑点是与周围区域有颜色和灰度上的差别:最广泛的是LOG和DOH。

角点是两条边的交点:常用Harris和FAST角点检测方法。

描述子有浮点型和二进制字符串特征描述子。

常用的特征提取和匹配算法有SIFT,SURF和ORB算法。

SIFT:使用斑点检测方法和浮点型特征描述子,在建立高斯差分空间金字塔的基础上提取初具有尺度不变性的特征点,然后对特征点邻域内的点的梯度方向进行直方图统计。特征点的主方向就是直方图中比重最大的方向,必要时可选一个辅方向。SIFT特征集旋转不变性,尺度不变性,对图像变形和光照鲁棒鲁等优点于一身,不足之处是计算量大,计算速度慢,需要GPU加速才可满足实时性需求。

SURF:使用基于DoH的斑点特征检测方法,在特征点的描述上,SURF算法通过积分图,利用两个方向上的Harr小波模型进行梯度计算,然后对邻域内点的梯度方向以扇形的方式进行统计,得到特征点的主方向。其算法速度快且稳定性好。

2.OpenCV调用特征点。

3.用熵来度量局部信息量大小,将图像分为若干网格,计算每个网格图像的熵,在熵较大的区域内提取特征点。若局部依旧集中可再次划分网格,在没有特征的网格中,强行提取一个兴趣值最大的特征点。

4.FLANN算法基于K均值树或KD_TREE搜索操作所实现的,可以根据数据集的分布特点,对映射精度和空间资源消耗的要求来推荐索引类型和检索参数,在高维空间最近邻查找不受局部敏感哈希影响。

加速匹配的方法:预排序图像检索.....

5.p3p/DLT/EPnP/UPnP

6.链接

7.链接

8.使用基础矩阵、单应性矩阵的RANSAC算法去除误匹配点对

9.以后自己来

10.在Ceres中实现PnP和ICP的优化

 

第八讲(改版后6种颜色...)

1.简单总结和资源下载

2.在式(8.16)中,像素梯度为0,整项雅可比矩阵就为零,不会对计算运动增量有任何贡献。

3.感谢这位,学习

分析:根据直接法的思想:基于灰度不变假设。因为题目假设了周围小块光度也不变,那么我们可以用单个像素周围的3x3或5x5小块的平均灰度值作为单个像素的灰度值,从一定程度上调高了健壮性,但是效果提升有限。

4.以后来

5.等我回来

6.

[58]直接稀疏测距(DSO)是一种基于新颖,高度精确的稀疏和直接结构和运动公式的视觉测距方法。它结合了完全直接的概率模型(最小化光度误差)和所有模型参数的一致联合优化,包括几何 - 表示为参考帧中的反向深度 - 和相机运动。这是通过省略先前在其他直接方法中使用的平滑度并且在整个图像中均匀地采样像素来实时实现的。由于我们的方法不依赖于关键点检测器或描述符,因此它可以自然地从具有强度梯度的所有图像区域中采样像素,包括基本无特征的墙壁上的边缘或平滑强度变化。所提出的模型集成了完整的光度校准,考虑了曝光时间,镜头渐晕和非线性响应功能。我们在包含几个小时视频的三个不同数据集上彻底评估我们的方法。实验表明,在跟踪精度和鲁棒性方面,所提出的方法在各种真实世界环境中明显优于现有技术的直接和间接方法。

[60]我们提出了一种用于立体摄像机的新型直接视觉惯性测距方法。通过最小化组合的光度和惯性能量功能来同时估计相机姿态,速度和IMU偏差。这使我们能够利用视觉和惯性数据的互补性。与此同时,与所有现有的视觉惯性方法相比,我们的方法是完全直接的:以半密集深度图的形式估计几何,而不是手动设计的稀疏关键点。深度信息既可以从静态立体声中获得 - 与立体相机的固定基线图像相关 - 和时间立体声相关 - 来自同一相机的图像,在不同的时间点拍摄。我们表明,我们的方法不仅优于仅视觉或松耦合方法,而且可以比不同数据集上最先进的基于关键点的方法获得更准确的结果,包括快速运动和显着的照明变化。此外,我们的方法提供高保真半密度,度量环境重建,并在CPU上实时运行。

 

第九讲

1.c++

2.待补

3.RANSAC

 

第十讲

1.卡尔曼增益的理解。预测值与测量值的“加权平均”(高斯斑相乘)上的一个迭代过程。

2.不太清楚,目标函数投影模型的代价函数

3.Schur消元是利用H的稀疏性加速计算。

4.关于半正定矩阵的理解(正定、半正定矩阵的直觉代表一个向量经过它的变化后的向量与其本身的夹角小于等于90度);

5.文献

6.修改重投影模型的代码,cx,cy呢?但是我不清楚计算归一化坐标时前边为什么有负号?坐等大佬~

第十一讲  

1.(11.7)第一个近似应该是泰勒展开,约去二次项,第二个近似不太清楚如何推导的

左扰动也推导不下去了.... 找到了!.但是还是觉得没有捋顺~在线等大佬~

2.链接

3.第二版删除了gtsam

4.ISAM增量式优化的理解

第十二讲

1.PR曲线 python版

2.你既然这么问,我就猜可能真的会有不相似

3. 就是你了,泡泡机器人

4.相似性评分

5.Chow_Liu树原理

6.回环检测的方法

第十三讲

1.这个here.

2.3.一样

4.通过平面检测,识别出地面、天花板等,直接用一个大的立方体替换掉Octomap的小方块;或者通过物体识别算法识别出环境中的物体,用物体的3D模型替换Octomap,这样也可以大大减少碰撞检测的计算量

5.Kinectfusion 这个有很多讲解

6.均匀-高斯混合滤波器

 

你可能感兴趣的:(SLAM)