AX=ZB Robot-World Hand-Eye Calibration: AX=XB로 풀 수 없는 셀을 보정하는 법

AX=ZB가 필요한 조건은 로봇 베이스↔월드와 그리퍼↔카메라 변환이 모두 미지수인 경우다. 한 개의 hand-eye 변환만 구하면 되는 셀이라면 AX=XB를 쓰고, 두 변환을 동시에 추정해야 할 때 Robot-World/Hand-Eye 문제로 넓힌다. 다만 논문과 API마다 A·B·X·Z의 방향이 다를 수 있다. 이 글은 OpenCV `calibrateRobotWorldHandEye`의 표기를 기준으로 입력과 출력을 고정한 뒤, 자세 수집·단위·독립 검증까지 연결한다.

산업용 로봇·비전 카메라·이동로봇·작업자가 안전구역에서 협업하는 유연 제조 셀
특정 공장이나 제품의 실제 배치가 아닌, 비전 검사·작업 인계·안전 분리·유연 전환을 설명하기 위한 AI 생성 개념 이미지입니다.

AX=XB와 AX=ZB를 미지 변환 수로 구분한다

첫 단계는 프레임 가운데 무엇이 이미 알려졌는지 적는 일이다. 로봇 베이스와 월드 타깃의 관계가 고정·기지인지, 카메라가 그리퍼에 붙어 있는지 외부에 고정돼 있는지, 로봇이 보고하는 자세가 어느 방향의 변환인지 명시한다. 논문과 API마다 기호 정의가 다를 수 있으므로 A·B·X·Z만 복사하지 않는다.

기존 AX=XB Hand-Eye Calibration 가이드는 Eye-in-Hand와 Eye-to-Hand의 기본 구성을 설명한다. 그 문제에서 하나의 미지 hand-eye 변환을 구하는 것으로 충분한지, 로봇-월드 관계까지 동시에 풀어야 하는지가 갈림길이다. AX=ZB는 표기만 다른 같은 방정식이 아니라 미지 변환과 측정 구성이 늘어난 문제다.

보정 단계가 불명확하면 소프트웨어를 바꿔도 결과가 좋아지지 않는다. 타깃이 월드에 고정됐다고 가정했지만 실제로 움직이거나, 로봇 베이스가 설비 좌표에 정확히 설치됐다고 가정했지만 측정되지 않았다면 solver가 잘못된 가정을 흡수한다. 먼저 기구와 프레임 계약을 확정한다.

자세·영상·타임스탬프를 한 보정 세션으로 묶는다

카메라·로봇·타깃을 교체하거나 셀을 복제하는 변경은 보정을 다시 검토해야 하는 계기다. 하지만 곧바로 더 비싼 타깃이나 카메라를 사는 것보다 현재 데이터가 재현 가능한지 확인하는 편이 먼저다. 이미지 원본, 타깃 검출 결과, 로봇 자세, 타임스탬프, 소프트웨어와 좌표변환 정의를 한 묶음으로 보존한다.

자세 표본은 수만 많다고 좋은 것이 아니다. 회전축과 이동 방향이 비슷한 자세만 반복하면 일부 자유도가 약하게 관측될 수 있다. 작업 공간에서 가능한 범위 안에서 회전과 이동이 다양하게 들어가도록 계획하고, 타깃이 이미지 가장자리나 심한 경사에서 불안정하게 검출되는 표본은 품질을 별도로 표시한다.

데이터 수집 중 타깃이나 카메라 장착이 움직였다면 한 세트로 합치지 않는다. 작업 중간의 기구 변경은 새 보정 세션의 시작이다. 로봇 자세와 영상의 시간 대응도 확인한다. 정지 후 촬영인지 연속 이동 중 촬영인지에 따라 시간 오프셋의 영향이 달라질 수 있다.

사용할 AX=ZB 기호와 프레임 방향을 먼저 고정한다

이 글에서 쓰는 규약은 OpenCV 문서와 같다. 동차변환 `^{to}T_{from}`은 from 좌표의 점을 to 좌표로 바꾼다. 따라서 `A X = Z B`를 구현하기 전에 아래 네 항목을 코드 주석과 데이터 스키마에 그대로 적는다. 다른 논문의 기호를 가져올 때는 이름이 아니라 실제 프레임 방향을 대조한다.

  • A = `^cT_w`: 월드(보정 타깃) 좌표의 점을 카메라 좌표로 바꾸며 OpenCV 입력 `R_world2cam`, `t_world2cam`에 해당한다.
  • B = `^gT_b`: 로봇 베이스 좌표의 점을 그리퍼 좌표로 바꾸며 OpenCV 입력 `R_base2gripper`, `t_base2gripper`에 해당한다.
  • X = `^wT_b`: 베이스 좌표의 점을 월드 좌표로 바꾸는 미지 변환이며 OpenCV 출력 `R_base2world`, `t_base2world`다.
  • Z = `^cT_g`: 그리퍼 좌표의 점을 카메라 좌표로 바꾸는 미지 변환이며 OpenCV 출력 `R_gripper2cam`, `t_gripper2cam`이다.
  • 로봇 API가 `^bT_g`를 반환한다면 OpenCV가 요구하는 `^gT_b`와 방향이 반대이므로 이름만 바꾸지 말고 명시적으로 역변환한 뒤 합성 항등식으로 확인한다.

NIST의 Robot-World/Hand-Eye calibration 연구 기록은 AX=ZB 계열 문제와 해법의 근거를 제공한다. 이 자료의 가치는 특정 구현을 무조건 선택하게 하는 데 있지 않다. 두 미지 변환을 함께 다루는 문제 정의와 회전·이동 추정의 조건을 확인하는 데 있다.

오차 예산도 분리한다. 타깃 검출, 카메라 내부 보정, 로봇 자세 정확도, 기구 유연성, 시간 대응과 solver 잔차가 최종 작업 오차에 기여한다. 보정 결과의 재투영 오차만 낮다고 로봇 말단의 3차원 위치가 정확하다고 결론내리지 않는다.

OpenCV 입력·출력 배열을 프레임 방향으로 검증한다

OpenCV `calibrateRobotWorldHandEye` 문서는 `^cT_w`와 `^gT_b`의 여러 자세를 입력으로 받아 `^wT_b`와 `^cT_g`를 계산한다고 명시한다. API 문서에는 최소 측정 수가 제시되지만 최소 수만 채우는 것이 충분한 자세 다양성이나 현장 정확도를 보장하지는 않는다. 각 입력 행렬이 실제 어느 방향인지 작은 합성 점과 닫힌 변환 고리로 먼저 확인한다.

회전 표현도 일관돼야 한다. 회전행렬과 회전벡터를 섞는 인터페이스에서는 차원과 단위, 오른손 좌표계, 역변환 여부를 확인한다. 이동 벡터가 밀리미터인지 미터인지도 셀 전체에서 고정한다. 단위 오류는 solver가 실패하기보다 그럴듯한 큰 오차를 낼 수 있어 더 위험하다.

입력 검증에는 닫힌 변환 고리를 사용한다. 알려진 자세와 관측을 결과 변환에 통과시켰을 때 같은 프레임으로 모이는지 확인하고, 각 자세별 잔차 분포를 본다. 일부 자세만 큰 오차를 보이면 타깃 검출 품질, 로봇 자세, 가림과 작업공간 가장자리 조건을 되짚는다.

보정에 쓰지 않은 자세로 작업공간 오차를 검증한다

보정에 사용한 자세에서 잔차가 낮은 것은 solver가 입력을 잘 설명한다는 증거다. 셀 전체가 정확하다는 증거는 아니다. 별도로 남겨 둔 자세와 타깃 위치, 실제 작업 공간의 가장자리에서 변환을 검증한다. 카메라 관측과 로봇 접촉 또는 독립 계측을 연결할 수 있다면 작업 좌표의 오차를 직접 본다.

검증 시편과 작업은 보정 데이터에 섞지 않는다. 같은 표본을 보정과 합격에 함께 쓰면 일반화 실패를 발견하기 어렵다. 좌표·변환 기초는 로봇 좌표계와 TF2의 map·base·tool 방향 정의와 맞추고, solver 잔차와 실제 작업 좌표 오차를 별도 열에 둔다.

생산 중에는 드리프트 검사를 둔다. 카메라나 툴을 재장착하고, 로봇 충돌·정비가 있었거나, 타깃·지그가 움직인 뒤에는 과거 변환을 자동 승계하지 않는다. 작은 기준 측정을 반복해 변화가 있는지 확인하고 필요하면 전체 보정을 다시 수행한다.

복제 셀에는 행렬이 아니라 절차와 합격 증거를 복사한다

AX=ZB 해법이 한 셀에서 동작해도 여러 셀에 그대로 복사되지는 않는다. 로봇 베이스 설치, 카메라 브래킷, 타깃 위치, 내부 보정과 소프트웨어 버전의 편차가 변환에 들어간다. 복제 가능한 것은 결과 행렬이 아니라 데이터 수집·프레임 정의·검증 절차다.

  • A·B·X·Z와 모든 API 변환을 프레임 방향 문장으로 정의한다.
  • 로봇 자세·이미지·타깃 검출·타임스탬프·내부 보정 버전을 한 세트로 보존한다.
  • 회전축과 이동 방향이 다양한 자세를 수집하고 불량 관측을 숨기지 않는다.
  • 보정에 쓰지 않은 자세와 실제 작업 공간에서 독립 검증한다.
  • 재투영 오차와 로봇 작업 좌표 오차를 다른 지표로 관리한다.
  • 카메라·툴·베이스·지그 변경 뒤 영향 범위를 확인하고 변환 승계 조건을 문서화한다.

최종 승인에서는 평균 오차뿐 아니라 최악 자세, 작업공간 가장자리와 실패 표본을 본다. DLR의 hand-eye calibration 연구가 다루는 회전·이동 추정과 검증의 문제를 참고하되, 논문 조건을 현장 정확도 보증으로 바꾸지 않는다. 셀의 공차와 안전 요구에 맞춘 독립 검증이 마지막 판단이다.

AX=ZB Robot-World Hand-Eye Calibration 실무 질문

실제 생산 셀에서도 항상 AX=ZB를 써야 하나요?

아니다. 로봇 베이스와 월드의 관계가 이미 정확히 알려져 있고 hand-eye 변환 하나만 미지수라면 AX=XB 구성이 더 적절할 수 있다. 두 변환을 함께 추정해야 하는 측정 구성인지 먼저 확인하고, 문제를 불필요하게 키우지 않는다.

한 셀의 보정값을 다른 동일 모델 셀에 복사해도 되나요?

동일 모델이라도 베이스 설치, 브래킷, 카메라 내부 보정, 타깃·지그 위치와 조립 편차가 다를 수 있다. 복사할 것은 행렬보다 데이터 수집·프레임 정의·검증 절차이며, 각 셀에서 독립 자세와 실제 작업 좌표로 합격을 확인해야 한다.

자료 마지막 확인: 2026년 8월 26일