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를 사용하여 캡처한 포인트 클라우드가 양호한지 검사합니다.
함수가 특징점을 감지할 수 없는 경우 SDK에서 오류가 발생하지 않습니다. 대신 빈 목록을 반환합니다. 포인트 클라우드에서 체커보드를 찾지 못하는 것은 (예외적인) 오류가 아니라 정상적인 실패로 간주되기 때문입니다. 따라서, valid()
연산자를 사용하여 캡처 후 감지 결과를 검증하는 것이 좋습니다. 아래 코드는 프로그램에서 이를 구현하는 방법을 보여줍니다.
const auto detectionResult = Zivid::Calibration::detectFeaturePoints(frame.pointCloud());
if(detectionResult.valid())
{
std::cout << "Calibration board detected " << std::endl;
handEyeInput.emplace_back(Zivid::Calibration::HandEyeInput{ 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 detectionResult = Detector.DetectFeaturePoints(frame.PointCloud);
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.experimental.calibration.detect_feature_points(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"
)