天天看點

agx 安裝ros opencv_Ubuntu16.04+ROS+SLAM編譯環境

agx 安裝ros opencv_Ubuntu16.04+ROS+SLAM編譯環境

網上有好多配置Ubuntu16.04+ROS+SLAM環境的部落格,但實在是太多坑了,各種依賴的版本号和安裝的位址都會有問題,經過我自己的反複嘗試,終于找到了最适合的環境,大家可以直接參考我的環境,跑大部分的程式都沒有問題。

下面是正文,

保姆級教程

(背後都是我的血淚教訓):

目錄

一、編譯問題彙總

(一)可能出現的問題

(二)清理已有的環境

二、ROS安裝

三、OpenCV安裝

四、qt安裝

五、Cuda安裝

六、Eigen安裝

七、pcl安裝

八、g2o安裝

注意:後面的依賴有一定的次序,最好按照順序安裝。

一、編譯問題彙總(持續更新)

(一)可能出現的問題

​ 如果出現下面的問題,基本上都是環境的問題:

  1. double free or corruption

這個坑導緻我下決心重新配置環境,将系統的依賴清理一遍,防止以後再出錯。雖然這個報錯的出現可能會是指針使用、記憶體不足等等的問題,但如果你發現運作好幾個不同的程式都出現了這個問題,那麼基本上就是環境的問題了。

2.

Cannot generate a safe runtime search path for target...
runtime library [libopencv_videostab.so.2.4] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /usr/local/lib
           

類似于這樣的,不僅是opencv,還有pcl。

3.

其它還有好多我忘了,可以在評論留言或私信我,如果我見過就會加上......

(二)清理已有的環境

​ 首先我們得知道檔案安裝在了哪裡,如果是通過

sudo apt-get install

安裝的,那麼會将檔案安裝到

/usr/include

目錄下,同時

/usr/share /usr/lib /usr/bin

目錄都會有相關檔案,如果是通過源碼編譯安裝的,那麼就會到

/usr/local/include /usr/local/lib /usr/local/bin /usr/local/share

目錄下,同時,我們得知道系統的檢索優先級為

先找/usr/include目錄下的檔案,再找/usr/local/include下的檔案,也就是說後者相當于是前者的子集

,是以如果要解除安裝安裝的包,我們就在這些對應目錄下删除檔案即可,一般來說将include和lib檔案的檔案删了就好了,當然如果想更加幹淨一些的話可以都找到然後删除。

通過apt-get方式安裝的包删除方式:

直接終端apt-get删除

sudo apt-get remove [包的名稱]
sudo apt-get autoremove
sudo apt-get autoclean
           
通過源碼安裝方式的包有兩種删除方式:
  1. 有些包自帶解除安裝(以pcl舉例)
cd pcl-pcl-1.7.2/build
sudo make uninstall
           

2. 自己删除對應檔案(以g2o舉例)

cd /usr/local/include
sudo rm -rf g2o
cd ../lib
sudo rm -rf libg2o*
           

*号代表後面包含任意字元

二、ROS安裝

此處不涉及具體的ROS安裝教程,如果沒用過ROS的可以參考其他部落格和官方文檔。這裡的ROS安裝是因為清理系統以後會有很多ros依賴被連帶删了,是以需要重新安裝一下,指令如下:

sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
           

此外後面還會出現一些ros依賴沒有安裝的情況,會在編譯時報錯,不是大問題,直接安裝上即可。安裝的方法很簡單,加上字首ros-kinetic-即可,并将下劃線改為”-“,舉個例子,比如編譯過程報錯顯示/opt/ros沒有找到velodyne_pointcloud,那就執行指令:

sudo apt-get install ros-kinetic-velodyne-pointcloud
           

别的ros版本也會有類似問題,把字首改成自己版本号即可,比如melodic就改成ros-melodic。

三、OpenCV安裝

OpenCV選擇源碼安裝,版本最好3以上,因為OpenCV2到3之間差别很大,我是安裝了4.2,先是安裝依賴:

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
           

然後安裝包:

git clone https://github.com/opencv/opencv.git opencv-4.2.0
cd opencv-4.2.0
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..  
make -j4
sudo make install
           

make後面-j4意味着4線程,可以根據自己計算機性能選擇-j1 -j2 -j4 -j8,我平時會用-j8,比較快。

四、qt安裝

qt自帶的版本是4,我之前安裝了4,指令如下:

sudo apt-get update
sudo apt-get install qt4*
sudo apt-get install qtcreator
           

但很多依賴需要5,是以我又安裝了qt5.14.1(計算機同時有2個版本的qt暫時不會有問題,是以就讓它們都在那裡了),這個需要去 qt下載下傳位址 自行下載下傳

.run

檔案,接着到檔案所在目錄輸入:

sudo chmod +x qt-opensource-linux-x64-5.14.1.run
./qt-opensource-linux-x64-5.14.1.run
           

解釋一下,chmod +x是賦予可執行權限,如果看到chmod u+x其實也是一樣的,u就是user,别的文法可以自行谷歌/百度。

安裝完後可選擇安裝一些檔案:

sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev
           

五、Cuda安裝

這個很重要,用cuda可以讓一些程式更流暢,比如Autoware就可以選擇cuda編譯,親測如果不用cuda會出現卡頓。Ubuntu16.04安裝的是Cuda9.0,我之前也試過10.0的,但還是9.0更相容一些首先需要安裝顯示卡驅動,先禁用nouveau驅動,輸入:

sudo gedit /etc/modprobe.d/blacklist.conf
           

在文本後加上:

blacklist nouveau
options nouveau modeset=0
           

然後儲存退出,輸入:

sudo update-initramfs -u
           

再輸入:

lsmod | grep nouveau
           

如果沒有輸出,那麼這一步就ok了。

然後去NVIDIA下載下傳連結下載下傳驅動,找到對應自己電腦顯示卡型号的驅動下載下傳即可,作業系統選擇Linux的,下載下傳類型長壽命,然後就會得到NVIDIA-Linux-x86_64-430.09.run檔案,

注意:一定要将它放到根目錄下!

接下來一定要小心了,很容易出問題!

下面标注的安裝步驟建議看完并且手機拍照後再操作!
首先輸入(F1改成F1~F6都行):
Ctrl-Alt+F1

這個時候你的螢幕黑了,會提示你pc login: 先輸入你的使用者名然後回車,會讓你輸入password: 然後輸入密碼就進入了指令界面。
接着輸入:
sudo service lightdm stop

X-Window服務就被禁用了,然後解除安裝原有顯示卡驅動,善用Tab按鍵自動補齊檔案名:
sudo apt-get remove --purge nvidia*
sudo chmod +x NVIDIA-Linux-x86_64-410.09.run
sudo ./NVIDIA-Linux-x86_64-410.09.run --uninstall

接着開始安裝:
sudo ./NVIDIA-Linux-x86_64-410.93.run

一直回車預設即可,安裝好後輸入:
sudo service lightdm restart

就回到了圖形界面,重新進入即可。
           
特殊情況: 1. 如果你在安裝結束後或者以後開機出現登入界面輸入密碼後進入不了,反複彈出登入界面的情況,就是這個顯示卡驅動的問題,主要原因是顯示卡驅動和Ubuntu16.04不是完全相容,是以時而會不穩定,需要重新安裝。解決方法是重新Ctrl-Alt+F1進入指令界面,删除幹淨之前的驅動,用sudo apt-get remove --purge nvidia*确認解除安裝幹淨後再sudo ./NVIDIA-Linux-x86_64-410.09.run,安裝好即可。 2. 如果出現進入指令界面刷屏的現象,其實指令還是可以輸的,隻是你看不見,或者會在每一行開頭出現,這個時候就隻能盲打,先解除安裝之前安裝的nvidia驅動(比如我之前安裝了另一個nvidia384的驅動就出現了這個情況),用sudo apt-get remove [你安裝的nvidia驅動],然後會發現不刷屏了,再重新安裝NVIDIA-Linux-x86_64-410.93.run驅動即可。 3. 如果2方法無效,那先強制關機,啟動後進入Ubuntu進階選項,選擇recovery mode,選擇修複包,然後重新開機。

至此驅動安裝完畢,可以終端輸入:

nvidia-smi
           

檢視自己的驅動資訊,如果有顯示則安裝成功了,接着就安裝cuda,進入cuda下載下傳位址,下載下傳對應版本的runfile(選擇base installer即可,後面幾個不需要)。下載下傳完成後,輸入:

chmod +x cuda_9.0.176_384.81_linux.run
sudo ./cuda_9.0.176_384.81_linux.run
           

這裡需要權限是以用了sudo安裝。先會有說明,直接Ctrl+C退出即可,接着會有提示,按照下面的輸入:

Do you accept the previously read EULA?
accept/decline/quit: accept

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?
(y)es/(n)o/(q)uit: n

Install the CUDA 9.0 Toolkit?
(y)es/(n)o/(q)uit: y

Enter Toolkit Location
 [ default is /usr/local/cuda-10.0 ]:  (直接回車)

Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y

Install the CUDA 9.0 Samples?
(y)es/(n)o/(q)uit: n
           

安裝完畢後輸入:

gedit ~/.bashrc
           

在最後加上:

export CUDA_HOME=/usr/local/cuda-9.0
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
export PATH=${CUDA_HOME}/bin:${PATH}
           

儲存後退出,終端輸入:

source ~/.bashrc
           

再輸入:

nvcc -V
           

會顯示版本資訊,就安裝成功了。

六、Eigen安裝

首先安裝lib版本的eigen,終端直接輸入:

sudo apt-get install libeigen3-dev
           

很簡單,但是之後會有很多報錯和Warning,Warning其實可以忽略,不會對程式造成很多問題,但是總是會報錯提示找不到Eigen已經一個unsupported檔案,為了一勞永逸,需要将這兩個都直接連結到/usr/include目錄下,輸入:

sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen
sudo ln -s /usr/include/eigen3/unsupported /usr/include/unsupported
           
或者

,簡單粗暴直接複制:

sudo cp -r /usr/include/eigen3/Eigen /usr/include
sudo cp -r /usr/include/eigen3/unsupported /usr/include
           

這樣就可以了。此外,有些程式還是檢測不到eigen,或者需要更高版本的eigen,是以我又源碼編譯了一個檔案,這個不難操作,讀者可以根據自己的需求安裝,就不示範了,隻是注意最後copy的時候是在/usr/local/include目錄下:

sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include
           

七、pcl安裝

pcl安裝又是一個大坑,這個建議不要按照網上别的部落格的來,我都試過,但最後的效果很不友好。首先安裝依賴:

sudo apt-get update  
sudo apt-get install git build-essential linux-libc-dev  
sudo apt-get install cmake cmake-gui   
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev  
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common    
sudo apt-get install libflann1.8 libflann-dev  
sudo apt-get install libeigen3-dev  
sudo apt-get install libboost-all-dev  
sudo apt-get install libqhull* libgtest-dev  
sudo apt-get install freeglut3-dev pkg-config  
sudo apt-get install libxmu-dev libxi-dev   
sudo apt-get install mono-complete  
sudo apt-get install qt-sdk openjdk-8-jdk openjdk-8-jre
           

如果你對比了上面的依賴項和網上大多數部落格的依賴項,你會發現少了一項,那就是vtk項,大多數會讓你輸入sudo apt-get install libvtk5.10-qt4 libvtk5.10 libvtk5-dev(千萬别輸入),因為如果你輸入了這個,你會發現它會自動給你删除很多ros-kinetic-開頭的依賴,然後你如果還是輸入了這一步驟,打算再安裝ROS的依賴,你又會發現它會幫你解除安裝掉vtk。也就是說這兩者是彼此沖突的。

其實pcl在之前安裝ROS的時候就已經幫你安裝好了,但是有時候還是會有問題,是以最好的方法是先解除安裝libpcl,接着安裝vtk6的依賴,輸入:

sudo apt-get remove libpcl-dev
sudo apt-get install libvtk6-dev libvtk6.2
           

千萬别用源碼安裝vtk,因為源碼安裝的版本是vtk7以上的,而vtk7以上的隻和pcl1.8以上的相容,而如果你安裝了pcl1.8你會發現很多SLAM程式相容pcl1.7而不相容pcl1.8,并且源碼編譯還更麻煩。當你安裝好vtk6以後,再重新安裝libpcl,輸入:

sudo apt-get install libpcl-dev pcl-tools
           

再檢查一下有沒有ROS依賴缺失,輸入:

sudo apt-get install ros-kinetic-desktop-full
           

千萬别去安裝網上一些說的libpcl-all,你會發現根本安裝不了,其實Ubuntu16.04的是libpcl-dev,安裝這個沒有任何問題,也不會有網絡問題。

八、g2o安裝

其實Ubuntu16.04已經内置了libg2o了,一般沒什麼問題,但有時候會出問題,可以再手動源碼編譯一個,首先安裝依賴:

sudo apt-get install libcholmod3.0.6
sudo apt-get install libsuitesparse-dev
sudo apt-get install freeglut3 freeglut3-dev freeglut3-dbg
sudo apt-get install libqglviewer2 libqglviewer-dev libqglviewer-doc
sudo apt-get install libeigen3-dev libeigen3-doc
           

基本上之前都安裝過了。接着輸入:

git clone https://github.com/RainerKuemmerle/g2o.git
cd g2o
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=RELEASE
make -j4
sudo make install
           

注意,cmake後面的一大串不要省略。有些程式可能隻相容老版的g2o,比如hdl-graph-slam,一般來說按照上面的編譯就不會有問題了,但是如果有問題可以嘗試解除安裝安裝的g2o,再下載下傳另一個版本的g2o,比如hdl-graph-slam的作者提供了一個版本的g2o:

git clone https://github.com/koide3/g2o.git
cd g2o
git checkout hdl_graph_slam
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=RELEASE
make -j8
sudo make install
           

或者安裝高博的視覺SLAM十四講裡的g2o,到視覺SLAM十四講g2o下載下傳連結找到對應檔案下載下傳編譯安裝即可。

還有一些優化庫比如ceres和gtsam一般不會出現問題,可以随便找個部落格按照裡面的教程安裝即可,就不在這裡展示了。

繼續閱讀