使用相机难免少不了标定,ros下有标定kinect深度相机和彩色相机的方法,就在ros下趟一遍坑,特此记录:
1. 安装libfreenect2
libfreenect2为Kinect2提供了一个开源驱动程序,这个驱动并不支持xbox one,.同事也提供了深度图像传输以及RGB图像的联合配准.
安装步骤(我选择安装在home目录下):
- git clone https://github.com/OpenKinect/libfreenect2.git
- cd libfreenect2
- cd depends;
- ./download_debs_trusty.sh
还需安装一些构建工具:
- sudo apt-get install build-essential cmake pkg-config
libusb提供了usb设备的放问权限:
- sudo dpkg -i debs/libusb*deb
安装TurboJPEG
-sudo apt-get install libturbojpeg libjpeg-turbo8-dev
安装OpenGL
-sudo dpkg -i debs/libglfw3*deb
-sudo apt-get install -f
-sudo apt-get install libgl1-mesa-dri-lts-vivid
在libfreenect2中新建build的文件夹
cd ..
mkdir build && cd build
编译,链接
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2
make
make install
可能需要个步骤
sudo cp ~/libfreenect2/platform/linux/udev/90-kinect2.rules /etc/udev/rules.d
重新插拔kinect2后运行
./libfreenect2/build/bin/Protonect
在终端窗口可显示四个图像.
2.安装 iai_kinect2
iai_kinect2是一个函数库和工具库,为kinect2 提供了ros接口.
下面开始安装iai_kinect2
- cd ~//src/
- git clone https://github.com/code-iai/iai_kinect2.git
- cd iai_kinect2
- rosdep install -r --from-paths .
- cd ~/
- catkin_make -DCMAKE_BUILD_TYPE="Release"
接下来使用kinect2_bridge启动kinect2进行操作:
- roslaunch kinect2_bridge kinect2_bridge.launch
- rosrun kinect2_viewer kinect2_viewer
3. 使用iai_kinect2标定kinect2相机
一般在使用前 ,我们都会矫正所谓的计算相机的内外参数,一般使用的方法都是张正友标定法的理论,理论知识就不在赘述,其实当时看都是能看懂的一旦让自己完全从头推理就懵逼了. 首先呢我们的矫正步骤就是,我们得有标定模板,这如果你之前下载了iai_kinect2在kinect2_calibration文件下是有标定模板的,你可以随意打印一个模板等着后期的标定使用.对于kienct 2的标定并不需要说把红外发射器给遮住 然后使用红外LED去矫正的,这是针对kinect1的,之前我矫正过kinect1 确实是需要把红外发射装置给遮住,然后才能矫正深度信息.
标定过程如下:
mkdir ~/Kinect_cal_data
cd Kinect_cal_data
roscore
rosrun kinect2_bridge kinect2_bridge _fps_limit:=2 #这个数字可以适当增大
设置帧数完成后继续:
标定彩色相机
rosrun kinect2_calibration kinect2_calibration chess5X7X0.03 record color
rosrun kinect2_calibration kinect2_calibration chess5X7X0.03 calibrate color
标定IR相机
rosrun kinect2_calibration kinect2_calibration chess5X7X0.03 record ir
rosrun kinect2_calibration kinect2_calibration chess5X7X0.03 calibrate ir
标定二者转化矩阵和深度测量
rosrun kinect2_calibration kinect2_calibration chess5X7X0.03 record sync
rosrun kinect2_calibration kinect2_calibration chess5X7X0.03 calibrate sync
rosrun kinect2_calibration kinect2_calibration chess5X7X0.03 calibrate depth
前面打开kinect2_bridge时候出现过一个序列号0123494562,下面一这个序列号为文件名在 kinect2_bridge/data下面建立一个文件夹用来存放标定数据:
roscd kinect2_bridge/data
mkdir 0123494562
将标定文件靠过来放到此文件夹下重新运行:
rosrun kinect2_viewer kinect2_viewer
检验标定效果.
标定了两天,效果有点差强人意,唉,你还要我怎样,我怎样~~~~~~~~