Date: 2018-11-24
Author: liqisa
E-Mail: [email protected]
最近在研究三维重建项目,拿最经典的 KinectFusion 来练手,遇到了很多问题,网上大多数教程是在Windows下实现的,且多数是kinect1版本的,坑比较多,这次就写写自己配置成功的经验,希望可以帮助到有需要的人。
网上已经有很多介绍了,KinectFusion官网上也有详细的论文介绍
CSDN博客:
https://blog.csdn.net/xiaohu50/article/details/51592503
https://blog.csdn.net/baidu_17313961/article/details/52862416
微软的官方介绍:
https://www.microsoft.com/en-us/research/project/kinectfusion-project-page
首先要强调的是微软的KinectFusion并不开源,相反, PCL(PointCloud Library) 开源了这个算法的代码,名为 Kinfu ,所以,这个算法实际上是基于PCL的
这里先给出项目需要安装的依赖项
我的笔记本是 1050Ti ,装的是nvidia-384的驱动,CUDA8.0
个人觉得版本问题不大,适合自己的显卡就好
网上有很多显卡安装的教程,大多数是禁用nouveau
以后再手动执行 .run
文件
我个人装过几次,觉得一方面是麻烦,另外一点是时常会遇到重启之后又自动换回默认驱动的问题,重启后执行nvidia-smi
又没有输出了。
所以这里给大家推荐一个最简单的安装合适的Nividia显卡驱动的方法:
首先点击这里查询适合自己的显卡驱动:
其实用老一点版本的驱动问题不大,只要能适配到合适的CUDA版本都可以。
然后执行:
- 更新下源 :
sudo apt-get upgrade
sudo apt-get update
- 查询nvidia驱动可用版本,运行:
sudo apt-cache search nvidia-*
查询ppa安装支持的版本驱动,如果有384- 安装nvidia驱动,
sudo apt-get install nvidia-384
在设置的软件中心里选择Additional Driver
可以看到可选的几个显卡驱动,选择我们已经安装的384(已安装会显示propriety
)然后应用就可以完成显卡驱动的安装和切换了
cd Downloads/
sudo sh cuda_8.0.27_linux.run
Nvidia-Samples
,这样也方便检查安装是否成功sudo gedit /etc/profile
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64$LD_LIBRARY_PATH
sudo reboot
编译并测试设备 deviceQuery:
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
编译并测试带宽 bandwidthTest:
cd ../bandwidthTest
sudo make
./bandwidthTest
sudo apt-get install libboost1.48-dev libboost1.48-all-dev libeigen3-dev libflann-dev libvtk5-dev libqhull-dev
sudo apt-get install -y g++ python libusb-1.0-0-dev freeglut3-dev doxygen graphviz libudev-dev
sudo apt-get install openni2-dev #安装openni2
sudo apt-get install openni2-utils
ubuntu16.04是可以通过sudo apt-get
来安装OpenNI的,14.04的话只能自己去下载源码编译安装了
OpenNI的地址:https://github.com/OpenNI
Kinect2 使用的是OpenNI2,因为只有OpenNI2才能和libfreenect2配套使用
这里最好装一下ccmake
和 cmake-gui
,可以用来检查cmake的配置项是否开启,不过一般都是默认开启的。
sudo apt-get install cmake-gui
sudo apt-get install cmake-curses-gui
运行 pkg-config --modversion libopenni2
查看libopenni2是否安装成功,如果输出版本号就说明安装成功
libfreenect2 是kinect2 使用的版本,和OpenNI2 配套使用,千万不要搞错了
安装和教程和源码:https://github.com/OpenKinect/libfreenect2
不想看英文安装教程也可以继续看下文:
git clone https://github.com/OpenKinect/libfreenect2.git
sudo apt-get install libturbojpeg libjpeg-turbo8-dev
sudo apt-get install libglfw3-dev
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2
make
sudo make install
复制一下规则
sudo cp ../platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/
这个时候连上 kinect2 (注意要用 USB3.0 的接口),然后执行:
./bin/Protonect
如果没有图像输出的话,就给kinect断电重连一下,一般来说就会:
接下来测试OpenNI2是否链接到libfreenect2了
sudo apt-get install openni2-utils && sudo make install-openni2 && NiViewer2.
如果成功了的话,会出现如图
如果没有出现图像,就需要检查一下OpenNI2库中有没有libfreenect
的库文件了
如果没有的话就去libfreenect/build/lib/
目录下把库文件拷贝过来
到这里,千里之行已经始于足下了,所有的准备都做好了,接下来就是编译pcl了
git clone https://github.com/PointCloudLibrary/pcl.git pcl-trunk
cd pcl-trunk
这一步是本博文最为重要的一个步骤!
把pcl-trunk/gpu/kinfu/tools/kinfu_app.cpp
,做如下改动
- 头文件增加
#include pcl/openni2_grabber.h
- main函数中
capture.reset(new pcl::OpenNIGrabber())
替换成capture.reset(new pcl::io::OpenNI2Grabber())
- 整个文档中
openni_wrapper
替换成pcl::io
- startMainLoop函数中
pcl::ONIGrabber
替换成pcl::io::OpenNI2Grabber
pcl-trunk/gpu/kinfu_large_scale/tools/kinfuLS_app.cpp
中也做同样改动
参考链接:https://blog.csdn.net/u011426016/article/details/81395795?utm_source=blogxgwz2
先检查一下CMake配置
mkdir build && cd build
ccmake ..
之后开始配置编译选项,按t
键进入高级模式设置,按c
键进行配置,确保:
BUILD_GPU ON
BUILD_CUDA ON
BUILD_OPENNI ON
BUILD_gpu_kinfu ON
BUILD_gpu_kinfu_large_scale ON
按g
生成 makefile
, 然后就可以编译了
make -j8
sudo make install
编译需要蛮长时间的,耐心等待…
在编译过程中,你可能会遇到以下问题:
1.错误像”Error: no such instruction: vfmadd312ss”,这个错误是因为你使用到是corei7处理器
解决办法:
cd …
cd cmake
sudo gedit pcl_find_sse.cmake
将 “-march=native” 替换为 “-march=corei7”
官方测试文档: http://pointclouds.org/documentation/tutorials/using_kinfu_large_scale.php#using-kinfu-large-scale
文章开头是我的邮箱,有什么问题欢迎与我交流~
[1] https://blog.csdn.net/xiaocainiaodeboke/article/details/52388110
[2] https://blog.csdn.net/u011426016/article/details/81395795?utm_source=blogxgwz2
[3] https://blog.csdn.net/billbliss/article/details/56489674
[4] https://blog.csdn.net/xiaocainiaodeboke/article/details/52353191