CalibrateHandEye¶
With this command you can calibrate the position of the camera with respect to a robot. The calibration routine currently supports two types of setups: either your camera is fixed with respect to the robot origin, or your camera mounted on the robot hand and is moving with the robot.
Fixed Setup
To calibrate a fixed camera you need to grab a calibration pattern with the robot, move the pattern with the robot and observe the pattern in these different poses with the camera. The exact position of the pattern on the robot hand does not need to be known, it will be calculated during calibration, along with the camera’s pose relative to the robot origin.
Moving Cameras
Similarly you can calibrate a moving camera on the robot hand. For this setup a calibration plate needs to be placed inside the robot’s workspace, so that the camera can observe the calibration plate. Then you move the robot around and observe the pattern from different positions and angles. Again, the position of the calibration pattern does not need to be known and will be calculated during calibration, together with the camera’s mounting position with respect to the robot hand.
See the hand-eye calibration guide for an in-depth explanation of how this command works and the steps that are necessary to use it.
Note
The calibration data applied after the CalibrateHandEye command is not yet stored permanently on the camera! Use StoreCalibration to permanently store the link in the camera’s eeprom.
Note
The calibration can be interrupted by the Break command.
Parameters for Different Robot Geometries
Robot Type / Geometry |
Recommended Pattern Movement |
Observable Parameters |
Fixed Parameter Value |
Robot with 6 degrees of freedom at end effector, e.g.
|
Collect at least 20 pattern observations/robot pose pairs Pattern observations should include pattern positions distributed in the operating volume and cover variation of the pattern rotation in all axes. Use the maximum possible pattern rotations to still allow observation of the pattern in the camera, ideally +/-20 degrees or more. Using an initial rotation and chaining rotations with random axes and fixed angle is generally sufficient. Try to use a robot arm configuration during calibration which similar to the arm configuration during later operation in order to minimize mechanical offsets from robot joint reversal error / backlash. |
Camera pose (Link) and pattern pose should be completely observable |
leave empty to determine all parameters for Link and PatternPose |
Robot with 4 degrees of freedom at end effector, e.g.
|
Collect at least 20 pattern observations/robot pose pairs Pattern observations should include pattern positions distributed in the operating volume and cover variation of the pattern rotation. Use the maximum possible pattern rotations to still allow observation of the pattern in the camera. |
Due to missing actuated rotation in two axes the position of these two axes cannot be determined from the pattern observations. The Z-coordinate of the Link and PatternPose transformations remain unknown and need to set fixed. |
Alternative 1: Fix the camera pose Z component in robot or hand frame by specifying: "Fixed": {
"Link":{
"Translation": [false, false, true]
}
}
Alternative 2: Fix the pattern pose Z-component in robot or hand frame by specifying: "Fixed": {
"PatternPose":{
"Translation": [false, false, true]
}
}
|
Cartesian coordinate robot with 3 translational degrees of freedom at end effector without rotation, e.g.
|
Collect at least 8 pattern observations/robot pose pairs Pattern observations should include pattern positions distributed in the operating volume (e.g. all 8 corners). |
Due to missing actuated rotation the position of the axes cannot be determined from the pattern observations. Only the direction of the coordinate axes can be estimated. |
Alternative 1: Fix the camera pose in robot or hand frame by specifying: "Fixed": {
"Link":{
"Translation": [true, true, true]
}
}
Alternative 2: Fix the pattern pose in robot or hand frame by specifying: "Fixed": {
"PatternPose":{
"Translation": [true, true, true]
}
}
|
Note
Locked parameters in Fixed do not need to be fixed to zero. When specifying them in the initial guess for Link or PatternPose the given values will be used instead.