핸드-아이 캘리브레이션에 대한 주의 사항 및 권장 사항

흔히 저지르는 실수

Image quality

  • 모든 이미지에서 캘리브레이션 대상이 적절하게 노출되고 초점이 맞는지 확인하십시오.

  • 피사체를 심도(depth of field) 내에 유지하세요.

    • 더 높은 \(f\)-값(더 작은 조리개)을 사용하십시오.

    • 노출 시간을 늘려서 보완하십시오.

  • 조리개 크기 변화로 인한 변동을 방지하려면 모든 이미지에 동일한 조리개 설정을 사용하십시오.

  • 캘리브레이션 대상과 로봇 모두의 6자유도를 모두 자극하여 다양한 시점에서 캘리브레이션 대상을 촬영합니다.

  • Zivid 캘리브레이션 객체에서 양질의 데이터를 얻는 방법 있는 지침을 따르십시오.

Zivid API

  • Zivid 포인트 클라우드는 밀리미터(mm) 단위로 제공됩니다.

  • 따라서 핸드-아이 캘리브레이션을 위한 로봇 입력 포즈에도 이동 거리를 mm 단위로 설정해야 합니다.

  • 결과적으로 핸드-아이 결과 변환 값은 밀리미터(mm) 단위로 표시됩니다.

발견

  • Zivid calibration board 사용하는 경우 모든 자세에서 ArUco 마커가 보이는지 확인하십시오. 그렇지 않으면 체커보드 감지가 실패합니다.

  • If using multiple ArUco markers as a calibration object, not all markers need to be visible in every pose. However, failure to detect the same markers across many poses can make the rotation residual large or invalid even when translation residuals still look good. Ensure mounting hardware (screws, brackets, clamps) does not block the view of a marker from some viewing angles.

탐지 API는 탐지 실패 이유에 대한 정보를 제공합니다. 다음은 탐지 상태를 확인하는 방법의 예입니다.

소스로 이동

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. " << detectionResult.statusDescription() << std::endl;
}
소스로 이동

source

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

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

핸드-아이 구성

  • 캘리브레이션 대상물은 로봇 말단부에 장착되어 로봇과 함께 움직입니다.

  • 장착은 플랜지에 직접 고정하거나 그리퍼로 고정할 수 있습니다.

  • 정확한 장착 위치는 중요하지 않습니다(엔드 이펙터에 대한 상대적인 위치를 알 필요는 없습니다).

권장 사항:

  • 로봇 동작 중 캘리브레이션 대상이 플랜지 또는 그리퍼에 대해 상대적으로 움직이지 않도록 하십시오.

  • 브래킷과 캘리브레이션 대상에는 견고한 재질을 사용하십시오(예: Zivid On-Arm Mount 사용하여 Zivid calibration board 로봇에 장착하십시오).

  • 진동이나 변위를 방지하기 위해 제어된 가속도로 로봇의 부드러운 움직임을 보장하십시오.

  • 이미지 획득 중 캘리브레이션 대상이 움직이지 않도록 하십시오(예: 로봇이 움직인 후 진동이 가라앉을 때까지 몇 초간 기다린 후 이미지를 촬영하십시오).

  • 캘리브레이션 대상물은 로봇의 작업 공간 내에 고정되어 있습니다.

  • 물체의 정확한 위치는 중요하지 않습니다(로봇의 베이스를 기준으로 한 물체의 자세를 알 필요는 없습니다).

  • 엔드 이펙터에 장착된 카메라는 여러 각도에서 캘리브레이션 대상을 볼 수 있어야 합니다.

권장 사항:

Environment conditions

캘리브레이션 과정 동안 카메라 온도를 안정적으로 유지하십시오.

  • 온도 관련 성능 변화를 최소화하려면 Thermal Stabilization 활성화되어 있는지 확인하십시오.

  • 시작하기 전에 Warm-up 절차를 수행하십시오.

  • 캘리브레이션 조건을 예상 작동 조건과 유사하게 유지하십시오.

Accuracy and recalibration

피킹 정확도는 다음 요소에 따라 달라집니다.

  • 카메라 보정

  • 핸드-아이 캘리브레이션

  • 머신 비전 소프트웨어

  • 로봇 위치 지정

로봇은 반복적인 작업을 수행할 수 있지만 온도, 관절 마찰, 탑재 하중, 제조 공차와 같은 요인으로 인해 본질적으로 정확하지는 않습니다.

권장 사항:

  • 로봇에게 각 관절의 정확한 원점 위치를 가르치기 위해 마스터링(제로화)을 수행합니다.

  • 로봇의 자세 정확도를 향상시키기 위해 로봇을 보정합니다.

  • 핸드-아이 캘리브레이션 전과 Warm-up 후에 Infield Correction 을 수행하십시오.

  • 다음과 같은 경우 핸드-아이 캘리브레이션을 반복하십시오.

    • 로봇의 캘리브레이션 기능이 손실되었습니다.

    • 카메라를 분리했다가 다시 장착했습니다.

  • 시스템 성능 유지를 위해 정기적인 재보정(로봇 및/또는 핸드-아이)을 수행하십시오.

Choosing the correct method

  • 핸드-아이 캘리브레이션 중에 Camera Intrinsics 계산하거나 필요로 하는 방법을 사용하지 마십시오.

    • Zivid 카메라는 이미 복잡한 자체 모델을 사용하여 보정되어 있습니다.

    • Zivid SDK는 OpenCV 및 Halcon 모델에 대한 근사치를 제공하지만, 이러한 근사치는 (자체 개발 모델과 달리) 정확도가 떨어집니다.

권장 사항:

  • 3D 포인트 클라우드 데이터를 활용하여 외부 계산을 수행하는 Zivid Hand-Eye Calibration을 사용하십시오.

  • CAD 매칭 기반의 대체 방법도 괜찮습니다(이 방법 역시 포인트 클라우드에서 카메라 외부 매개변수를 계산합니다). 하지만 이러한 방법은 Zivid에 특화된 최적화 기능이 부족할 수 있습니다.

  • Zivid 방식의 추가적인 장점은 ArUco 마커를 지원한다는 점인데, 이 마커는 로봇 셀(온암 카메라) 또는 로봇(고정 카메라)에 영구적으로 설치할 수 있습니다.

자세한 설명

일부 타사 핸드-아이 캘리브레이션 방법은 카메라의 내부 매개변수와 외부 매개변수, 그리고 카메라와 로봇 프레임 간의 상대적 자세를 함께 계산합니다. 하지만 이러한 방법은 Zivid 카메라를 제대로 캘리브레이션된 3D 카메라가 아닌 캘리브레이션되지 않은 2D 카메라로 취급하기 때문에 권장하지 않습니다.

각 Zivid 카메라 장치는 2D 컬러 카메라의 Intrinsic 파라미터를 결정하는 등 광범위한 캘리브레이션 프로세스를 거칩니다. 당사의 칼리브레이션은 잘 알려진 핀홀 카메라 모델보다 더 많은 Intrinsic 파라미터를 가진 복잡한 카메라 모델(예: OpenCV 카메라 모델)을 사용합니다. Zivid 카메라 모델은 고유하기에 내부 카메라의 Intrinsic 기능은 SDK에서 사용할 수 없습니다. 그러나 Zivid SDK는 카메라 모델에서 OpenCV 및 Halcon 모델의 근사치를 제공합니다(Camera Intrinsics 을 참조하십시오.). 근사치에서 정보가 손실될 수 있기 때문에 OpenCV 또는 Halcon Intrinsic 함수를 활용하는 핸드-아이 칼리브레이션 방법을 사용하는 것도 최선의 방법이 아닙니다.

Zivid 카메라는 3D 데이터를 제공하므로 포인트 클라우드에서 카메라 Extrinsics을 계산할 수 있습니다. Zivid 핸드-아이 칼리브레이션 방법은 이 이점을 활용하므로 이것이 권장되는 접근 방식이며 당사 카메라에서 가장 잘 작동하는 방법입니다. 포인트 클라우드에서 카메라 Extrinsics을 계산할 수 있는 가능성을 활용하는 Zivid가 아닌 대체 방법이 있습니다. 이러한 방법은 순전히 포인트 클라우드 데이터에 의존하며 예를 들어 CAD 일치를 기반으로 한 핸드-아이 칼리브레이션이 있습니다.

Zivid Hand-Eye Calibration을 사용하는 또 다른 이유는 ArUco 마커를 지원한다는 것입니다. ArUco 마커는 비교적 작아 로봇 셀에 영구적으로 설치할 수 있습니다. 특히 고정형 카메라(eye-to-hand)에 사용하기 편리하며, 로봇 플랜지와 그리퍼 사이에 설치할 수 있습니다. 반면, 로봇 장착형 카메라(eye-in-hand)의 경우, 마커를 로봇 작업 공간 어딘가에 영구적으로 설치할 수 있습니다.

핸드-아이 캘리브레이션을 성공적으로 완료하셨기를 바랍니다. 결과의 정확도를 확인하려면 핸드-아이 캘리브레이션 확인 방법 문서를 참조하세요.

Version History

SDK

Changes

2.15.0

탐지에 실패한 이유에 대한 정보가 detection API에 추가되었습니다.