日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

《一起学习rgbdSLAM》中g2o部分报错的问题

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《一起学习rgbdSLAM》中g2o部分报错的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《一起學習rgbdSLAM》中g2o部分報錯的問題

在高博的《一起學習rgbdSLAM》第六講中使用到了g2o工具。但是由于版本問題,按照高博的寫法來編寫代碼在編譯過程中會報錯。所以需要對該部分代碼稍作修改。

我使用的系統是ubuntu16.04。

教程中的源代碼

    // 選擇優化方法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 );g2o::SparseOptimizer globalOptimizer;  // 最后用的就是這個東東globalOptimizer.setAlgorithm( solver ); 

編譯結果

/home/andy_zhang/my_workspace/Slam/my_slam/RGB_D_SLAM/src/slamend.cpp:82:70: error: no matching function for call to ‘g2o::BlockSolver<g2o::BlockSolverTraits<6, 3> >::BlockSolver(SlamLinearSolver*&)’SlamBlockSolver* blockSolver = new SlamBlockSolver( linearSolver );^
In file included from /usr/local/include/g2o/core/block_solver.h:199:0,from /home/andy_zhang/my_workspace/Slam/my_slam/RGB_D_SLAM/src/slamend.cpp:18:
/usr/local/include/g2o/core/block_solver.hpp:40:1: note: candidate: g2o::BlockSolver<Traits>::BlockSolver(std::unique_ptr<typename Traits::LinearSolverType>) [with Traits = g2o::BlockSolverTraits<6, 3>; typename Traits::LinearSolverType = g2o::LinearSolver<Eigen::Matrix<double, 6, 6, 0> >]BlockSolver<Traits>::BlockSolver(std::unique_ptr<LinearSolverType> linearSolver^
/usr/local/include/g2o/core/block_solver.hpp:40:1: note:   no known conversion for argument 1 from ‘SlamLinearSolver* {aka g2o::LinearSolverEigen<Eigen::Matrix<double, 6, 6, 0> >*}’ to ‘std::unique_ptr<g2o::LinearSolver<Eigen::Matrix<double, 6, 6, 0> >, std::default_delete<g2o::LinearSolver<Eigen::Matrix<double, 6, 6, 0> > > >’
/home/andy_zhang/my_workspace/Slam/my_slam/RGB_D_SLAM/src/slamend.cpp:83:104: error: no matching function for call to ‘g2o::OptimizationAlgorithmLevenberg::OptimizationAlgorithmLevenberg(SlamBlockSolver*&)’ithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg( blockSolver );
....

參考其他博主的建議進行了修改但是仍然沒有成功。
https://blog.csdn.net/robinhjwy/article/details/78084210
https://blog.csdn.net/pangzilu520/article/details/81087577
https://blog.csdn.net/robinhjwy/article/details/78084210

束手無策之時突然想起可以參考g2o文檔中的示例程序進行修改,沒想到還真成功了!

根據~/g2o-master/g2o/examples/simple_optimize/文件下的示例程序將代碼修改為一下形式:

auto linearSolver = g2o::make_unique<LinearSolverCSparse<BlockSolverX::PoseMatrixType>>();
linearSolver->setBlockOrdering(false);
auto blockSolver = g2o::make_unique<BlockSolverX>(std::move(linearSolver));
g2o::OptimizationAlgorithmLevenberg* algorithm = new g2o::OptimizationAlgorithmLevenberg(std::move(blockSolver));g2o::SparseOptimizer globalOptimizer; 
globalOptimizer.setAlgorithm( algorithm ); 

不要忘記添加相應的頭文件:

#include <g2o/types/slam3d/types_slam3d.h>
#include <g2o/core/sparse_optimizer.h>
#include <g2o/core/block_solver.h>
#include <g2o/core/factory.h>
#include <g2o/core/optimization_algorithm_factory.h>
#include <g2o/core/optimization_algorithm_gauss_newton.h>
#include <g2o/core/robust_kernel.h>
#include <g2o/core/robust_kernel_factory.h>
#include <g2o/core/optimization_algorithm_levenberg.h>
#include <g2o/solvers/eigen/linear_solver_eigen.h>
#include <g2o/solvers/csparse/linear_solver_csparse.h>

編譯之后完美通過:

總結

以上是生活随笔為你收集整理的《一起学习rgbdSLAM》中g2o部分报错的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。