error: no matching function for call to ‘g2o::OptimizationAlgorithmLevenberg::OptimizationAlgorithmL

在高翔的一起做RGB-D SLAM(6)中

error: no matching function for call to ‘g2o::OptimizationAlgorithmLevenberg::OptimizationAlgorithmLevenberg(SlamBlockSolver*&)’
orithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg(blockSolver);
在这里插入图片描述

解决方案:

还是g2o更新的问题。

在slamEnd中,将如下代码

// 选择优化方法
    typedef g2o::BlockSolver_6_3 SlamBlockSolver; 
    typedef g2o::LinearSolverEigen< SlamBlockSolver::PoseMatrixType > SlamLinearSolver; 

    // 初始化求解器
    SlamLinearSolver* linearSolver = new SlamLinearSolver();
    linearSolver->setBlockOrdering( false );
    SlamBlockSolver* blockSolver = new SlamBlockSolver( linearSolver );
    g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg( blockSolver );

改成下面的这个:

 // 选择优化方法
    typedef g2o::BlockSolver<g2o::BlockSolverTraits<6,3>> SlamBlockSolver;
    typedef g2o::LinearSolverEigen< SlamBlockSolver::PoseMatrixType > SlamLinearSolver;

    // 初始化求解器
    SlamLinearSolver* linearSolver = new SlamLinearSolver();
    linearSolver->setBlockOrdering( false );
    SlamBlockSolver* blockSolver = new SlamBlockSolver( std::unique_ptr<SlamBlockSolver::LinearSolverType>(linearSolver) );
    g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg( std::unique_ptr<SlamBlockSolver>(blockSolver));

版权声明:本文为qq_36371087原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。