핵심 요약
- 손-눈 보정은 카메라 좌표와 로봇 손끝 또는 베이스 좌표 사이의 3차원 변환을 찾는 작업입니다.
- 카메라가 손목에 붙은 eye-in-hand와 외부에 고정된 eye-to-hand는 같은 목적이지만 변환의 방향이 다릅니다.
- 로봇 자세와 표적 자세를 여러 번 짝지어 모은 뒤, 상대 움직임이 AX=XB를 만족하도록 회전과 이동을 계산합니다.
- 서로 다른 방향의 회전이 포함되어야 하며, 최소 조건만 채우기보다 넓고 다양한 자세를 모으는 편이 좋습니다.
- 재투영 오차 하나로 끝내지 말고 보류한 자세, 좌표 폐쇄 오차와 실제 집기 위치를 함께 검증해야 합니다.
카메라가 본 위치를 로봇이 그대로 쓸 수는 없습니다
손-눈 보정은 카메라 좌표계와 로봇 좌표계 사이의 고정된 위치와 방향을 찾는 과정입니다. 카메라는 물체를 자기 렌즈 기준으로 봅니다. 반면 로봇 제어기는 베이스나 손끝 기준으로 움직입니다. 두 기준을 잇는 변환을 모르면 영상 속 물체가 오른쪽 10센티미터에 보여도 로봇은 어느 방향으로 얼마나 움직여야 하는지 정확히 알 수 없습니다.
여기서 ‘손’은 로봇의 그리퍼나 공구 좌표이고 ‘눈’은 카메라 좌표입니다. 결과는 보통 3차원 회전 행렬과 이동 벡터로 표현됩니다. 한 번 제대로 구하면 카메라에서 측정한 점을 손끝 또는 베이스 좌표로 바꿀 수 있습니다. 그러나 이 값은 카메라가 로봇에 단단히 고정되고 기구 모델이 맞다는 조건에서만 일정합니다.

손목 카메라와 외부 카메라는 무엇이 다를까요
eye-in-hand 구성에서는 카메라가 로봇 손목과 함께 움직입니다. 로봇이 자세를 바꿀 때마다 카메라도 움직이므로 고정된 보정판을 여러 각도에서 봅니다. 이때 찾는 핵심 값은 카메라에서 손끝으로 가는 변환입니다. 좁은 곳을 가까이 볼 수 있지만 케이블, 하중과 손목 진동의 영향을 받을 수 있습니다.
eye-to-hand 구성에서는 카메라가 작업대나 삼각대에 고정되고 로봇 또는 로봇이 든 표적이 움직입니다. 이때는 카메라와 로봇 베이스 사이의 변환을 주로 찾습니다. 작업 공간 전체를 보기 쉽지만 로봇이나 물체가 카메라 시야를 가릴 수 있습니다. 두 구성을 혼동해 변환 방향을 뒤집으면 숫자는 그럴듯해도 실제 명령은 반대 방향으로 갈 수 있습니다.
여러 자세를 짝지어 AX=XB를 풉니다
데이터 한 쌍에는 로봇 베이스에서 본 손끝 자세와 카메라에서 본 보정 표적 자세가 함께 들어갑니다. 서로 다른 두 자세를 비교하면 로봇 손끝이 얼마나 움직였는지 A로, 카메라에서 표적이 얼마나 달라 보였는지 B로 만들 수 있습니다. 카메라와 손끝 사이의 미지 변환을 X라고 하면 이상적인 관계는 AX=XB가 됩니다.
여러 자세 쌍에서 같은 X가 성립하도록 회전과 이동을 추정합니다. OpenCV의 calibrateHandEye는 Tsai, Park, Horaud, Andreff와 Daniilidis 계열 방법을 제공합니다. 어떤 방법은 회전과 이동을 나눠 풀고, 어떤 방법은 동시에 풉니다. 알고리즘 이름만 바꾸는 것보다 입력 자세와 측정 품질이 충분한지 먼저 확인해야 합니다.

자세 수보다 움직임의 다양성이 더 중요합니다
OpenCV 문서는 서로 평행하지 않은 회전축을 가진 두 번 이상의 움직임, 즉 최소 세 자세가 필요하다고 설명하며 더 많은 자세를 강하게 권합니다. MoveIt 튜토리얼은 다섯 자세부터 계산을 시작하고, 그 예제에서는 약 12~15개에서 결과 개선이 완만해진다고 안내합니다. 이 숫자는 모든 카메라와 로봇에 통하는 보장값이 아니라 데이터 수집을 시작하는 실무적 참고입니다.
중요한 것은 같은 방향으로 조금씩만 움직이지 않는 것입니다. 손목을 좌우·상하로 기울이고 거리를 바꾸며 표적이 화면 중앙과 가장자리에도 들어오게 해야 합니다. 회전축이 거의 같거나 이동 범위가 너무 작으면 여러 X가 비슷하게 맞아 해가 불안정해집니다. 반대로 표적이 흐리거나 일부만 보이는 극단 자세는 측정 잡음을 키울 수 있습니다.
계산 전에 갖춰야 할 조건이 있습니다
손-눈 보정 전에 카메라 내부 보정이 되어 있어야 합니다. 초점거리, 주점과 렌즈 왜곡이 틀리면 보정판 자세도 틀립니다. MoveIt 튜토리얼도 좋은 내부 파라미터와 정확한 카메라 좌표를 전제로 합니다. 보정판은 평평하고 크기와 마커 간격을 정확히 알아야 하며, 데이터 수집 중 기준 위치에서 움직이지 않아야 합니다.
로봇 쪽에서는 관절 엔코더, 링크 길이, 공구 좌표가 실제와 맞아야 합니다. 카메라 이미지 시각과 로봇 자세 시각이 어긋나면 움직이는 중 촬영한 데이터가 서로 다른 순간을 짝짓게 됩니다. 가능하면 로봇을 멈춘 뒤 흔들림이 가라앉았을 때 촬영하고, 타임스탬프와 좌표 프레임 이름을 기록해야 합니다. 자동 수집이라면 시간 동기 오차를 별도로 측정하는 편이 좋습니다.

좋은 결과는 새 자세와 실제 작업으로 확인합니다
계산이 끝나면 수집 데이터에 다시 맞는지만 보지 말아야 합니다. 학습에 쓰지 않은 자세에서 보정판 좌표를 예측하고 실제 관측과 비교해야 합니다. 로봇 베이스에서 표적까지 가는 여러 변환 경로가 같은 위치로 닫히는지 확인하면 회전·이동의 잔차를 따로 볼 수 있습니다. 화면의 재투영 오차가 작아도 깊이 방향 오차가 클 수 있습니다.
최종 검증은 실제 작업 좌표에서 해야 합니다. 예를 들어 카메라로 큐브 중심을 찾고 로봇이 여러 위치의 큐브 위에 접근하도록 합니다. 위치 오차뿐 아니라 그리퍼 방향, 작업대 높이 변화, 시야 가장자리와 가까운 거리에서도 결과를 기록합니다. 평균 오차만 제시하면 큰 실패가 가려질 수 있으므로 최대 오차와 자세별 분포도 함께 봐야 합니다.
장착이 바뀌면 보정값도 다시 확인해야 합니다
보정값은 영구적인 상수가 아닙니다. 카메라 브래킷을 다시 조였거나 충격을 받았고, 손목 공구나 렌즈 초점을 바꾸었다면 변환이 달라질 수 있습니다. 케이블 힘과 온도, 로봇 링크의 탄성 때문에 자세에 따라 카메라가 아주 조금 움직일 수도 있습니다. 이런 경우 하나의 고정 변환만으로 모든 자세를 정확히 설명하기 어렵습니다.
현장에서는 기준 물체를 정기적으로 다시 관측해 오차 추세를 확인하는 것이 좋습니다. 오차가 허용 범위를 넘으면 카메라 내부 보정, 로봇 기구 보정, 시간 동기와 손-눈 보정을 나눠 점검해야 합니다. 손-눈 보정은 좌표를 잇는 중요한 고리지만, 그 앞뒤 측정까지 정확해야 로봇이 영상 속 목표를 실제 공간에서 안정적으로 집을 수 있습니다.
확인한 원문
- OpenCV 4.13.0: Camera Calibration and 3D Reconstruction — calibrateHandEye
- MoveIt Tutorials: Hand-Eye Calibration
자료 확인일: 2026년 9월 23일.
함께 보면 좋은 글
글쓴이

Sean Woo — 15년 이상 로보틱스 기술·사업 방향성 수립 업무를 해왔습니다. 공개된 기술문서·논문·기업 발표를 바탕으로 로봇과 AI의 변화를 이해하기 쉽게 분석합니다. 이 매체의 해석은 특정 회사나 기관의 공식 입장을 대변하지 않습니다.