Failed to detect Zivid calibration board
Problem
Zivid SDK는 Hand-Eye Calibration 또는 Infield Correction/Verification 중에 체커보드를 감지할 수 없습니다.
Possible causes and solutions
When using the Zivid calibration board, the fiducial/ArUco marker must be visible in the image. Otherwise, the checkerboard detection will fail when performing infield correction or hand-eye calibration. We recommend using the Zivid calibration board, since it is a qualified product. Support for the older 9x6 grey-white checkerboards, which had no fiducial marker and so had no such requirement, was removed in SDK 2.14.
팁
Zivid Studio를 사용하여 캡처한 포인트 클라우드가 양호한지 검사합니다.
SDK는 함수가 특징점을 감지하지 못하더라도 오류를 발생시키지 않습니다. 대신 빈 목록을 반환합니다. 이는 포인트 클라우드에서 체커보드 패턴을 찾지 못하는 것이 (예외적인) 오류가 아닌 정상적인 실패로 간주되기 때문입니다. 따라서 valid() 연산자를 사용하여 캡처 후 감지 결과를 검증하는 것이 좋습니다. 아래 코드는 프로그램에서 이를 구현하는 방법을 보여줍니다.
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()}")