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

2021-09-05 12:14:46 字數 2646 閱讀 6846

《一起學習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>::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::blocksolver(std::unique_ptr) [with traits = g2o::blocksolvertraits<6, 3>; typename traits::linearsolvertype = g2o::linearsolver>]

blocksolver::blocksolver(std::unique_ptrlinearsolver

^/usr/local/include/g2o/core/block_solver.hpp:40:1: note: no known conversion for argument 1 from 『slamlinearsolver* 』 to 『std::unique_ptr>, std::default_delete> > >』

/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 );

....

參考其他博主的建議進行了修改但是仍然沒有成功。

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

根據~/g2o-master/g2o/examples/******_optimize/檔案下的示例程式將**修改為一下形式:

auto linearsolver = g2o::make_unique>();

linearsolver->setblockordering(false);

auto blocksolver = g2o::make_unique(std::move(linearsolver));

g2o::optimizationalgorithmlevenberg* algorithm = new g2o::optimizationalgorithmlevenberg(std::move(blocksolver));

g2o::sparseoptimizer globaloptimizer;

globaloptimizer.setalgorithm( algorithm );

不要忘記新增相應的標頭檔案:

#include #include #include #include #include #include #include #include #include #include #include

高博一起做RGBD SLAM

一起做rgb d slam 1 前言 一起做rgb d slam 2 點雲顯示 一起做rgb d slam 3 特徵提取與配準 一起做rgb d slam 4 點雲拼接 一起做rgb d slam 5 視覺里程計 一起做rgb d slam 6 圖優化工具g2o 一起做rgb d slam 7 回環...

一起學RGB D slam環境配置

跟著高博的部落格在學rgb d slam,對於ubuntu這個系統的使用還是比較陌生的,按照高博的部落格安裝opencv和pcl後,詳情見 在編譯generate pointcloud.cpp這個檔案的時候出現錯誤 這個錯誤是關於vtk的,也就是電腦裡面沒安裝vtk。因為pcl是依賴於vtk的,所以...

20190831學習日誌 G2彙總

2019 8 28 學習日誌 第十關 今天學習並且通關第十關,從內容到測試都做的比較順利,學到了index的取值方式,應用很開腦洞,我只能用居然沒想到來形容,用取值位移的方式調出資料判斷勝負,這真是太讓我驚嘆了,電腦思維果然是開眼界啊.知識盲點 複習下第9關的教學,溫故而知新,這點非常重要,而且有助...