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");
    }
}
소스로 이동

source

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()}")