Failed to detect Zivid calibration board
Problem
Zivid SDK는 Hand-Eye Calibration 또는 Infield Correction/Verification 중에 체커보드를 감지할 수 없습니다.
Possible causes and solutions
Zivid calibration board 를 사용하는 경우 기준점/ArUco 마커가 이미지에 표시되어야 합니다. 그렇지 않으면 Infield Correction 또는 Hand-Eye Calibration을 수행할 때 체커보드 감지가 실패합니다. 9x6 회색-흰색 체커보드을 사용할 때는 기준 마커를 사용하지 않기 때문에 필요하지 않습니다. 그러나 Zivid에서 검증되고 개별적으로 검증된 Calibration Board를 사용하는 것을 추천합니다.
Non-visible fiducial marker |
Visible fiducial marker |
팁
Zivid Studio를 사용하여 캡처한 포인트 클라우드가 양호한지 검사합니다.
Note that the SDK does not throw an error if the function is not able to detect any feature points.
It will instead return an empty list.
The reasoning is that not finding a checkerboard in a point cloud is considered a normal failure and not an (exceptional) error.
Therefore, we recommend validating the detection result after capturing using valid()
operator.
The code below illustrates how to implement this in a program.
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, ensure that the entire board is in the view of the camera"
<< std::endl;
}
var frame = Zivid.NET.Calibration.Detector.CaptureCalibrationBoard(camera);
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");
}
frame = zivid.calibration.capture_calibration_board(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("Failed to detect calibration board, ensure that the entire board is in the view of the camera")