SLAM14講 ch6 g2o曲線擬合程序問題
阿新 • • 發佈:2018-07-25
bee core list 步驟 8.14 table 由於 required pen
這一講包含了一個用g2o庫進行曲線擬合的實例,但是在按照書中實際步驟實際運行發現了幾個問題。
(1)g2o庫的的依賴項安裝
書中所寫命令如下:
sudo apt-get install libqt4-dev qt4-qmake libqglviewer-dev libsuitesparse-dev libcxsparse3.1.2 libcholmod-dev
但是最後一項(libcholmod-dev)會提示不能安裝,此時應該用tab鍵進行補全完成安裝
(2)編譯出錯
在使用cmake編譯中,出現了以下報錯:
1 By not providing "FindG2O.cmake" inCMAKE_MODULE_PATH this project has 2 asked CMake to find a package configuration file provided by "G2O", but 3 CMake did not find one. 4 5 Could not find a package configuration file provided by "G2O" with any of 6 the following names: 7 8 G2OConfig.cmake 9 g2o-config.cmake10 11 Add the installation prefix of "G2O" to CMAKE_PREFIX_PATH or set "G2O_DIR" 12 to a directory containing one of the above files. If "G2O" provides a 13 separate development package or SDK, be sure it has been installed.
原因在於CMakeLists.txt中,雖然定義了CMAKE_MODULE_PATH,但沒有對應的文件和文件夾,也就是沒有找到FindG2O.cmake文件
解決辦法:找到findg2o.cmake文件的位置,一般在g2o安裝包中的"cmake_modules"文件夾中,將整個文件夾復制到相應工程的下面,與build文件夾在同一目錄,然後編譯可以正常通過
*(3)CMakeLists.txt文件問題
高博在GitHub中給出的代碼如下:
1 cmake_minimum_required( VERSION 2.8 ) 2 project( g2o_curve_fitting ) 3 4 set( CMAKE_BUILD_TYPE "Release" ) 5 set( CMAKE_CXX_FLAGS "-std=c++11 -O3" ) 6 7 # 添加cmake模塊以使用ceres庫 8 list( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules ) 9 10 # 尋找G2O 11 find_package( G2O REQUIRED ) 12 include_directories( 13 ${G2O_INCLUDE_DIRS} 14 "/usr/include/eigen3" 15 ) 16 17 # OpenCV 18 find_package( OpenCV REQUIRED ) 19 include_directories( ${OpenCV_DIRS} ) 20 21 add_executable( curve_fitting main.cpp ) 22 # 與G2O和OpenCV鏈接 23 target_link_libraries( curve_fitting 24 ${OpenCV_LIBS} 25 g2o_core g2o_stuff 26 )
由於項目名定的是g2o_curve_fitting,因此需要修改最後的target_link_libraries(g2o_curve_fitting ${OpenCV_LIBS} g2o_core g2o_stuff)
(這個只是我遇見的問題,如果還有其他的問題,歡迎一起交流討論)
最後整個代碼的運行結果如下
generating data: 0 2.71828 0.01 2.93161 0.02 2.12942 0.03 2.46037 0.04 4.18814 0.05 2.73368 0.06 2.42751 0.07 3.44729 0.08 3.72543 0.09 2.1358 0.1 4.12333 0.11 3.38199 0.12 4.81164 0.13 1.62582 0.14 1.76862 0.15 3.21555 0.16 3.0922 0.17 5.82752 0.18 4.29855 0.19 2.74081 0.2 5.75724 0.21 3.53729 0.22 1.95514 0.23 2.99195 0.24 3.28739 0.25 4.70749 0.26 6.24365 0.27 5.81645 0.28 4.88402 0.29 4.75991 0.3 7.25246 0.31 5.92933 0.32 7.00306 0.33 5.22286 0.34 5.16179 0.35 7.26191 0.36 6.40545 0.37 6.25549 0.38 6.56094 0.39 6.53523 0.4 8.14891 0.41 7.77616 0.42 7.40141 0.43 8.75638 0.44 7.20606 0.45 7.57795 0.46 8.21564 0.47 9.84032 0.48 6.96725 0.49 9.90619 0.5 9.27125 0.51 9.87567 0.52 10.3412 0.53 9.55315 0.54 11.3635 0.55 10.8815 0.56 13.0648 0.57 11.4756 0.58 11.337 0.59 13.2393 0.6 13.5299 0.61 14.0441 0.62 13.31 0.63 13.672 0.64 14.8504 0.65 14.2599 0.66 14.7724 0.67 17.4339 0.68 17.4632 0.69 17.7598 0.7 16.8223 0.71 19.9468 0.72 20.5446 0.73 21.3767 0.74 20.1435 0.75 20.3088 0.76 23.2543 0.77 23.4349 0.78 22.8706 0.79 24.094 0.8 25.4183 0.81 25.5237 0.82 27.9738 0.83 28.5861 0.84 29.5703 0.85 29.6744 0.86 32.667 0.87 34.2698 0.88 33.5124 0.89 36.1479 0.9 39.2485 0.91 40.988 0.92 41.5716 0.93 41.3686 0.94 44.285 0.95 42.8312 0.96 47.7941 0.97 48.5931 0.98 51.8487 0.99 51.0258 start optimization iteration= 0 chi2= 30373.727656 time= 0.000163358 cumTime= 0.000163358 edges= 100 schur= 0 lambda= 699.050482 levenbergIter= 7 iteration= 1 chi2= 13336.948288 time= 5.5717e-05 cumTime= 0.000219075 edges= 100 schur= 0 lambda= 1864.134619 levenbergIter= 3 iteration= 2 chi2= 6946.262996 time= 3.5332e-05 cumTime= 0.000254407 edges= 100 schur= 0 lambda= 1242.756412 levenbergIter= 1 iteration= 3 chi2= 271.023166 time= 3.5225e-05 cumTime= 0.000289632 edges= 100 schur= 0 lambda= 414.252137 levenbergIter= 1 iteration= 4 chi2= 118.903887 time= 4.2411e-05 cumTime= 0.000332043 edges= 100 schur= 0 lambda= 138.084046 levenbergIter= 1 iteration= 5 chi2= 113.568660 time= 3.5035e-05 cumTime= 0.000367078 edges= 100 schur= 0 lambda= 46.028015 levenbergIter= 1 iteration= 6 chi2= 107.476457 time= 4.2275e-05 cumTime= 0.000409353 edges= 100 schur= 0 lambda= 15.342672 levenbergIter= 1 iteration= 7 chi2= 103.014522 time= 3.5151e-05 cumTime= 0.000444504 edges= 100 schur= 0 lambda= 5.114224 levenbergIter= 1 iteration= 8 chi2= 101.988348 time= 4.9545e-05 cumTime= 0.000494049 edges= 100 schur= 0 lambda= 1.704741 levenbergIter= 1 iteration= 9 chi2= 101.937388 time= 4.9565e-05 cumTime= 0.000543614 edges= 100 schur= 0 lambda= 0.568247 levenbergIter= 1 iteration= 10 chi2= 101.937021 time= 2.6884e-05 cumTime= 0.000570498 edges= 100 schur= 0 lambda= 0.378831 levenbergIter= 1 iteration= 11 chi2= 101.937020 time= 3.4683e-05 cumTime= 0.000605181 edges= 100 schur= 0 lambda= 0.252554 levenbergIter= 1 iteration= 12 chi2= 101.937020 time= 3.5072e-05 cumTime= 0.000640253 edges= 100 schur= 0 lambda= 0.168370 levenbergIter= 1 iteration= 13 chi2= 101.937020 time= 6.239e-05 cumTime= 0.000702643 edges= 100 schur= 0 lambda= 3678.088107 levenbergIter= 6 iteration= 14 chi2= 101.937020 time= 5.4525e-05 cumTime= 0.000757168 edges= 100 schur= 0 lambda= 19616.469906 levenbergIter= 3 iteration= 15 chi2= 101.937020 time= 4.9616e-05 cumTime= 0.000806784 edges= 100 schur= 0 lambda= 836969.382664 levenbergIter= 4 iteration= 16 chi2= 101.937020 time= 5.7449e-05 cumTime= 0.000864233 edges= 100 schur= 0 lambda= 224672257893341.656250 levenbergIter= 7 solve time cost = 0.0013663 seconds. estimated model: 0.890911 2.1719 0.943629
SLAM14講 ch6 g2o曲線擬合程序問題