code-iai / iai_kinect2

Tools for using the Kinect One (Kinect v2) in ROS
Apache License 2.0
873 stars 519 forks source link

How do i make the calibration as accurate as possible? #384

Open BlazingForests opened 7 years ago

BlazingForests commented 7 years ago

Hi all

I am using kinect2_calibration and chess6x8x0.051 calibration board to do the calibration.

When i done, i am mount kinect2 on my robot arm then from two different pose to watch a 700mm 700mm 700mm box, pose A to box around 3m , pose B to box around 1m. All point cloud from each pose are transform to arm's base_link coordinate system. Then i found the two point cloud have an big offset in xyz axis, around 0.1m , looks like the scale is ok. So i think maybe the camera intrinsic parameters is not accurate.

The point could data is coming from /kinect2/qhd/points

The following information is about the calibration message.

color 59 frames ir 54 frame sync 40 frame

So, how do i make the calibration as accurate as possible?

THX DD

color 59 frames

[ INFO] [CameraCalibration::calibrateIntrinsics] calibrating intrinsics...
[ INFO] [CameraCalibration::calibrateIntrinsics] re-projection error: 0.3562

[ INFO] [CameraCalibration::calibrateIntrinsics] Camera Matrix:
[1062.540590832537, 0, 959.3438574185978;
  0, 1069.089919966151, 541.0544818672008;
  0, 0, 1]
[ INFO] [CameraCalibration::calibrateIntrinsics] Distortion Coeeficients:
[0.07517267460337532, -0.1405926727614856, -0.00101587900534039, -0.001781746408894521, 0.06470862396178508]

ir 54 frame

[ INFO] [CameraCalibration::calibrateIntrinsics] calibrating intrinsics...
[ INFO] [CameraCalibration::calibrateIntrinsics] re-projection error: 0.128047

[ INFO] [CameraCalibration::calibrateIntrinsics] Camera Matrix:
[362.2338234363751, 0, 250.2918660145386;
  0, 364.5709973679915, 207.8310154085621;
  0, 0, 1]
[ INFO] [CameraCalibration::calibrateIntrinsics] Distortion Coeeficients:
[0.1123949618785153, -0.3574370607140528, 0.0001929062747686945, -0.001701733313918923, 0.198232965476124]

sync 40 frame

[ INFO] [main] starting calibration...
[ INFO] [CameraCalibration::calibrateExtrinsics] Camera Matrix Color:
[1062.540590832537, 0, 959.3438574185978;
  0, 1069.089919966151, 541.0544818672008;
  0, 0, 1]
[ INFO] [CameraCalibration::calibrateExtrinsics] Distortion Coeeficients Color:
[0.07517267460337532, -0.1405926727614856, -0.00101587900534039, -0.001781746408894521, 0.06470862396178508]

[ INFO] [CameraCalibration::calibrateExtrinsics] Camera Matrix Ir:
[362.2338234363751, 0, 250.2918660145386;
  0, 364.5709973679915, 207.8310154085621;
  0, 0, 1]
[ INFO] [CameraCalibration::calibrateExtrinsics] Distortion Coeeficients Ir:
[0.1123949618785153, -0.3574370607140528, 0.0001929062747686945, -0.001701733313918923, 0.198232965476124]

[ INFO] [CameraCalibration::calibrateExtrinsics] calibrating Color and Ir extrinsics...
[ INFO] [CameraCalibration::calibrateExtrinsics] re-projection error: 0.216346

[ INFO] [CameraCalibration::calibrateExtrinsics] Rotation:
[0.9999763109764238, -0.006873374829005757, 0.0003663392451796783;
  0.006871324071780641, 0.9999621734881108, 0.005332588342830331;
  -0.0004029782663328749, -0.005329944783345518, 0.9999857145465246]
[ INFO] [CameraCalibration::calibrateExtrinsics] Translation:
[-0.05214328438737988; 0.0002246518975985162; -0.00201367299115407]
[ INFO] [CameraCalibration::calibrateExtrinsics] Essential:
[1.374606986458885e-05, 0.002012399438719055, 0.0002353867774631854;
  -0.002034637899550436, -0.0002640800973557701, 0.05214180180947309;
  -0.0005829399810071246, -0.05213976787211482, -0.0002781409692876232]
[ INFO] [CameraCalibration::calibrateExtrinsics] Fundamental:
[1.019322456288699e-08, 1.482702829366469e-06, -0.0002474756926533616;
  -1.499517263956419e-06, -1.933779247482433e-07, 0.0143355113746569;
  0.0003422354129509402, -0.04213605989859074, 1]

cali depth

[ INFO] [DepthCalibration::compareDists] stats on difference:
     avg: -0.0140912
     var: 3.5661e-05
  stddev: 0.00597169
     rms: 0.0153043
  median: -0.0136632
BlazingForests commented 7 years ago

One more thing, I used /kinect2/sd/image_ir and /kinect2/sd/camera_info to do the hand eye calibration. Not /kinect2/sd/image_ir_rect , In my hand eye calibration i just using camera matrix to compute the calibration board pose, not use the distortion cofficients.

Is that why i have the offset problem?

THX DD