agx 安装ros opencv_Ubuntu16.04+ROS+SLAM编译环境

c543f2ec310193d04412df603395fa7b.png

网上有好多配置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一般不会出现问题,可以随便找个博客按照里面的教程安装即可,就不在这里展示了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值