使用Kinect_v2相机做一点东西,需要在ros里面用,所以需要安装kinect与ros间的驱动,即iai_kinect2
参考:
https://github.com/code-iai/iai_kinect2
https://blog.csdn.net/wuguangbin1230/article/details/77184032
过程中需要安装libfreenect2(点击查看安装详细过程),libfreenect2安装后测试遇到问题,点击libfreenect2错误解答
前言:
2020.8.5日第二次安装libfreenect2补充:
OpenNI是微软的xbox 360配件kinect,在PC上的开源驱动必须安装的一个API。刚开始还以为OpenNI是一种类似cuda的运算加速应用。。。可为什么libfreenect2中安装OpenNI2是可选的呢?求教
2020.8.7日补充:
最开始的时候,kinect的转接盒的线没插紧。。。导致虽然侥幸成功了,但是运行显示出来的视频特别卡。。。我还以为是驱动哪里没装好导致性能不够。。。折腾了两天各种装cuda、NVIDIA、屏蔽核显操作。。。
甚至今天忽然怎么都启动不了kinect,我还以为是usb驱动、opengl、opencl、只用独显等出了问题,挨个折腾没效果。。最后发现原来线没插紧。。运行./libfreenect2/build/bin/Protonect报错是和插错usb2.0口是一样的,见一中遇到的问题的图。记得插好线...插好的长这样:
一、第一次安装libfreenect2
第一次安装:使用的是OpenNI2, 详见libfreenect2安装过程中给出的optional项;未安装cuda
参考:https://blog.csdn.net/wuguangbin1230/article/details/77184032,详细过程见libfreenect2
过程如下:
git clone https://github.com/OpenKinect/libfreenect2.git
cd libfreenect2
sudo apt-get install build-essential cmake pkg-config
sudo apt-get install libusb-1.0-0-dev
sudo apt-get install libturbojpeg libjpeg-turbo8-dev
sudo apt-get install libglfw3-dev
#安装OPENNI2
sudo apt-get install libopenni2-dev
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2 #这样make后生成的库在home/gyh里,也可以用usr/local,这样生成的库就在usr/local里
make
make install
设定udev rules:
sudo cp ../platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/
然后重新插拔Kinect2。尝试运行Demo程序:
gyh@gyh:~/libfreenect2/build$ ./bin/Protonect
不出意外, 应该能够看到弹出窗口,显示如下效果:
遇到的问题:
1.装好后运行./bin/Protonect,不成功。结果如下图
解决办法:参考 libfreenect2错误解答
使用 lsusb -t 查看kinect连接的usb接口,确保为usb3.0接口:
如下图,Bus 02, Driver=xhci_hcd/6p, 5000M;这个就是3.0口
libfreenect2错误解答中给出的连接正确时的显示信息:
更换正确的usb插口还不行的话,就多拔插usb头几次,多打开几次终端试几次。
二、安装编译iai_kinect2
1.将源码包clone到工作空间中,我的是在~/research_subject/test_ws/src
cd ~/research_subject/test_ws/src
git clone https://github.com/code-iai/iai_kinect2.git
cd iai_kinect2
rosdep install -r --from-paths .
cd ~/research_subject/test_ws
catkin_make -DCMAKE_BUILD_TYPE="Release"
注意:rosdep会提示错误信息如下图:无法定位[kinect2_bridge]
和 [depth_registration],
这是正常的,因为kinect2_bridge和kinect2_registration是本地的包,不需要安装
2.连接好kinect相机,然后运行kinect2_bridge
roslaunch kinect2_bridge kinect2_bridge.launch
运行后不会有什么反应,如果没有错误,就会停留在等待client启动的状态:
[ INFO] [1596467145.242440487]: [Kinect2Bridge::main] waiting for clients to connect
3.启动kinect2_viewer
rosrun kinect2_viewer kinect2_viewer
就能看到弹出窗口,显示图像和点云叠加的信息。但是对的不准,需要校正。
三、第二次安装libfreenect2(使用cuda加速)
使用NVIDIA+INTEL核显双显卡的机子,测试Protonect和kinect2_viewer时,图像信息特别卡。希望用cuda加速
1.首先安装cuda
- 此前已经安装了NVIDIA显卡驱动,在NVIDIA官网下载的对应显卡和系统版本的驱动,然后进行安装,教程见文件:1604安装问题。安装后的附加驱动里查看显卡驱动是这样的:
- 进行cuda的安装,教程见文件:cuda9.0安装教程。安装包在官网下载9.0对应系统的runfile版本。我的是cuda_9.0.176_384.81_linux.run
- 安装好cuda后,重启电脑发现显卡驱动又没了(显示分辨率不对,双屏没法用),但是还好没有循环登录或黑屏的问题。此时用cuda安装教程给的解决方法也没用,就重装一遍NVIDIA显卡驱动
2.重新安装libfreenect2
第一次装的时候,根据libfreenect2给出的optional项,安装了OpenNI2,这一次想着既然用了cuda了,是不是就不用再装OpenNI2了?因为他们都是optional的项,选一个就行了。
于是就把OpenNI2卸载了(apt remove),装libfreenect2时没问题,不过后面编译iai_kinect2的时候就报错缺少OpenNI2了。。于是又装回来了。
将第一次新建的build文件夹删除,然后重新开始编译libfreenect2,过程如下
#这些第一次安装libfreenect2时都做过了(当然从头装的话还是要做一遍的)
git clone https://github.com/OpenKinect/libfreenect2.git
cd libfreenect2
sudo apt-get install build-essential cmake pkg-config
sudo apt-get install libusb-1.0-0-dev
sudo apt-get install libturbojpeg libjpeg-turbo8-dev
sudo apt-get install libglfw3-dev
#安装OPENNI2
sudo apt-get install libopenni2-dev
#第二次装,编译时按照下面的流程
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2
cmake .. -DENABLE_CXX11=ON -DCUDA_PROPAGATE_HOST_FLAGS=off
make
make install
Set up udev rules for device access:
sudo cp ../platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/
然后重新插拔Kinect2。尝试运行Demo程序:
gyh@gyh:~/libfreenect2/build$ ./bin/Protonect
3.重新编译iai_kinect2
编译之前需要安装一些依赖,还有配置一下cuda环境:
- 安装依赖:
sudo apt-get install nvidia-modprobe opencl-headers
- 把下面的两行添加到.bashrc中:
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:${LD_LIBRARY_PATH}"
export PATH="/usr/local/cuda/bin:${PATH}"
- 终端再运行一下下面语句:
echo "/usr/local/cuda/lib64" | sudo tee /etc/ld.so.conf.d/cuda.conf
sudo ldconfig
本来以为是要把OpenNI2卸载掉的,可是编译iai_kinect2时,报错如下,就又装回来了
然后再编译就没问题了
编译过程同第一次安装
完成之后,运行kinect2_bridge:
roslaunch kinect2_bridge kinect2_bridge.launch
能看到有关cuda的信息输出:
再运行kinect2_viewer,正常。但是没感到有啥提高,还是卡卡的。。可能还是没装对吧。待续... 线插好就不卡了
三、校准Kinect
待续。。