一起动手做RGB-d 6代码bug

本文详细介绍了在实现RGB-D SLAM过程中,如何选择和配置优化算法,特别是针对g2o库的使用。通过调整优化方法、求解器及迭代策略,如使用Levenberg-Marquardt算法,实现了更高效的图优化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文献https://blog.youkuaiyun.com/pangzilu520/article/details/81087577
复现高博一起动手做RGB-d第六部分时,g2o部分代码

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

    // 初始化求解器
    SlamLinearSolver* linearSolver = new SlamLinearSolver();
    linearSolver->setBlockOrdering( false );
	//选择一个Blocksolver,6*3的参数
    SlamBlockSolver* blockSolver = new SlamBlockSolver(linearSolver);
	//选择一个迭代策略,LM下降
    g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg( blockSolver ); 

由于版本更新,构建bolck_solver的函数原型如下

g2o::BlockSolver< Traits >::BlockSolver 	( 	SparseOptimizer *  	optimizer,
		LinearSolverType *  	linearSolver 
	) 	

因此源代码中构建调解器的方法不可行,参考了第一行的文献,把这部分源代码改为

// 构造g2o中的图
    // 先构造求解器
    g2o::SparseOptimizer    optimizer;
    // 使用Cholmod中的线性方程求解器
        //g2o::BlockSolver_6_3::LinearSolverType* linearSolver = new  g2o::LinearSolverCholmod<g2o::BlockSolver_6_3::PoseMatrixType> ();
    std::unique_ptr<g2o::BlockSolver_6_3::LinearSolverType> linearSolver = g2o::make_unique<g2o::LinearSolverCSparse<g2o::BlockSolver_6_3::PoseMatrixType>>();
    // 6*3 的参数
   std::unique_ptr <g2o::BlockSolver_6_3> block_solver ( new g2o::BlockSolver_6_3( std::move(linearSolver)) );
    // L-M 下降 
    g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg( std::move(block_solver) );

就可以了,虽然还是没搞清楚,不过还是要pass,求生欲还是要有的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值