1. 程式人生 > >SLAM14講 ch6 g2o曲線擬合程序問題

SLAM14講 ch6 g2o曲線擬合程序問題

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" in
CMAKE_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.cmake
10 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曲線擬合程序問題