Ubuntu18.04配置运行Kintinuous
瀏覽目錄
- 1. 安裝對應的英偉達顯卡驅動
- 2. 安裝CUDA
- 3. 安裝OpenCV2.4.13
- 3.1 前期準備
- 3.2 下載并編譯OpenCV
- 3.3 配置環境變量
- 3.4 測試
- 4. 安裝PCL
- 4.1 安裝第三方庫
- 4.2 安裝vtk
- 4.3 編譯安裝PCL
- 5. 安裝OpenNi2
- 6. 安裝DLib
- 7. 安裝DBoW2
- 8. 安裝DLoopDetector
- 9. 安裝iSAM
- 10. 安裝Pangolin
- 11. 編譯、運行時候的一些問題
- 12. 最終運行
1. 安裝對應的英偉達顯卡驅動
安裝驅動時參考博客:Ubuntu18.04安裝Nvidia顯卡驅動教程,我的顯卡是rtx3060,驅動版本是510.60.02。
在執行以下命令的時候,出現了”沒有release文件“的問題,解決方法參考博客:E: 倉庫 “http://ppa.launchpad.net/zarquon42/meshlab/ubuntu bionic Release”沒有 Release 文件,即輸入以下命令
2. 安裝CUDA
實驗室小伙伴跟我是一個版本的顯卡驅動,他要跑神經網絡模型,倒騰了好長時間,中間還重裝系統,終于試出了CUDA11.3版本的是最合適的,這里我就直接奉行拿來主義,跟他裝了一個版本的CUDA。
安裝過程參考博客:Linux下安裝cuda和對應版本的cudnn,輸入完執行.run文件的命令回車后要耐心等一會~
CUDA11和10安裝時的提示過程不太一樣,到下面這一步的時候,要在第一個選項上回車,取消安裝顯卡驅動。
當系統存在多個版版本的CUDA時,可以用以下命令切換系統當前使用的CUDA版本。
3. 安裝OpenCV2.4.13
看到有人說先裝CUDA后裝OpenCV是走了彎路,咱也不知道,反正咱CUDA已經費老大勁裝好了,還能回去重新搞咋地。
3.1 前期準備
安裝編譯工具 $ sudo apt-get install build-essential 安裝依賴包 $ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev 安裝可選包 $ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev我最后一步裝libjasper-dev的時候,提示無法定位軟件包,解決方法是輸入以下命令:
$ sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main" $ sudo apt update執行完以后再重新執行上面安裝可選包的命令。
3.2 下載并編譯OpenCV
OpenCV下載地址 ,找到自己要的版本,選“Source”類型的下載。我裝的是2.4.13版本的。
$ cd opencv-2.4.13新建一個文件夾用于存放臨時文件: $ mkdir build$ cd build這是kintinuous提供的opencv編譯命令,最好用這個吧,我編譯2.4.13的時候這個語句沒問題,換成2.4.9就好挫錯誤,最終也沒解決,所以我裝的不是官方用的2.4.9的版本 $ cmake -D BUILD_NEW_PYTHON_SUPPORT=OFF -D WITH_OPENCL=OFF -D WITH_OPENMP=ON -D INSTALL_C_EXAMPLES=OFF -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D WITH_QT=OFF -D WITH_OPENGL=OFF -D WITH_VTK=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF ..我的CPU是8核,所以開了8個線程 $ make -j8 $ sudo make install查看opencv版本,出現版本號表示安裝成功 $ opencv_version3.3 配置環境變量
打開文件,第一次安裝opencv的話,這個文件是空的 $ gedit /etc/ld.so.conf.d/opencv.conf 在文件末尾加入如下語句,這是opencv庫目錄 /usr/local/lib保存文件后,輸入以下命令使文件生效 $ sudo ldconfig上面是配置系統環境變量,下面要為C++程序配置環境變量 打開文件 $ sudo gedit /etc/bash.bashrc 在末尾添加以下語句,pkg-config有默認路徑,這里是為它新添加一個文件查找路徑 PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH切換到root用戶,更新系統的環境變量,執行完后記得切換回普通用戶 $ su $ source /etc/bash.bashrc$ sudo updatedb3.4 測試
確保"/usr/local/lib/pkgconfig"目錄已經存在opencv.c文件 $ ls /usr/local/lib/pkgconfig 測試是否配置好環境變量,記住這里"pkg-config --cflags opencv"表示查看opencv的頭文件路徑,"pkg-config --libs opencv"表示庫文件路徑 $ pkg-config --cflags opencv進入解壓的opencv目錄下的samples文件夾,找一個c++的程序編譯運行。
$ g++ connected_components.cpp -o connected_components `pkg-config --cflags --libs opencv` $ ./connected_components成功運行就表示OpenCV安裝完成了。
4. 安裝PCL
我一開始裝了1.12版的,結果最后編譯項目的時候報了老大一堆錯,就卸載了。
仔細看項目的安裝教程發現要的是1.7的,但這個版本的網上安裝教程太少,于是又裝了1.8的,后面的半成功運行證明大概是沒什么問題的。
下面是卸載已安裝的pcl的命令。
卸載vtk:
卸載pcl-1.12:
$ sudo rm -r /usr/local/include/pcl-1.12 /usr/local/bin/pcl* /usr/local/lib/libpcl* $ sudo rm -rf /usr/local/share/pcl-1.124.1 安裝第三方庫
$ sudo apt-get update $ sudo apt-get install git build-essential linux-libc-dev cmake cmake-gui libusb-1.0-0-dev libusb-dev libudev-dev mpi-default-dev openmpi-bin openmpi-common libpcap-dev libflann1.9 libflann-dev $ sudo apt-get install libeigen3-dev libboost-all-dev vtk6 libvtk6.3 libvtk6-dev libvtk6.3-qt libvtk6-qt-dev libqhull* libgtest-dev freeglut3-dev pkg-config libxmu-dev libxi-dev mono-complete libopenni-dev libopenni2-dev4.2 安裝vtk
到官網下載vtk-7.1.1.tar.gz,解壓后編譯安裝。
4.3 編譯安裝PCL
下載地址,我下的是pcl1.8版本的。
解壓后進入文件夾 $ mkdir build $ cd build 用Kintinuous主頁給的cmake命令編譯pcl之后,會缺少頭文件,下面這個命令就ok $ cmake -D CMAKE_BUILD_TYPE=Release -D BUILD_GPU=OFF -D BUILD_examples=OFF .. $ make -j8 $ sudo make install $ sudo ldconfig5. 安裝OpenNi2
安裝依賴 $ sudo apt-get install -y g++ python libusb-1.0-0-dev freeglut3-dev doxygen graphviz $ sudo apt-get install libudev-dev在源中尋找openni2 $ apt-cache search openni2 能找到的話會顯示以下內容,否則要更換源 libopenni2-0 - framework for sensor-based 'Natural Interaction' libopenni2-dev - headers for OpenNI 'Natural Interaction' frameworks openni2-doc - developer documentation for OpenNI frameworks openni2-utils - debug and test utilities OpenNI2 framework安裝 $ sudo apt-get install libopenni2-dev 測試,能顯示版本號就是安裝成功了。 $ pkg-config --modversion libopenni26. 安裝DLib
v1.0版本的下載地址,我編譯的時候出現了以下錯誤提示:
/home/zxq/桌面/DLib-master/src/DVision/FSolver.cpp:149:39: error: ‘REDUCE_SUM’ is not a member of ‘cv’cv::reduce(sq_ab, norms, 0, cv::REDUCE_SUM); // 0 = single row^~~~~~~~~~ /home/zxq/桌面/DLib-master/src/DVision/FSolver.cpp:160:36: error: ‘REDUCE_SUM’ is not a member of ‘cv’cv::reduce(prod, dot, 0, cv::REDUCE_SUM); // dot is Nx1 /home/zxq/桌面/DLib-master/src/DVision/HSolver.cpp:144:39: error: ‘REDUCE_SUM’ is not a member of ‘cv’cv::reduce(sq_ab, error, 0, cv::REDUCE_SUM); // 0 = single row其實就是變量名字問題,到出現錯誤的cpp文件對應位置,把"cv::REDUCE_SUM"改為"CV_REDUCE_SUM",再重新make、sudo make install就ok啦。
7. 安裝DBoW2
v1.0-nonfree版本的下載地址,編譯的時候提示找不到頭文件<opencv2/xfeatures2d/nonfree.hpp>,于是到這個位置找了下,確實沒有這個頭文件,這個引用應該改為<opencv2/nonfree/nonfree.hpp>。
8. 安裝DLoopDetector
v1.0版本的下載地址。
9. 安裝iSAM
下載地址,我下的是v1_7版本的。
進入解壓后的文件夾編譯安裝,不需要安裝別的依賴項。
10. 安裝Pangolin
下載地址,我用的是高博SLAM十四講提供的庫版本。
11. 編譯、運行時候的一些問題
(1) 報錯:usr/local/include/DVision/BRIEF256.h:284:12: error: ‘DUtils’ has not been declared 解決方法:在usr/local/include/DVision/BRIEF256.h頭文件引用中添加#include <DUtils/DUtils.h>(2) 運行時報錯:no kernel image is available for the device 解決方法:確定已安裝的cuda和自己的顯卡是適配的話,那就是cuda的計算框架不匹配。 到CMakeLists.txt中,看到有這一項:set(CUDA_ARCH_BIN "20 30 35 50 52"),含義是在cmake時,編譯器會自動從引號里面的計算框架中選擇,排在第一個的20會被優先選擇,于是我們可以把20去掉,也可以到官方網站:http://developer.nvidia.com/cuda-gpus中查自己顯卡適配的計算架構,比如我的rtx3060適合的就是8.6,于是就可以在里面把引號里的內容改成“8.6”。我最終是改成“50”,在編譯和運行時候解決了一些其他問題,最終通過。(3)編譯時提示類似'.sync'或者沒有'__shlf_down()'的問題 解決方法:按錯誤提示,1)找到有__ballot(x)函數的地方,改為__ballot_sync(__activemask(), x);2)找到有__shfl_down(temp, offset)的地方,改為__shfl_down_sync(0xFFFFFFFF, temp, offset)(4)運行時提示Eigen字節對齊問題 解決方法:參考錯誤提示給出的官網鏈接知道編譯時候用C++17標準就行了,具體方法是,在Kintinuous的CMakeLists.txt中開頭和CMAKE其他設置差不多的位置,加上下面兩句: set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD 17)12. 最終運行
最終編譯后,用github上給的命令:./Kintinuous -s 7 -v ../vocab.yml.gz -l loop.klg -ri -fl -od運行的時候,到回環檢測那就報了double free or corruption(out)的錯然后退出了。到網上一搜,全是ORB SLAM項目出這個問題的解決方法,基本都是依賴庫配置問題。我的解決方法是去掉-od,也就是不運行placeRecognition和Deformation線程,這樣可以正常跑。在圖形化界面點擊"‘save’就可以保存.pcd文件和pose文件。
配環境、看代碼、看論文,加起來花了兩周的時間,還沒搞清楚問題出在哪,又因為打算干別的活兒,于是就把這個錯放過去了。
如果有小伙伴也遇到這個問題并且解決了,萬望告知!
總結
以上是生活随笔為你收集整理的Ubuntu18.04配置运行Kintinuous的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英雄无敌6服务器在哪个文件夹,英雄无敌6
- 下一篇: 考研英语九附双语阅读:英国品牌美国遇冷