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四个参数文件移动到新建立的文件夹中。标定过程完毕。