1: Kinect内参标定
内参的标定是用来矫正摄像头镜头所导致图像的畸变。
由于我用的是Kinect2,在手眼标定之前需要对Kinect2的彩色相机和深度相机进行配准,这样出来的RGB-D图精度才能高一些,否则彩色图与深度图会错位。由于iai_kinect2中自带了相机标定包,于是直接安装下面的教程来标定了
这种标定方法是先保存(record)一些图片,然后再计算标定(calibrate)。
需要标定四样东西:color彩色图像 ir红外图像 sync帧同步 depth深度图像
参考:https://github.com/code-iai/iai_kinect2/tree/master/kinect2_calibration
按照这个步骤来就行
相应的选取一个棋盘格的型号,我选取的是chess5x7x0.03,因为这个型号刚好可以在一张A4纸打印下来
因为要事先保存图片,所以自己建立一个了文件吧,不然很乱的
mkdir ~/kinect_cal_data
cd ~/kinect_cal_data
待会标定的时候就是需要按空格键去保存下来那些标定的图片便于计算标定矩阵
标定后的文件需要放到/home/robot/catkin_ws/src/iai_kinect2/kinect2_bridge/data这个文件夹里
开始标定:命令依次运行下去
调整帧率:
rosrun kinect2_bridge kinect2_bridge _fps_limit:=2
如果电脑性能好,也不需要调整,直接启动就好
运行这条命令后注意看看设备串口号,我的设备串口号是这样的:
[ INFO] [Kinect2Bridge::initDevice] device serial: 003606664647
在我的/home/robot/catkin_ws/src/iai_kinect2/kinect2_bridge/data的文件夹里建立一个文件夹,取名叫003606664647
标定彩色摄像头:
rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 record color
按几次空格键记录
rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 calibrate color
会生成calib_color.yaml 文件
标定红外:
rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 record ir
按几次空格键记录
rosrun kinect2_calibration kinect2_calibrationchess5x7x0.03 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 文件
深度标定:
rosrun kinect2_calibration kinect2_calibration chess9x11x0.02 calibrate depth
会生成calib_depth.yaml 文件
注意,按空格记录图片的时候多记录几张,最少15张。
然后再把calib_color.yaml calib_ir.yaml calib_pose.yaml calib_depth.yaml拷贝到/home/robot/catkin_ws/src/iai_kinect2/kinect2_bridge/data/034011551247文件夹中
内参标定搞定。
2.外参标定
外参标定的作用就是为了让baxter机器人知道kinect2的位置,其实就是找出kinect2坐标系在机器人坐标系下的旋转矩阵表达
https://github.com/ShibataLab/kinect_baxter_calibration
上面这个,用第三种方法,Least Squares Calibration,但记住,之前要先记录下你自己baxter机器人的运行轨迹
,然后把功能包中的轨迹文件marker_trajectory替换掉。