视觉SLAM十四讲中的修改代码总结

目录

Chapter 3

visualizeGeometry

Chapter 4

Chapter 6

关于cmake_modules

g2o_curve_fitting

Chapter 7

Chapter 12


首先,关于数据集下载,直接下载又慢又容易失败;现在我用 free download manager(迅雷更好,但我是ubuntu)。


高翔的《视觉SLAM十四讲》提供了很多代码,但所用的库版本比较老,我用新版本库在编译的时候常会遇到问题。在此记录我的修改。持续更新ing....

我的版本:opencv3.4.1

Chapter 3

visualizeGeometry

CMakeLists.txt: C++版本改为14。注:C++版本的标记似乎是有两种写法:

set( CMAKE_CXX_FLAGS "-std=c++14 -O3" )
set( CMAKE_CXX_STANDARD 14)

Chapter 4

sophus库的安装:

SLAM十四讲中Sophus库的make报错 lvalue required as left operand of assignment unit_complex_.real()_supercolar的博客-CSDN博客

Chapter 6

关于cmake_modules

从第6讲开始,代码里开始有cmake_modules文件夹。这个与 find_packages 有关,find_package是怎么find的呢?它有两个模式:

  1. module模式:在 CMAKE_MODULE_NAME 下搜索 Find.cmake,然后读取变量等等。十四讲的代码采取的就是这个方法,作者先将 cmake_modules 文件夹路径放入 CMAKE_MODULE_NAME,然后建立 Find.cmake 文件,并在里面写明 include 和 lib 的路径。
  2. config模式:一般库在安装后都会有 Config.cmake 或 -config.cmake 文件,而此模式就是去搜索这个文件并读取。

我在自己电脑里搜索了一下,Ceres, g2o, OpenCV 等都有自己的Config.cmake文件,所以实际上很多章节的cmake_modules文件夹都可以删掉,让find_package直接使用第二个模式。

一个例外是,第7讲的g2o里include了外部的库CSparse,它没有Config.cmake,所以需要自己写Find.cmake。不过这个文件不用自己写,它也在OpenCV库的安装包里:Downloads/g2o-master/cmake_modules/FindCSparse.cmake,直接把文件copy过来就行(十四讲代码就是这么做的)。

g2o_curve_fitting

CMakeLists.txt: C++版本改为14。

另外,新版本的opencv中的一些普通指针改为了智能指针unique_ptr。unique_ptr中,为了防止重复构造,delete了拷贝构造函数、赋值函数,用移动构造、移动赋值替代——所以代码中会涉及到把左值引用通过std::move()转换为右值引用。

//<------------------old version---------------------->//
// Block::LinearSolverType* linearSolver = new g2o::LinearSolverDense(); // 线性方程求解器
// Block* solver_ptr = new Block( linearSolver );      // 矩阵块求解器
// g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg( solver_ptr );
//<------------------new version---------------------->//
std::unique_ptr linearSolver(new g2o::LinearSolverDense());
std::unique_ptr solver_ptr(new Block(std::move(linearSolver)));// 矩阵块求解器
g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg( std::move(solver_ptr) );

疑问:g2o的变量和其他的不一样?

Chapter 7

同Chapter6。VertexSBAPointXYZ 改为 VertexPointXYZ。

Chapter 12

gen_vocab_large.cpp: associate.py的对齐操作不是必须,把相关内容替换成自己数据集路径即可。

你可能感兴趣的:(c++,计算机视觉)