Ubuntu16.04 编译运行Kintinuous算法
来源:互联网 发布:营销软件知乎 编辑:程序博客网 时间:2024/05/22 09:40
编译运行Kintinuous算法:
系统信息:
ubuntu16.04
i7 GTX860m
过程:
首先从网上找到一份实现Kintinuous代码:
https://github.com/mp3guy/Kintinuous
阅读readme 可知运行Kintinuous需要依赖:
Cmake #允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件
OpenGL#图形库
CUDA>= 7.0#gpu加速运算库
OpenNI2#OpenNatural Interaction搭建视觉和音频传感器与视觉和音频感知中间件通信的桥梁。
SuiteSparse#稀疏矩阵处理工程,是一组C、Fortran和MATLAB函数集
Eigen#C++矩阵运算库
Boost#可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一
zlib#提供数据压缩用的函式库
libjpeg#处理JPEG图像数据格式的自由函式庫
OpenCV
DLib @330bdc10576f6bcb55e0bd85cd5296f39ba8811a#机器学习库,有c++和python两个版本,这里用的是c++版本 注意@后面是版本号,装错版本让编译过程收到极大的阻碍
DBoW2 @4a6eed2b3ae35ed6837c8ba226b55b30faaf419d#Bags of binary wordsfor fast place recognition in image sequence,使用的特征检测算法为Fast,描述子使用的是brief描述子,是一个视觉词袋库,它提供了生成和使用词典的接口
,DLoopDetector @84bfc56320371bed97cab8aad3aa9561ca931d3f#基于DBoW2构建和使用视觉词典,并且添加了回环检测算法模块和验证模块,是一个完整的回环检测/拓扑制图系统。
iSAM#IncrementalSmoothing and Mapping递增平滑与地图构建算法
PCL#点云库,实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。
Pangolin#处理opengl 显示 交互和提取视频输入的库
通过apt-getinstall 可以安装大部分的依赖:
sudo apt-get install g++ cmake cmake-gui doxygen mpi-default-devopenmpi-bin openmpi-common libflann-dev libeigen3-dev libboost-all-devlibvtk5-qt4-dev libvtk6.2 libvtk5-dev libqhull* libusb-dev libgtest-dev git-core freeglut3-dev pkg-config build-essentiallibxmu-dev libxi-dev libusb-1.0-0-dev graphviz mono-complete qt-sdk
本机之前装了oracle的java,具体装法可以参考这里,故这里没有安装openjdk-7-jdkopenjdk-7-jre
其余不能通过apt-get安装的库:
cuda:
参考文章https://gist.github.com/dangbiao1991/7825db1d17df9231f4101f034ecd5a2b
首先需要装显卡驱动:
去官网查适合自己计算机的显卡驱动
http://www.nvidia.cn/Download/index.aspx?lang=cn
查询对应显卡对应的驱动 替代命令中的版本号
sudo apt install nvidia-375 nvidia-settings nvidia-prime#prime是为了解决可能出现装了驱动后无法登陆ubuntu的问题
安装完成后重启:
证明驱动已装。
接下来装cuda。
参考网址:
http://www.52nlp.cn/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E4%B8%BB%E6%9C%BA%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE-ubuntu-16-04-nvidia-gtx-1080-cuda-8#comments
去cuda官网下驱动。适合ubuntu16.04的为cuda8.0
sudo sh cuda_8.0.27_linux.run
下载安装完,跑例子:
证明cuda成功。
安装pcl:
从github下载下载源码编译。
git clonehttps://github.com/PointCloudLibrary/pcl.git
cd pcl
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release-DBUILD_GPU=OFF -DBUILD_apps=OFF -DBUILD_examples=OFF ..
make -j4#取决于你的cpu的核的数量
sudo make install
sudo ldconfig#动态链接库管理命令。,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。在运行这个命令时报了一个错,解决方案可以在stackoverflow上找到详细解答
OpenNI2:
$ git clonehttps://github.com/occipital/OpenNI2
$ cdOpenNI2
$ make -j4
由于没有生成cmake_install.cmake文件,所以不能/usr/lib中找到此库,在编译Kintinuous时需要手动把此库的lib和libOpenNI2.so地址加入。
Opencv:
从opencv官网下载2.4.9版本,到目录下
mkdir build
cd build
cd cmake ..
make
sudo makeinstall
DLib, DBoW2, DLoopDetector, iSAM and Pangolin的安装方法也类似,下载对应源码后输一次上述命令即可。
需要注意的是,我在下载dlib时,github上有两个版本,一个星数高的没有提供install文件,需要自己更改Kintinuous的makelist文件。另外一个即是本文提供的超链接,提供了install省了不少事,但是卸载的时候就比较头疼。诸位自己取舍。
还有一点是Dlib,DBoW2,DLoopDetector在下载是要选择旧版本(点击tag可以选),不然编译时会出很多错。
装完依赖库后,最后就是编译Kintinuous了。
Kintinuous:
从github下载Kintinuous
cmake 编译,可以选用gui版本方便选择参数。
第一次编译过程出现找不到opencv_dep_cudart,在编译kintinuous的时候加入-D CUDA_USE_STATIC_CUDA_RUNTIME=OFF;
在编译
此时把对应地址补上。编译即可成功。
去到生成的文件夹中,运行make
生成 Kintinuous。从here 下载数据loop.klg
运行例子
./Kintinuous -s 7 -v ../vocab.yml.gz -l loop.klg -ri -fl -od#vocab.yml.gz在master目录下
第一次出现
Segmentation fault (core dumped)
第一反应是完了还要去检查源码,心情绝望。
后面看项目的issue
看到有人在跑例子时也遇到问题,虽然他有报具体的错误,不过还是按照里面的该法试了一下。具体做法:
改Kintinuous/src/CMakeLists.txt,
把61 加到set(CUDA_ARCH_BIN "20 30 35 50 52 " CACHE。。这句
改成:set(CUDA_ARCH_BIN "20 30 35 50 52 61" CACHE STRING
再次编译build,\
例子成功运行。
以上编译完成。
下面记录自己遇到的坑。
第一次没有按教程跑代码,采取直接编译Kintinuous,遇到问题直接解决的思路。
遇到DLib 问题:
去下dlib的库:
https://github.com/davisking/dlib
根据网上资料:
如果要自己建立工程,可以仿照dlib/examples/CMakeLists.txt,直接include(dlib/dlib/cmake)文件即可,如下:
cmake_minimum_required(VERSION 2.8.4)
PROJECT(dlib_test)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11-O2")
IF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weverything")
ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall-Wextra")
ENDIF()
INCLUDE(/home/hpc/Michael/dlib/dlib/cmake)
ADD_EXECUTABLE(dlib_test dlib_test.cpp)
TARGET_LINK_LIBRARIES(dlib_test dlib)
然而修改了Kintinuous的cmake文件依然报错。
尝试编译c++例子:
经查询:
在CMakeLists.txt中找到
find_package(OpenCV QUIET)
前面加上set(CUDA_USE_STATIC_CUDA_RUNTIMEOFF)
例子编译执行成功,证明dlib库没问题
但cmake依然报错。应该是库没有安装到系统所以Kintinuous找不到dlib的配置文件。
换一种思路。
文档上让我们编译例子,因为例子要用到所下载的库,可以通过看例子的CMakeLists.txt来学习如何在外部文件中使用dlib库。
把dlib的绝对路劲写死进去,更改cmakelist,修改的比较多,由于时间所限没有继续实行下去,改为按照教程走。
总结:
本次实验依赖的大量库都需要自己从网上下载后编译,对cmake的用法有了一定的了解。
但对cmkelist语法不熟悉,不能自主改cmakelist以适应需求。
其次我学会了利用github中的issue。遇到问题直接搜索得到的答案没有针对性。但issue中的问题就很有参考价值。很多问题的表现形式虽然不同,但解决方法相似,要好好利用。
- Ubuntu16.04 编译运行Kintinuous算法
- ubuntu16.04 + Kintinuous + ElasticFusion成功配置运行
- Ubuntu16.04编译运行geekOS
- Kintinuous 算法精讲
- Ubuntu16.04下编译打包运行MapReduce Hadoop3.0.0-alpha4
- Kintinuous + Elastic Fusion 配置运行方法
- ubuntu 16.04+kinect v1配置运行 Kintinuous
- ubuntu16.04 运行dso_ros
- ubuntu16.04编译seetaface
- Ubuntu16.04编译caffe
- Ubuntu16.04编译Tensorflow
- Ubuntu16.04 编译 OpenJDK7
- ubuntu 1604 运行 kintinuous 出现的问题及解决方案
- 关于Ubuntu16.04安装opencv2.4.13及编译运行opencv程序的相关问题
- Ubuntu16.04 编译ijkplayer so,并导入android,运行官方demo
- Ubuntu16.04下编译OpenCV
- Ubuntu16.04中编译openjdk7
- Ubuntu16.04内核编译流程
- 1043. 输出PATest(20)
- Libevent源码分析-----与event相关的一些函数和操作
- Android群英传学习笔记(1-20)
- vs2012工程转成vs2010
- EMC设计技巧及经验总结1:常用元件
- Ubuntu16.04 编译运行Kintinuous算法
- 闪回表操作语法+使用闪回删除
- 开发中缓存的清理部分
- js函数调用的四种方式
- Libevent源码分析-----通用类型和函数
- [饼干]安卓小秘密-不扩大view宽高增加其可触控范围
- 84. Largest Rectangle in Histogram
- HDU 4027 Can you answer these queries? (线段树
- Gym