ROS-melodic安装Kinect V2步骤和测试及问题解决

时间:2024-03-05 10:44:47

要想Kinect V2在ROS上运行。
需要libfreenect2 和 iai_kinect2两个驱动

再用摄像头前,要确保你安装opencv  ,我用的版本是opencv-3.4.3

安装教程网上比较多,这里就不啰嗦了

一.首先安装libfreenect2

1.安装依赖

sudo apt-get install build-essential cmake pkg-config libturbojpeg libjpeg-turbo8-dev mesa-common-dev freeglut3-dev libxrandr-dev libxi-dev 
sudo apt-get install libglfw3-dev
sudo apt-get install libopenni2-dev
sudo apt-get install libusb-dev
sudo apt-get install libturbojpeg0-dev

2.开始安装

下载源码

git clone https://github.com/OpenKinect/libfreenect2.git

安装

cd libfreenect2
mkdir build 
cd build
cmake ..
make
sudo make install

设定udev路径

#设定udev rules:(填好自己libfreenect2的路径)
sudo cp libfreenect2/platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/

3.测试

#运行build目录下的例子
./bin/Protonect

 

二.安装iai_kinect2驱动

1,首先进入ROS的工作空间下载源码

 

cd ~/catkin_ws/src/
git clone https://github.com/code-iai/iai_kinect2.git
cd iai_kinect2
rosdep install -r --from-paths .

在这一步rosdep install -r --from-paths .会报错

解决方法

rosdep install --from-paths ~/catkin_ws/src/iai_kinect2 --ignore-src -r

然后开始编译

cd ~/catkin_ws           
catkin_make -DCMAKE_BUILD_TYPE="Release"      #编译

#如果没有添加永久环境变量,则每次都需要source以下
source ~/catkin_ws/devel/setup.bash 
#添加ros永久环境变量
echo "source ~/catkin_ws/devel/setup.sh" >> ~/.bashrc

我在编译时候出现了问题,如下

 
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp: In member function ‘void Kinect2Bridge::initCompression(int32_t, int32_t, bool)’:
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:465:28: error: ‘CV_IMWRITE_JPEG_QUALITY’ was not declared in this scope
     compressionParams[0] = CV_IMWRITE_JPEG_QUALITY;
                            ^~~~~~~~~~~~~~~~~~~~~~~
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:465:28: note: suggested alternative: ‘CV_WRITE_SEQ_ELEM’
     compressionParams[0] = CV_IMWRITE_JPEG_QUALITY;
                            ^~~~~~~~~~~~~~~~~~~~~~~
                            CV_WRITE_SEQ_ELEM
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:467:28: error: ‘CV_IMWRITE_PNG_COMPRESSION’ was not declared in this scope
     compressionParams[2] = CV_IMWRITE_PNG_COMPRESSION;
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:469:28: error: ‘CV_IMWRITE_PNG_STRATEGY’ was not declared in this scope
     compressionParams[4] = CV_IMWRITE_PNG_STRATEGY;
                            ^~~~~~~~~~~~~~~~~~~~~~~
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:470:28: error: ‘CV_IMWRITE_PNG_STRATEGY_RLE’ was not declared in this scope
     compressionParams[5] = CV_IMWRITE_PNG_STRATEGY_RLE;
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp: In member function ‘void Kinect2Bridge::initCompression(int32_t, int32_t, bool)’:
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:465:28: error: ‘CV_IMWRITE_JPEG_QUALITY’ was not declared in this scope
     compressionParams[0] = CV_IMWRITE_JPEG_QUALITY;
                            ^~~~~~~~~~~~~~~~~~~~~~~
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:465:28: note: suggested alternative: ‘CV_WRITE_SEQ_ELEM’
     compressionParams[0] = CV_IMWRITE_JPEG_QUALITY;
                            ^~~~~~~~~~~~~~~~~~~~~~~
                            CV_WRITE_SEQ_ELEM
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:467:28: error: ‘CV_IMWRITE_PNG_COMPRESSION’ was not declared in this scope
     compressionParams[2] = CV_IMWRITE_PNG_COMPRESSION;
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:469:28: error: ‘CV_IMWRITE_PNG_STRATEGY’ was not declared in this scope
     compressionParams[4] = CV_IMWRITE_PNG_STRATEGY;
                            ^~~~~~~~~~~~~~~~~~~~~~~
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:470:28: error: ‘CV_IMWRITE_PNG_STRATEGY_RLE’ was not declared in this scope
     compressionParams[5] = CV_IMWRITE_PNG_STRATEGY_RLE;
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~

查阅资料好像是版本不对应的问题,用oopencv2可以成功,用opencv3的话需要指定安装路径,我的是默认安装的,就出现了一系列没有定义的问题

我的解决方法,没有安装过opencv3,而是改了一种定义方式

将CV_IMWRITE_JPEG_QUALITY;
改为cv::IMWRITE_JPEG_QUALITY;

剩下的改法相同,改完就编译好了,

2.测试

roslaunch kinect2_bridge kinect2_bridge.launch    #运行kinect2自带的launch

rosrun kinect2_viewer kinect2_viewer              #查看运行结果。

 

到此,驱动就安装完成了。