想直接改动,在《还是g2o初始化一些》那篇,这篇比较啰嗦,主要是记录自己思考的步骤。
首先说明主题:没文化真可怕
好了,说干货。之前高博的代码。只要涉及g2o的部分,一律跑不通,没重装之前,只是报一个段错误,就没了。也排查不出来问题。
今日2017年9月24日重装系统,重新搭建环境,除了opencv外,其他一律重新下载安装的。g2o从github下载安装的。
先贴一下g2o初始化的代码:
// 初始化g2o
typedef g2o::BlockSolver< g2o::BlockSolverTraits<6,3> > Block; // pose 维度为 6, landmark 维度为 3
Block::LinearSolverType* linearSolver = new g2o::LinearSolverCSparse<Block::PoseMatrixType>(); // 线性方程求解器
//std::unique_ptr<Block::LinearSolverType> linearSolver ( new g2o::LinearSolverCSparse<Block::PoseMatrixType>());
Block* solver_ptr = new Block ( linearSolver );
//std::unique_ptr<Block> solver_ptr ( new Block ( std::move(linearSolver))); // 矩阵块求解器
g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg ( solver_ptr);
//g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg ( std::move(solver_ptr));
g2o::SparseOptimizer optimizer;
optimizer.setAlgorithm ( solver );
安装好之后,运行第七章的3d2d程序,还是跑不通:
报错:
/home/robin/CLionProjects/slambook-robin/ch7/pose_estimation_3d2d/main.cpp:217:50: error: no matching function for call to ‘g2o::BlockSolver<g2o::BlockSolverTraits<6, 3> >::BlockSolver(g2o::BlockSolver<g2o::BlockSolverTraits<6, 3> >::LinearSolverType*&)’
Block* solver_ptr = new Block ( linearSolver );
点开位置发现是g2o初始化中的Block构造的时候报错:
Block* solver_ptr = new Block ( linearSolver );
继续点下面的错误信息:
In file included from /usr/local/include/g2o/core/block_solver.h:199:0,
from /home/robin/CLionProjects/slambook-robin/ch7/pose_estimation_3d2d/main.cpp:11:
/u