3D激光開源項目——BLAM安裝使用過程的一些問題

 

最近由於在做3D激光slam的相關工作,在網上看見 BLAM 的效果不錯,就下載了相關的代碼跑了一下,在編譯安裝過程中遇到了一些問題,在這裏記錄一下,供有需要的同學看一下。

具體的安裝過程這裏就不在贅述了,如果你不知道,自行百度參考其他的教程或者GitHub上的官方教程。第一次報錯是

fatal error:ros/ros.h:No such file or directory

 這個錯誤是 geometry_utils 模塊的中錯誤,主要是package.xml 和 CMakeLists.txt中的錯誤,其他教程都有修改的方法,這裏不列舉了,參考 : 

https://blog.csdn.net/xmy306538517/article/details/81122663

接下來的這個錯誤是大概編譯到80%的時候報的錯誤:

仔細查看是迴環檢測模塊中的 LaserLoopClosure.h 文件中用到了#include<gstam/baseVector.h> ,再定位到 /usr/local/include/gtsam/base/Vector.h 中,發現這兩句話

static_assert(
    GTSAM_EIGEN_VERSION_WORLD==EIGEN_WORLD_VERSION &&
    GTSAM_EIGEN_VERSION_MAJOR==EIGEN_MAJOR_VERSION,
   "Error:GTSAM ................... of Eigen");

這句 斷言 主要是判斷系統安裝的 eigen 版本與 gtsam 中包含的版本是否相同,我係統安裝的是3.2.9的,而 gtsam 中包含的則是3.3.7的,所以這裏會報錯。

我的解決辦法是將這個斷言語句給註釋掉,然後在編譯就沒有問題了。

但是!!!!在後面運行出現問題,具體問題及解決辦法接着往下看。


更新:2019年11月27日

另外一種方法:

在編譯 gtsam 時,cmake顯示的信息會出現:find eigen version:3.3.7,這說明gtsam編譯時使用的是 eigen 3.3.7,打開CMakeLists.txt 定位到 270:300 這段,這段的主要作用是 選擇是否使用 MKL 模塊,需要使用 MKL 則eigen 的版本要使用gtsam包含的版本,如果不使用 MKL 則使用系統自帶的版本,這裏我們可以修改這句話, 

option(GTSAM_USE_SYSTEM_EIGEN "Find and use system-installed Eigen. If 'off', use the one bundled with GTSAM" OFF)

將最後的OFF 改爲 ON 即可。

這裏改過之後會調用系統自帶的版本的 eigen 庫,編譯過程中可能出現一堆 warning,看起來非常的難受,但是編譯可以通過。

但是編譯完成之後我在運行 “roslaunch blam_example test_online.launch” 時出現這種情況:

推測可能是GTSAM版本的問題,我用的是最新的4.0.2版本的gtsam,後來修改爲 4.0.0 版本(更換爲4.0.0版本的gtsam後,即使系統eigen庫版本與gtsam安裝包中的版本不同,也不會出現上面的斷言判斷),重新編譯一下,就可以成功的運行 roslaunch了。

如果!!!!你要使用使用MKL 模塊,那麼請跳過這種方法,你可以參考第一種方法,或者修改系統安裝的 Eigen 版本。

博文如有問題,歡迎留言指正,在此謝過。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章