当前位置: 代码迷 >> 综合 >> Kinect v2.0 在ubuntu 16和ROS中的驱动安装和内参标定
  详细解决方案

Kinect v2.0 在ubuntu 16和ROS中的驱动安装和内参标定

热度:67   发布时间:2023-10-22 03:30:34.0

ubuntu安装Kinect 2.0驱动

下载驱动包:

cd ~    #设置克隆目录,当前在Home目录中,也可以设置在其它目录中
git clone https://github.com/OpenKinect/libfreenect2.git  
cd libfreenect2

安装编译工具:

sudo apt-get install build-essential cmake pkg-config

安装libusb. The version must be >= 1.0.20:

sudo apt-get install libusb-1.0-0-dev

安装TurboJPEG:

sudo apt-get install libturbojpeg libjpeg-turbo8-dev

安装OpenGL:

sudo apt-get install libglfw3-dev

安装OpenNI2:

sudo apt-get install libopenni2-dev

编译构建:

mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/  #修改了原来的安装位置
make
sudo make install  #这里直接用root权限安装,如果是普通权限有的时候会出现安装不成功的情况

设置udev规则:

sudo cp ../platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/

将Kinect重新接入,之后运行测试命令:
./bin/Protonect  #重新接入之后运行测试

sudo apt-get install openni2-utils && sudo make install-openni2 && NiViewer2 #测试

重新接入的过程中,如果只是重新插拨一下USB接口,可能并不会生效,最稳妥的办法是将Kinect断电之后重新上电,在上下电的过程中USB接口可以不用重新插拨。
 

ROS中使用Kinectv2.0

安装iai_kinect2开源工具,这是一个基于libfreenect2和ROS的开源kinect v2体感相机标定工具,iai_kinect2是一个元功能包,里面包含了kinect2_bridge,kinect2_calibration,kinect2_registration和kinect2_viewer四个功能包。

#创建一个ROS的工作空间catkin_ws
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
echo "/home/liuqiang/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc#下载iai_kinect2元功能包
cd ~/catkin_ws/src
git clone git@github.com:code-iai/iai_kinect2.git
cd iai_kinect2
rosdep install -r --from-paths .
cd ~/catkin_ws
catkin_make -DCMAKE_BUILD_TYPE="Release"#启动kinect2_bridge,用于连接传感器
roslaunch kinect2_bridge kinect2_bridge.launch

使用上述命令安装的iai_kinect2无法使用,因为iai_kinect2适配opencv2版本,这在官方的说明文档里面已经指出,为此,我下载了opencv2.4.13.6的源码进行编译安装,我的安装路径是在~/opencv2.4.13.6目录下,此时我的系统中存在两个版本的opencv,一个是opencv2.4.13.6,一个是ROS完整安装时自带的opencv3.3.1,为此我需要在~/.bashrc文件中设置环境变量,将当前Home目录下的opencv2设置为默认的opencv:

#首先在~/.bashrc文件的末尾追加如下的两行:
export PKG_CONFIG_PATH=/home/liuqiang/OpenCV2.4.13.6/lib/pkgconfig
export LD_LIBRARY_PATH=/home/liuqiang/OpenCV2.4.13.6/lib:$LD_LIBRARY_PATH
#其次,时环境变量生效
source ~/.bashrc
#接着,使用如下的命令查看当前opencv的默认版本
pkg-config opencv --libs
pkg-config opencv --modversion
pkg-config opencv --cflags 
#然后,回到catkin_ws中重新编译iai_kinect2
cd ~/catkin_ws
catkin_make clean #清空之前功能包编译时输出的文件
catkin_make
#最后,启动kinect2_bridge
roslaunch kinect2_bridge kinect2_bridge.launch


USB权限不够的问题,在我启动roslaunch kinect2_bridge kinect2_bridge.launch时又出现了,这是因为我一直没有拔掉传感器的USB并插入,从而导致权限不够,虽然在安装libfreenect2的时候可以使用sudo命令获取特权去执行,但是在ROS下通过launch文件启动节点的方式打开传感器的方式就不行了,此时必须拔掉传感器的USB并再次插入,接着运行roslaunch kinect2_bridge kinect2_bridge.launch即可。
 

roslaunch kinect2_bridge kinect2_bridge.launch #连接传感器
rosrun kinect2_viewer kinect2_viewer kinect2 sd image #查看图像
rosrun kinect2_viewer kinect2_viewer kinect2 sd cloud #查看点云

这个文件会启动kinect2_viewer节点,这个节点会接收bridge发布的topic消息来显示我们想看的内容。上面的"cloud"就是我们想看的内容,当然我们也可以订阅其他内容,总共有这些内容可供订阅:

  • image (RGB图像);
  • cloud (点云);
  • both (同时显示以上两者)。

同时,配合这些内容,我们还有四种查看模式,这些模式涉及我们要查看的内容的分辨率:

  • qhd (1/4高清:960×540);
  • hd (全高清:1920×1080);
  • sd (标清:< 720p);
  • ir(红外)。

相机内参标定

标定kinect2相机内参,默认已安装libfreenect,且下载了iai_kinect2包。kinect2内参标定使用iai_kinect2内部的kinect2_calibration包。kinect2相机标定还需使用特定的标定板。标定图像在kinect2_calibration/patterns文件夹内,挑选一种打印并记下标定板的型号。我使用的chess9*11标定板。

建立文件夹,存储在进行相机标定时所存储的图片以及标定参数。

mkdir calibration_data
cd calibration_data

启动kinect节点。调整kinect图像节点到2帧每秒

roscore#新开一个终端,执行命令
rosrun kinect2_bridge kinect2_bridge   _fps_limit:=2   #注意空格,_fps_limit作为节点内参数,前有空格

查看节点的发布信息,记录下你的kinect2的Devie serial。并创建/iai_kinect2/kinect2_bridge/data/023311570147文件夹

[ INFO] [Kinect2Bridge::initDevice] device serial: 023311570147
  • 标定彩色摄像头。运行kinect2图片采集节点,节点运行后移动标定板,按空格键采集图像,分别采集各种不同方向以及距离的标定板图像。大概需要采集20余张图片。
  rosrun kinect2_calibration kinect2_calibration chess9x11x0.02 record color  #彩色图像采集节点rosrun kinect2_calibration kinect2_calibration chess9x11x0.02 calibrate color  #彩色摄像头标定节点

摄像头标定计算节点运行完毕后会生成彩色摄像头标定参数文件:calib_color.yaml。

标定红外摄像头。采集图像同上。

rosrun kinect2_calibration kinect2_calibration chess9x11x0.02 record ir  #红外图像采集节点
rosrun kinect2_calibration kinect2_calibration chess9x11x0.02 calibrate ir  #红外摄像头标定节点
  • 摄像头标定计算节点运行完毕后会生成红外摄像头标定参数文件:calib_ir.yaml。
  • 摄像头帧同步标定。采集图像同上。
rosrun kinect2_calibration kinect2_calibration chess9x11x0.02 record sync #彩色图像、红外图像同步采集节点
rosrun kinect2_calibration kinect2_calibration chess9x11x0.02 calibrate sync #帧同步标定节点

帧同步标定节点运行完毕后会产生帧同步参数文件:calib_pose.yaml。

深度标定。运行节点后会产生深度参数文件:calib_depth.yaml。

 rosrun kinect2_calibration kinect2_calibration chess9x11x0.02 calibrate depth #运行摄像头深度标定节点
  • 跳转到iai_kinect2/kinect2_bridge/data文件夹。并建立新文件夹并以刚才记录下的device serial为名称。将标定过程中生成的calib_color.yaml、calib_ir.yaml、calib_pose.yaml、calib_depth.yaml四个参数文件移动到新建立的文件夹中。标定过程完毕。