未能检测到Zivid标定板
问题
Zivid SDK在手眼标定或现场标定/验证期间无法检测到棋盘格。
可能原因及解决方法
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()}")