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 文件,即输入以下命令

$ sudo add-apt-repository ppa:graphics-drivers/ppa

2. 安装CUDA

实验室小伙伴跟我是一个版本的显卡驱动,他要跑神经网络模型,倒腾了好长时间,中间还重装系统,终于试出了CUDA11.3版本的是最合适的,这里我就直接奉行拿来主义,跟他装了一个版本的CUDA。
安装过程参考博客:Linux下安装cuda和对应版本的cudnn,输入完执行.run文件的命令回车后要耐心等一会~
CUDA11和10安装时的提示过程不太一样,到下面这一步的时候,要在第一个选项上回车,取消安装显卡驱动。
Ubuntu18.04配置运行Kintinuous_第1张图片
当系统存在多个版版本的CUDA时,可以用以下命令切换系统当前使用的CUDA版本。

$ cd /usr/local
$ sudo rm -rf cuda
$ sudo ln -s /usr/local/cuda-11.0 /usr/local/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_version

3.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 updatedb

3.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:

$ sudo rm -r /usr/local/include/vtk*
$ sudo rm -r /usr/local/lib/libvtk*

卸载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.12

4.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-dev

4.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 ldconfig

5. 安装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 libopenni2

6. 安装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版本的下载地址,编译的时候提示找不到头文件,于是到这个位置找了下,确实没有这个头文件,这个引用应该改为

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 

(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文件。
配环境、看代码、看论文,加起来花了两周的时间,还没搞清楚问题出在哪,又因为打算干别的活儿,于是就把这个错放过去了。
如果有小伙伴也遇到这个问题并且解决了,万望告知!

你可能感兴趣的:(视觉三维重建,ubuntu,计算机视觉)