注意事项和建议
Common mistakes
图像质量
Ensure the calibration object is well exposed and in focus in all images.
Keep the object within the depth of field:
Use higher \(f\)-number (smaller aperture).
Compensate with longer exposure times.
Use the same aperture setting for all images to avoid fluctuations caused by varying aperture sizes.
Capture calibration object from diverse views by exciting all six degrees of freedom of both the calibration object and the robot.
Zivid API
Zivid point clouds are given in millimeters (mm).
Therefore, ensure that robot input poses for Hand-Eye calibration also use mm for translation.
As a result, the Hand-Eye output translation values will be in millimeters (mm).
可检测的ArUco标记
If using a Zivid calibration board, ensure the ArUco marker is visible in all poses; otherwise, checkerboard detection will fail.
If using one or more ArUco markers as calibration object(s) not all markers need to be visible in every pose.
检测(detection) API 提供了有关检测失败原因的信息。以下是检查检测状态的示例:
const auto detectionResult = Zivid::Calibration::detectCalibrationBoard(frame);
if(detectionResult.valid())
{
std::cout << "Calibration board detected " << std::endl;
handEyeInput.emplace_back(robotPose, detectionResult);
currentPoseId++;
}
else
{
std::cout << "Failed to detect calibration board. " << detectionResult.statusDescription() << std::endl;
}
using (var frame = camera.Capture2D3D(settings))
{
var detectionResult = Detector.DetectCalibrationBoard(frame);
if (detectionResult.Valid())
{
Console.WriteLine("Calibration board detected");
handEyeInput.Add(new HandEyeInput(robotPose, detectionResult));
++currentPoseId;
}
else
{
Console.WriteLine("Failed to detect calibration board, ensure that the entire board is in the view of the camera");
}
}
detection_result = zivid.calibration.detect_calibration_board(frame)
if detection_result.valid():
print("Calibration board detected")
hand_eye_input.append(zivid.calibration.HandEyeInput(robot_pose, detection_result))
current_pose_id += 1
else:
print(f"Failed to detect calibration board. {detection_result.status_description()}")
Eye-to-hand
The calibration object is mounted on the robot end-effector and moves with the robot.
Mounting can be fixed directly to the flange or held by a gripper.
Exact mounting location is not critical (it is not necessary to know its pose relative to the end-effector).
Recommendations:
Ensure the calibration object does not move relative to the flange or gripper during robot motion.
Use rigid materials for brackets and calibration object (e.g., use Zivid On-Arm Mount to mount the Zivid calibration board to the robot).
Ensure smooth robot motion with controlled accelerations to avoid shaking or dislocation.
Ensure the calibration object is still during image acquisition (e.g., wait a few seconds after robot motion to allow vibrations to settle before capturing).
Eye-in-hand
The calibration object is stationary in the robot's workspace.
The object's exact location is not critical (it is not necessary to know its pose relative to the robot's base).
The camera (mounted on the end-effector) must be able to see the calibration object from multiple perspectives.
Recommendations:
Ensure the calibration object is securely fixed and remains stationary during calibration (e.g., use Zivid Stationary Mount to mount the Zivid calibration board to a workbench).
Ensure the camera is securely fixed during calibration (e.g., using Zivid On-Arm Mount).
环境条件
Keep the camera temperature stable during calibration:
Ensure Thermal Stabilization(热稳定功能) is enabled to minimize temperature-related performance variations.
Perform a 预热 procedure before starting.
Keep calibration conditions similar to the expected operating conditions.
准确度和重新标定
Picking accuracy depends on:
Camera calibration
Hand-eye calibration
Machine vision software
Robot positioning
Robots are repeatable but not inherently accurate due to the factors such as temperature, joint friction, payload, manufacturing tolerances.
Recommendations:
Perform mastering (zeroing) to teach the robot the exact zero position of each joint.
Calibrate the robot for improved pose accuracy.
Repeat hand-eye calibration if:
robot loses calibration.
camera is dismounted and remounted.
Perform regular recalibration (robot and/or hand-eye) to maintain system performance.
选择正确的方法
Avoid methods that compute or require 相机内参 during hand-eye calibration:
Zivid cameras are already calibrated with a complex proprietary model.
Zivid SDK provides approximations for OpenCV and Halcon models, but these lose accuracy (unlike the proprietary model).
Recommendations:
Use Zivid Hand-Eye Calibration, which leverages 3D point cloud data for extrinsic calculation.
Alternative methods based on CAD matching are also ok (they also calculate camera extrinsics from the point cloud); however, they may lack Zivid-specific optimizations.
Additional advantages of Zivid method is support for ArUco markers, which can be permanently installed in the robot cell (on-arm cameras) or on the robot (stationary cameras).
Detailed explanation
Some third party hand-eye calibration methods compute camera intrinsic parameters along with extrinsic parameters and the relative pose between the camera and the robot frame. We do not recommend these approaches because they treat a Zivid camera as an uncalibrated 2D camera, rather than a well-calibrated 3D camera.
每台Zivid相机都经过了一系列的标定过程,其中包括了2D彩色相机的内参。我们的标定使用了复杂的相机模型,其内参数量比一些众所周知的针孔相机模型(例如OpenCV相机模型)更多。由于Zivid相机模型是专有的,因此我们的内部相机内参无法通过SDK获取。但是,Zivid SDK确实从我们的相机模型中提供了OpenCV和Halcon模型的近似数据(请参阅 相机内参 )。由于一些信息在近似数据中丢失,因此使用OpenCV或Halcon格式内参的手眼标定方法也不是最佳方法。
由于Zivid相机提供了3D数据,因此可以通过点云计算相机外参。 Zivid手眼标定方法利用了这一优势,这就是为什么它是推荐的标定方法,也是最适合我们相机的方法。当然也有可替代的第三方方法,它们通过点云计算相机外参。这些方法完全依赖于点云数据,比如基于CAD匹配的手眼标定方法。
使用 Zivid 手眼标定的另一个益处是其支持 ArUco 标记,这些标记相对较小,因此可以永久安装在机器人单元中。它们对于固定安装的相机(眼在手外)特别方便,因为它们可以安装在机器人法兰和夹持器之间。另一方面,对于手臂安装的相机(眼在手上),标记可以永久安装在机器人工作空间的某个位置。
阅读更多关于 手眼标定的残差.
版本历史记录
SDK |
变更 |
|---|---|
2.15.0 |
有关检测失败原因的信息已添加到 detection API。 |