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이나 핸드아이 칼리브레이션 시 체커보드 감지에 실패합니다. 9x6 회백색 체커보드는 기준점 마커가 없으므로 이러한 작업이 필요하지 않습니다. 하지만 Zivid에서 검증 및 개별 검사를 완료한 칼리브레이션 보드를 사용하는 것이 좋습니다. 또한, SDK 2.14에서는 9x6 회백색 체커보드 지원이 삭제되었습니다.
팁
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 = 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");
}
}
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()}")