g2o::make_unique<BlockSolverType>(g2o::make_unique<LinearSolverType>()));报错

因为版本差异
auto solver = new g2o::OptimizationAlgorithmGaussNewton( g2o::make_unique<BlockSolverType>(g2o::make_unique<LinearSolverType>())); 报错
替换代码为

点击查看代码
  //定义块求解器:位姿维度6,路标维度3(此处路标固定,仅优化位姿)
    typedef g2o::BlockSolver<g2o::BlockSolverTraits<6,3>>BlockSolverType;
    //定义线性求解器:愁摩线性求解器,对应块求解器的位姿矩阵类型
    typedef g2o::LinearSolverDense<BlockSolverType::PoseMatrixType>LinearSolverType;

    //构建优化算法:高斯牛顿法(可替换为LM DOGLEG)
    auto linear_solver=std::make_unique<LinearSolverType>();
    auto blockSolver=std::make_unique<BlockSolverType>(std::move(linear_solver));
    auto solver=std::make_unique<g2o::OptimizationAlgorithmGaussNewton>(std::move(blockSolver));

    g2o::SparseOptimizer optimizer;
    optimizer.setAlgorithm(solver.release());
    optimizer.setVerbose(true);

posted @ 2025-12-27 22:56  阳光天气  阅读(3)  评论(0)    收藏  举报