《视觉SLAM十四讲》第十讲g2o求解BA问题报错解决办法

博客介绍了在使用g2o库进行SLAM研究时遇到的编译错误,原因是新旧版本的不兼容。作者提供了解决方案,通过更新代码以适配新版本g2o,包括修改创建优化算法和线性求解器的方式,以避免类型转换错误。此外,还展示了如何根据参数设置优化器和线性求解器。

一、问题描述

编译报错如下:

/home/xxx/slambook/ch10/g2o_custombundle/g2o_bundle.cpp: In function ‘void SetMinimizerOptions(std::shared_ptr<g2o::BlockSolver<g2o::BlockSolverTraits<9, 3> > >&, const BundleParams&, g2o::SparseOptimizer*):
/home/xxx/slambook/ch10/g2o_custombundle/g2o_bundle.cpp:136:74: error: no matching function for call to ‘g2o::OptimizationAlgorithmLevenberg::OptimizationAlgorithmLevenberg(g2o::BlockSolver<g2o::BlockSolverTraits<9, 3> >*)’
         solver = new g2o::OptimizationAlgorithmLevenberg(solver_ptr.get());
                                                                          ^
In file included from /home/xxx/slambook/ch10/g2o_custombundle/g2o_bundle.cpp:18:0:
/usr/local/include/g2o/core/optimization_algorithm_levenberg.h:47:16: note: candidate: g2o::OptimizationAlgorithmLevenberg::OptimizationAlgorithmLevenberg(std::unique_ptr<g2o::Solver>)
       explicit OptimizationAlgorithmLevenberg(std::unique_ptr<Solver> solver);
                ^
/usr/local/include/g2o/core/optimization_algorithm_levenberg.h:47:16: note:   no known conversion for argument 1 from ‘g2o::BlockSolver<g2o::BlockSolverTraits<9, 3> >*’ to ‘std::unique_ptr<g2o::Solver>/home/xxx/slambook/ch10/g2o_custombundle/g2o_bundle.cpp:139:71: error: no matching function for call to ‘g2o::OptimizationAlgorithmDogleg::OptimizationAlgorithmDogleg(g2o::BlockSolver<g2o::BlockSolverTraits<9, 3> >*)’
         solver = new g2o::OptimizationAlgorithmDogleg(solver_ptr.get());
                                                                       ^
In file included from /home/xxx/slambook/ch10/g2o_custombundle/g2o_bundle.cpp:19:0:
/usr/local/include/g2o/core/optimization_algorithm_dogleg.h:56:16: note: candidate: g2o::OptimizationAlgorithmDogleg::OptimizationAlgorithmDogleg(std::unique_ptr<g2o::BlockSolverBase>)
       explicit OptimizationAlgorithmDogleg(std::unique_ptr<BlockSolverBase> sol
                ^
/usr/local/include/g2o/core/optimization_algorithm_dogleg.h:56:16: note:   no known conversion for argument 1 from ‘g2o::BlockSolver<g2o::BlockSolverTraits<9, 3> >*’ to ‘std::unique_ptr<g2o::BlockSolverBase>/home/xxx/slambook/ch10/g2o_custombundle/g2o_bundle.cpp: In function ‘void SetSolverOptionsFromFlags(BALProblem*, const BundleParams&, g2o::SparseOptimizer*):
/home/xxx/slambook/ch10/g2o_custombundle/g2o_bundle.cpp:186:49: error: no matching function for call to ‘g2o::BlockSolver<g2o::BlockSolverTraits<9, 3> >::BlockSolver(g2o::LinearSolver<Eigen::Matrix<double, 9, 9, 0, 9, 9> >*&)’
     solver_ptr = new BalBlockSolver(linearSolver
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值