MCPTAM安裝

謹以此文紀念我在MCPTAM的大坑裏呆的一天

gengxin: ros install : https://blog.csdn.net/random_repick/article/details/78211030

更新:現在爲兩週之後的安裝更新, 之前環境的配置沒問題之後,開始按照GettingStart用launch文件運行,第三部分Camera Intrinsic Calibration可以運行,成功標定出內參文件,但是在運行Camera Extrindic Calibration時,總是會abort,對源碼進行修改後,在BA時chainBundle.cc文件總是會出現報錯,提示chi2=0,因爲找不到問題原因,我的安裝環境是ubuntu16用的ros kinect,但是同時用redhat,ros-hydro卻成功運行,因此希望降低ros版本,但是因爲一一對應,所以也需要降低ubuntu的版本爲12,所以,如果你當前的環境是Ubuntu16,不太建議安裝,或者安裝完成遇到和我一樣的問題,可以嘗試在ubuntu12上重新編譯;

先羅列正確的安裝順序

pre: 首先要確保ROS已經安裝,我這裏安裝的時ros kinect系列

1. 在ROS安裝完成後,開始安裝MCPTAM, 首先要安裝幾個ros-kinect相關的庫:

sudo apt-get install ros-kinetic-image-transport
sudo apt-get install ros-kinetic-image-transport-plugins 
sudo apt-get install ros-kinetic-pcl-ros 
sudo apt-get install ros-kinetic-libg2o 
sudo apt-get install ros-kinetic-uvc-camera 
sudo apt-get install ros-kinetic-image-* 
sudo apt-get install ros-kinetic-rqt-image-view

2. 下載TooN, 然後安裝

./configure
make
sudo make install

3. 安裝libcvd

下載libcvd 2012版本,按照順序進行安裝,最後提示錯誤如下:

make: *** No rule to make target 'install-libs-debug-so', needed by 'install-libs-debug'。 停止。

打開查看makefile, 裏面有一個庫的如下:

第二個庫,原來makefile中是install-libs-so-debug, 將其改成install-libs-debug-so後重新make 然後sudo make install,則成功; 可以看到libcvd的庫都被保存在usr/local/lib裏面

4. 安裝GVar:

$ ./configure --disable-widgets
$ make
$ sudo make install  結果如下 庫都保存在/usr/local/lib下 頭文件保存在/usr/local/include中

4. 設置catkin工作環境, 這裏就按照下載下來的mcptam文件中的Getting-Stared.pdf中的順序來即可. 需要注意的時第一步set up the ros environment 的時候要source一下, 下面給出的是/opt/ros/hydro/setup.bash, 剛剛說過,我安裝的時kinect, 所以要修改爲:

source /opt/ros/kinect/setup.bash

Set up the ROS environment.
$ source /opt/ros/hydro/setup.bash    ----這裏要與自己的ros下文件匹配

Create a Catkin workspace for the package or use one you've defined previously.
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src/
$ catkin_init_workspace

Set up your Catkin workspace.
$ cd ~/catkin_ws/
$ catkin_make
$ source devel/setup.bash

Download the MCPTAM source code from the SVN repository or the packaged compressed files, and extract into the catkin_ws/src/
folder of the workspace.
Compile the MCPTAM source code with catkin_make.
#從git上下載MCPTAM文件,建議直接git clone https://github.com/aharmat/mcptam.git
#將MCPTAM整個文件拷貝到catkin下的src文件中
$ cd ~/catkin_ws/
$ catkin_make

嚴格按照上面的步驟,不出意外的話,只在23%的時候有一個錯誤如下:

/home/shinan/catkin_ws/src/mcptam/src/ChainBundle.cc:1417:21: error: ‘MatrixXd’ was not declared in this scope
   SparseBlockMatrix<MatrixXd> spinv;  // This will hold the covariance matrices
                     ^
/home/shinan/catkin_ws/src/mcptam/src/ChainBundle.cc:1417:21: note: suggested alternative:
In file included from /usr/include/eigen3/Eigen/Core:367:0,

這個錯誤已經在mcptam的issue中榜上有名,而且已經closed, 解決方法就是 先回到第一個error出現的地方,將對應文件的對應行進行修改: MatrixXd 改成 MatrixXD 即可. 可參考:https://github.com/aharmat/mcptam/issues/16 頁面最後一個回答

----------------------------------------------------------分割線------------------------------------------------------------------------------------

以上時沒有意外時正常的安裝過程,注意點都在過程中標出,但是我的安裝過程並沒有完全遵守以上,所以出現瞭如下意外:

問題一: cmake中間出錯,提示找不到各種的Config.cmake文件, 提示如下:

BY not providing "FindeSUITESPARSE.cmake" in CMAKE_MODULE_PATH

最開始以爲是隻有SUITESPARSE,後來把那行註釋掉後, 發現GVar3那些庫全部都找不到, 我還對對應的cmakelist做出瞭如下的修改,結果在編譯的時候還是出現 未定義的引用, 這就說明我的庫的鏈接全部都是錯誤的, 所以換個方向來思考問題,如果你也出現如下的現象,可以直接看後面的解決辦法

提示出錯後一種方法是自己下載源碼安裝,另一中方法是直接sudo apt-get 安裝,我先採用第一種,未果,於是採用第二種

在終端使用locate都可以找到相關的庫和頭文件,但是被#註釋起來的那幾個package都無法find, 於是自己手動設置包含路徑和庫路徑;

安裝g2o:https://www.cnblogs.com/YouXiangLiThon/p/8671321.html

都設置完成後 重新 catkin_make,提示錯誤如下:

解決辦法: 

原因: 下載MCPTAM的時候出錯,如果直接 git clone https://github.com/aharmat/mcptam.git 下載得到的文件名爲mcptam, 但是我下載的是https://github.com/aharmat/mcptam/releases 頁面的0.1,3版本,這個直接下載zip解壓出來的文件名是 mcptam-REL-0.1.3

本來這個也不是大問題,但是用catkin_make的時候就會出錯,因爲不管是那個版本,下載下來後mcptam/下的CMakeList.txt 裏面都會首先設置

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/cmake_modules")

如下圖:

注意這裏設置camke路徑的時候有一個變量 叫做 ${PROJECT_NAME}, 在這個工程裏 PROJECT_NAME 就是mcptam, 前面CMAKE_SOURCE_DIR 就是當你執行make命令時 用到的CMakeLists.txt文件的路徑, 我們這裏時catkin_ws/src 下的CmakeList, 所以,這句話執行完成 會將CMAKE_MODULE_PATH 設置爲 /home/shinan/catkin_ws/src/mcptam/cmake_modules

因爲這個路徑下存放了所有鏈接庫的find_package文件:

這個時候你下載下來的mcptam文件的名字就很重要,如果你的名字是mcptam, 那麼這個路徑正確, make時可以找到該路徑下的Config.cmake文件,但是如果你的文件的名字是mcptam-REL-0.1.3, 在編譯時按照上面紅色的路徑找時,是找不到那些config文件的

解決方法就是1. 修改文件名稱爲mcptam, 或者直接用git clone下載, 因爲版本不同,裏面的內容還是稍微有差別的

重新下載後catkin_make, 還是會出現matrixXD的問題,同樣修改後就編譯完成了

-------------------------------------------------------------分割線--------------------------------------------------------------------------------------------------------

下面是一些沒用的過程,因爲出問題時沒找到key point,所以走的一些彎路,留在這裏做個記錄,其實沒必要看

於是另外安裝suitesparse.lib

找不到openblas的庫,於是按照https://blog.csdn.net/jacke121/article/details/60140746  安裝openblas, 在第五步建立軟連接時出錯,需要建立的軟連接在 /usr/lib下已經存在,因此將其備份爲liblas.so.3.bak後又重新建立軟連接. 鏈接成功後回去make suitesparse文件還是提示找不到openblas.

於是執行sudo apr-get install libopenblas-dev 後再次make,這次openblas沒有問題,但是lapack提示如下錯誤:

./cholmod_demo < Matrix/bcsstk01.tri
./cholmod_demo: symbol lookup error: /usr/lib/liblapack.so.3: undefined symbol: sgetrs_N_parallel
Makefile:31: recipe for target 'all' failed

網上的博客說這是鏈接錯誤,查看usr/lib下liblapack對應的軟連接:

刪除掉自己多餘的備份:shinan@shinan-HP-Pavilion-Gaming-Laptop-15-cx0xxx:/usr/lib$ sudo rm liblapack.so.3.bak

執行: sudo apt-get install liblapack-dev  結果表示該庫已經安裝

再次make 依然出錯,則按照博主:http://blog.sina.com.cn/s/blog_6594d5d30102wwx6.html的指示,是愛重的庫衝突的問題

 

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