1. 程式人生 > >《視覺SLAM十四講》第7講 程式碼編譯g2o初始化出錯修改

《視覺SLAM十四講》第7講 程式碼編譯g2o初始化出錯修改

1. pose_estimation_3d3d.cpp

    // 初始化g2o
    typedef g2o::BlockSolver< g2o::BlockSolverTraits<6,3> > Block;  // pose維度為 6, landmark 維度為 3
    //Block::LinearSolverType* linearSolver = new g2o::LinearSolverEigen<Block::PoseMatrixType>(); // 線性方程求解器
    std::unique_ptr<Block::LinearSolverType
> linearSolver (new g2o::LinearSolverEigen<Block::PoseMatrixType>()); //Block* solver_ptr = new Block( linearSolver ); // 矩陣塊求解器 std::unique_ptr<Block> solver_ptr (new Block (std::move(linearSolver))); g2o::OptimizationAlgorithmGaussNewton* solver = new g2o::OptimizationAlgorithmGaussNewton
( std::move(solver_ptr) ); //g2o::OptimizationAlgorithmGaussNewton* solver = new g2o::OptimizationAlgorithmGaussNewton( std::move(solver_ptr) ); g2o::SparseOptimizer optimizer; optimizer.setAlgorithm( solver );

2. pose_estimation_3d2d.cpp
修改版本:

    // 初始化g2o
    typedef g2o::BlockSolver
< g2o::BlockSolverTraits<6,3> > Block; // pose 維度為 6, landmark 維度為 3 std::unique_ptr<Block::LinearSolverType> linearSolver ( new g2o::LinearSolverCSparse<Block::PoseMatrixType>()); // 線性方程求解器 std::unique_ptr<Block> solver_ptr ( new Block ( std::move(linearSolver))); // 矩陣塊求解器 g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg ( std::move(solver_ptr)); g2o::SparseOptimizer optimizer; optimizer.setAlgorithm ( solver );

原始版本:


    // typedef g2o::BlockSolver< g2o::BlockSolverTraits<6,3> > Block;  // pose 維度為 6, landmark 維度為 3
    // Block::LinearSolverType* linearSolver = new g2o::LinearSolverCSparse<Block::PoseMatrixType>(); // 線性方程求解器
    // Block* solver_ptr = new Block ( linearSolver );     // 矩陣塊求解器
    // g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg ( solver_ptr );
    // g2o::SparseOptimizer optimizer;
    // optimizer.setAlgorithm ( solver );