跟做高博的《一起做RGB-D SLAM》系列時,出現了挺多bug的(主要因為自己還是個小白),在此記錄下解決程序,(ubuntu18.04,opencv3.4.9)
一起做RGB-D SLAM(6):
1.Ubuntu18安裝g2o
在ubuntu18.04下安裝g2o還是挺容易的,先安裝依賴:
sudo apt-get install qtcreator libeigen3-dev libsuitesparse-dev qtdeclarative5-dev qt5-qmake libqglviewer-dev-qt5
最后一個依賴也可以改為libqglviewer-dev-qt4,分別是基于QT5和4開發的,選擇一個需要的就好,這個依賴關乎到g2o的viewer的安裝,如果安不上的話,對照官方檔案安裝libqglviewer(下載解壓后用QTcreator打開libQGLViewer-2.7.2/QGLViewer/QGLViewer.pro,構建全部),
安好依賴后下載g2o安裝包:github,然后cd到g2o的根目錄下:
mkdir build
cd build
cmake ..
make
sudo make install
2.error: no matching function for call to ‘g2o::BlockSolver<g2o::BlockSolverTraits<6, 3> >::BlockSolver(SlamLinearSolver*&)’ SlamBlockSolver* blockSolver = new SlamBlockSolver( linearSolver );
這個錯誤是因為g2o新版本和舊版本在智能指標上不兼容導致的,參照關于關于高博3d2d程式報錯的改動,把src/slamEnd.cpp(下圖白框處內容)改為:
unique_ptr<SlamBlockSolver::LinearSolverType> linearSolver (new SlamLinearSolver());
unique_ptr<SlamBlockSolver> blockSolver (new SlamBlockSolver(move(linearSolver)));
g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg(move(blockSolver));

3.CMake Error: The current CMakeCache.txt directory /home/max/slam0.1/slam/build/CMakeCache.txt is different than the directory /home/max/slam0.1/slamt/build where CMakeCache.txt was created. This may result in binaries being created in the wrong place. If you are not sure, reedit the CMakeCache.txt
把build檔案下的內容都刪掉再重新cmake …就行,
4.error: ‘struct FRAME’ has no member named ‘frameID’ f.frameID = index;
在include/slamBase.h里(下圖白框處)加上:
int frameID;

5.CMakeFiles/slamEnd.dir/slamEnd.cpp.o:在函式‘main’中:slamEnd.cpp:(.text+0xbf2):對‘g2o::OptimizationAlgorithmLevenberg::OptimizationAlgorithmLevenberg(std::unique_ptr<g2o::Solver, std::default_deleteg2o::Solver >)’未定義的參考slamEnd.cpp:(.text+0xc17):對‘g2o::SparseOptimizer::SparseOptimizer()’未定義的參考 slamEnd.cpp:(.text+0xc30):對‘g2o::SparseOptimizer::setAlgorithm(g2o::OptimizationAlgorithm*)’未定義的參考slamEnd.cpp:(.text+0xc44):對‘g2o::SparseOptimizer::setVerbose(bool)’未定義的參考 slamEnd.cpp:(.text+0xc59):對‘g2o::VertexSE3::VertexSE3()’未定義的參考 slamEnd.cpp:(.text+0xf71):對‘g2o::VertexSE3::VertexSE3()’未定義的參考 slamEnd.cpp:(.text+0xff3):對‘g2o::EdgeSE3::EdgeSE3()’未定義的參考 slamEnd.cpp:(.text+0x11d1):對‘g2o::OptimizableGraph::addEdge(g2o::OptimizableGraph::Edge*)’未定義的參考 slamEnd.cpp:(.text+0x12a6):對‘g2o::OptimizableGraph::save(char const*, int) const’未定義的參考
src/CMakeLists.txt里添加的slamEnd二進制執行檔案要鏈接一些g2o庫,修改為:
ADD_EXECUTABLE( slamEnd slamEnd.cpp )
TARGET_LINK_LIBRARIES( slamEnd
slambase
${OpenCV_LIBS}
${PCL_LIBRARIES}
g2o_core g2o_types_slam3d g2o_solver_csparse g2o_stuff g2o_csparse_extension ${CSPARSE_LIBRARY})
ps:g2o的參考要寫在src下的CMakeLists.txt里,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/209694.html
標籤:java
上一篇:NFV和VNF的現狀如何
