로봇 Hand-Eye Calibration AX=XB: Eye-in-Hand·Eye-to-Hand 실전 가이드

결론부터 말하면 카메라가 손목에 붙어 있으면 Eye-in-Hand, 작업대나 셀에 고정돼 있으면 Eye-to-Hand로 문제를 정의한 뒤 모든 변환의 출발·도착 좌표계를 먼저 기록해야 합니다. OpenCV의 calibrateHandEye 문서는 그리퍼-베이스와 타깃-카메라 포즈 묶음으로 카메라-그리퍼 변환을 구합니다. 입력 방향을 반대로 넣으면 수치가 나와도 실제 위치는 틀릴 수 있습니다.

실무에서는 최소 개수만 채우기보다 서로 다른 두 축 이상으로 충분히 회전한 포즈를 모으고, 계산에 쓰지 않은 포즈와 실제 작업점에서 검증해야 합니다. 전체 보정 종류는 로봇 캘리브레이션 가이드, TF의 방향 표기는 로봇 좌표계와 TF2, 타깃 포즈 추정은 6D 객체 자세 추정에서 따로 확인할 수 있습니다.

먼저 카메라 위치와 변환 방향을 한 장에 고정한다

Eye-in-Hand에서는 카메라가 엔드이펙터와 함께 움직이고 보정 결과는 카메라와 그리퍼 사이의 고정 변환입니다. Eye-to-Hand에서는 카메라가 베이스 쪽에 고정되고 타깃이 손과 함께 움직입니다. 두 구성 모두 같은 AX=XB 형태로 정리할 수 있지만, 어떤 포즈를 역변환할지는 달라집니다.

샘플을 받기 전에 base, gripper, camera optical frame, target 네 좌표계의 이름과 화살표를 도식으로 남깁니다. optical frame의 축 규약, 로봇 드라이버가 내보내는 포즈 방향, 타깃 검출기가 반환하는 변환 방향을 확인하고 단위가 m인지 mm인지도 고정해야 합니다.

구성고정된 것움직이는 것구하려는 관계대표 실수
Eye-in-Hand타깃·로봇 베이스그리퍼·카메라camera↔grippergripper→base를 base→gripper로 착각
Eye-to-Hand카메라·로봇 베이스그리퍼·타깃camera↔base타깃 포즈의 역변환 누락
공통타깃 크기·좌표 정의로봇 포즈일관된 SE(3) 변환mm와 m, 회전 표현 혼용

내부 파라미터와 타깃 품질이 먼저 통과해야 한다

Hand-Eye는 잘못된 카메라 내부 보정을 고쳐 주지 않습니다. 초점, 해상도, 렌즈, 노출과 캡처 파이프라인을 실제 운용 상태로 고정하고 왜곡 보정과 CameraInfo가 맞는지 확인합니다. 초점을 바꾸거나 보호창을 추가했다면 이전 결과를 재사용하지 않는 편이 안전합니다.

OpenCV의 캘리브레이션 패턴 가이드는 패턴 종류와 검출 조건을 설명합니다. 평평하고 치수가 확인된 타깃을 사용하고, 인쇄 배율과 휨을 점검합니다. 타깃이 작거나 화면 가장자리에서 흐리면 자세 오차가 손-눈 변환에 그대로 들어갑니다.

좋은 데이터는 거리보다 회전 다양성에서 갈린다

같은 방향으로 평행 이동만 반복하면 AX=XB를 안정적으로 풀기 어렵습니다. MoveIt Hand-Eye 튜토리얼은 최소 다섯 샘플 이후 계산할 수 있고, 서로 다른 두 회전축이 필요하며, 보통 12~15개 부근에서 결과가 안정되는 흐름을 설명합니다. 숫자보다 중요한 것은 관측의 독립성입니다.

로봇 작업공간의 중앙·가장자리, 가까운 거리·먼 거리, 양·음의 회전을 섞되 관절 한계와 충돌 여유를 지킵니다. 각 샘플은 로봇이 정지한 뒤 시간 동기화된 이미지와 관절 상태로 잡고, 검출 신뢰도가 낮거나 모션 블러가 있는 프레임은 계산 전에 제외합니다.

Curiosity 로봇 팔 끝에 장착된 MAHLI 카메라
팔 끝 카메라의 실제 사례이지만 AX=XB 핸드아이 보정 절차나 체커보드, 변환 행렬, 오차 결과를 보여주지는 않습니다. 출처: NASA. 라이선스: Public domain.

AX=XB 솔버 이름보다 입력 일관성을 먼저 본다

OpenCV는 Tsai, Park, Horaud 같은 회전·이동 분리 방식과 Andreff, Daniilidis 같은 동시 추정 방식을 제공합니다. 여러 방법의 결과가 비슷하면 데이터가 일관된 신호이고, 특정 방법만 크게 다르면 포즈 다양성, 좌표 방향, 타깃 검출 이상치를 먼저 의심해야 합니다.

한 방법에서 가장 작은 재투영 오차가 나왔다고 자동으로 채택하지 않습니다. 같은 입력을 모든 후보 솔버에 넣어 translation과 rotation 차이를 기록하고, 부트스트랩이나 샘플 제거로 결과 민감도를 확인합니다. 솔버 선택은 실제 홀드아웃 오차까지 본 뒤 결정합니다.

검증량계산 데이터통과 의미놓칠 수 있는 문제
타깃 재투영 오차각 이미지 코너영상 검출·내부 보정 일관성로봇 좌표 오차
AX=XB 잔차학습 포즈 쌍변환 방정식 내부 일관성과적합·작업점 편향
홀드아웃 변환 오차미사용 포즈새 자세에서 일반화그리퍼·툴 오프셋
실제 픽·프로브 오차독립 측정점작업 요구 충족동적 지연·백래시

계산에 쓰지 않은 포즈와 실제 작업점으로 검증한다

전체 샘플의 일부는 처음부터 홀드아웃으로 남깁니다. 계산된 변환을 사용해 홀드아웃 타깃 위치를 베이스 좌표로 옮기고, 로봇이 보는 위치가 포즈에 따라 한 방향으로 떠다니는지 확인합니다. 평균만 보지 말고 최대값과 방향별 편향을 기록합니다.

마지막 단계는 실제 그리퍼나 측정 프로브로 여러 작업점을 접근하는 것입니다. 카메라 중앙 한 점만 맞추면 충분하지 않습니다. 가까운 곳과 먼 곳, 작업공간 네 모서리, 서로 다른 높이에서 오차를 측정하고 그리퍼 TCP 보정과 Hand-Eye 오차를 분리합니다.

로봇 Hand-Eye Calibration AX=XB: Eye-in-Hand·Eye-to-Hand 실전 가이드의 핵심 판단 네 가지를 정리한 모바일 카드
글의 공식 출처와 비교표를 바탕으로 Physical AI Lab이 제작한 편집 카드입니다. 출처: Physical AI Lab. 라이선스: Owned original.

실패 패턴은 오차의 방향으로 좁혀 간다

모든 포즈에서 일정한 평행 이동 오차가 나면 타깃 치수, TCP 또는 고정 변환을 먼저 봅니다. 자세에 따라 오차 방향이 바뀌면 회전 추정, 시간 동기화, 로봇 탄성이나 좌표 역변환을 의심합니다. 화면 가장자리에서만 커지면 내부 보정과 렌즈 모델을 다시 확인합니다.

로봇이 움직일 때만 틀린다면 정적 보정보다 이미지·관절 타임스탬프와 셔터 지연 문제가 클 수 있습니다. 카메라 브래킷이 미세하게 움직이거나 케이블 힘으로 각도가 변하는지도 점검합니다. 소프트웨어에서 숫자를 보정해 가리기 전에 기구 반복성과 동기화를 먼저 고칩니다.

결과는 버전·장착 상태·검증 증거와 함께 배포한다

출력 행렬만 저장하지 말고 카메라 일련번호, 렌즈와 해상도, 타깃 종류·실측 크기, 로봇 모델·펌웨어, TCP, 포즈 목록, 솔버, 제외 샘플과 검증 결과를 한 묶음으로 남깁니다. 변환의 출발·도착 프레임과 단위도 파일 이름이 아니라 메타데이터에 기록합니다.

카메라나 그리퍼를 분리·재장착했거나 충돌, 브래킷 교체, 초점 변경이 있었다면 재검증합니다. 생산에서는 기준 타깃 한 점을 주기적으로 관측해 드리프트를 감시하고, 허용치를 넘으면 자동으로 작업을 중지한 뒤 재보정하도록 운영 절차를 연결해야 합니다.

자주 묻는 질문

Hand-Eye Calibration에는 포즈가 몇 개 필요한가요?

계산 자체는 적은 샘플로도 가능하지만 실무에서는 서로 다른 두 축 이상으로 회전한 12~15개 안팎을 출발점으로 삼고 별도 홀드아웃 포즈를 둡니다. 정확한 개수보다 회전 다양성과 검출 품질이 더 중요합니다.

재투영 오차가 작으면 보정이 끝난 건가요?

아닙니다. 작은 재투영 오차는 이미지 코너와 카메라 모델의 일관성을 주로 보여 줍니다. AX=XB 잔차, 미사용 포즈, 실제 픽·프로브 오차를 별도로 확인해야 합니다.

Eye-in-Hand 결과를 Eye-to-Hand에 그대로 쓸 수 있나요?

그대로 쓸 수 없습니다. 고정·이동 좌표계와 필요한 역변환이 달라집니다. 같은 솔버를 활용할 수 있어도 입력 변환의 의미와 최종 출력 프레임을 다시 정의해야 합니다.

확인한 공식 자료

마지막 확인: 2026년 8월 7일