1. 安装依赖
- libusb >= 1.0.18 (Windows needs >= 1.0.22)
- CMake >= 3.1.0
- python >= 2.7 or >= 3.3 (only if BUILD_PYTHON=ON or BUILD_PYTHON2=ON or BUILD_PYTHON3=ON or BUILD_REDIST_PACKAGE=OFF)
2. 克隆以及编译libfreenect
克隆下来之后,编译之前,注释掉libfreenect/src/usb_libusb10.c文件中,第357行如下代码:
//libusb_reset_device(audioHandle);
避免运行libfreenect/wrapper/python目录下 demo造成如下错误:
Found sibling device [same parent]
Failed to set the LED of K4W or 1473 device: -1
Found sibling device [same parent]
Could not open device: -1
步骤:
git clone https://github.com/OpenKinect/libfreenect
cd libfreenect
mkdir build
cd build
cmake .. -DBUILD_PYTHON2=ON #因为本人使用python2 但是系统默认的是python3,因此此处声明python2
make
如果在编译过程中出现如下错误:
[ 94%] Building CXX object wrappers/cpp/CMakeFiles/freenect-cppview.dir/cppview.cpp.o
In file included from /home/rais/version-control/libfreenect/wrappers/cpp/cppview.cpp:27:0:
/home/rais/version-control/libfreenect/wrappers/cpp/libfreenect.hpp:182:8: error: ‘unique_ptr’ in namespace ‘std’ does not name a template type
std::unique_ptr<uint8_t[]> m_rgb_buffer;
^
/home/rais/version-control/libfreenect/wrappers/cpp/libfreenect.hpp: In member function ‘void Freenect::FreenectDevice::setVideoFormat(freenect_video_format, freenect_resolution)’:
/home/rais/version-control/libfreenect/wrappers/cpp/libfreenect.hpp:115:5: error: ‘m_rgb_buffer’ was not declared in this scope
m_rgb_buffer.reset(new uint8_t[mode.bytes]);
^
wrappers/cpp/CMakeFiles/freenect-cppview.dir/build.make:62: recipe for target 'wrappers/cpp/CMakeFiles/freenect-cppview.dir/cppview.cpp.o' failed
make[2]: *** [wrappers/cpp/CMakeFiles/freenect-cppview.dir/cppview.cpp.o] Error 1
CMakeFiles/Makefile2:810: recipe for target 'wrappers/cpp/CMakeFiles/freenect-cppview.dir/all' failed
make[1]: *** [wrappers/cpp/CMakeFiles/freenect-cppview.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2
那么你需要在libfreenect目录下的CMakeLists.txt文件中,大约119行处添加如下代码:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
Tips:如果遇到其他的错误,可以尝试减低Cmake 以及make的版本,因为本人使用的Jerson Tx2 板子,CPU架构不同于普通的PC,因此在降低Cmake、make版本过程当中遇到不少的错误,但是这些问题都能百度到解决方案。
3. 测试
当你完成make之后,cd [你的路径]/libfreenect/build/bin/,执行: ./freenect-glview,如果出现以下错误:
nvidia@tegra-ubuntu:~/dl/libfreenect/build/bin$ ./freenect-glview
Kinect camera test
Number of devices found: 1
Found sibling device [same parent]
Found sibling device [same parent]
Trying to open ./audios.bin as firmware...
Trying to open /home/nvidia/.libfreenect/audios.bin as firmware...
Trying to open /usr/local/share/libfreenect/audios.bin as firmware...
Trying to open /usr/share/libfreenect/audios.bin as firmware...
Trying to open ./../Resources/audios.bin as firmware...
upload_firmware: failed to find firmware file.
upload_firmware failed: -2
Could not open device
那么你需要把:[你的路径]/libfreenect/src 目录下的:audios.bin 文件拷贝至 [你的路径]/libfreenect/build/bin 目录下,然后再次执行,应该就没有问题了(由于我是SSH远程操作服务器,所以后面出现了:
GL thread freeglut (./freenect-glview): failed to open display '')
4. 编译python Wrapper
编译python wrapper需要在编译libfreenect完成之后进行否则会出现入下错误:
/usr/bin/ld: cannot find -lfreenect
/usr/bin/ld: cannot find -lfreenect_sync
依赖:
- Cython
- python-dev
- python-numpy
编译方法,在 libfreenect/wrapper/python 目录下执行:
sudo python2 setup.py install # 全局安装,关于python2的问题前文提到是因为系统默认python版本的问题
本地安装,参考:Python_Wrapper
完成编译之后,安装OpenCV等相关依赖,运行 libfreenect/wrapper/python下的demo或者libfreenect/build/下的demo可以观察到相关的测试结果。
如果过程当中遇到其他的错误,可以到:libfreenect官方github,查找相应的解决方案。还有就是源码编译安装和在ROS安装过程中的libfreenect安装,没有冲突(至少在本人的Jetson tx2上没有冲突)。