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. This is not required when using the 9x6 grey-white checkerboards as they don’t have a fiducial marker on them. However, we recommend using the calibration boards as these have been qualified and individually verified by Zivid. Also, support for 9x6 grey-white checkerboards was removed in SDK 2.14.

fig_bad_he

fig_good_he

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.

소스로 이동

source

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

source

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

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