물체를 잡는 부분과 목표를 표시하는 좌표는 다르다
그리퍼는 물체와 접촉해 고정하는 장치다. 평행 손가락·흡착 등 방식이 다르면 필요한 관측과 실패 조건도 다르다. 평행 그리퍼의 명령 숫자가 손가락 사이 거리(m), 모터 각도(rad), 정규화 값 중 무엇인지 먼저 확인한다. 예를 들어 명령 0.5를 보냈다는 기록만으로 손가락 간격 0.5 m나 물체 파지를 뜻한다고 해석할 수 없다. 엔코더가 닫힘 위치를 나타내도 물체가 없거나 미끄러질 수 있다. 접촉·하중/흡착 압력 또는 별도 관측과 작업별 판정이 필요하다.
그림 M19.01-1. 각 칸은 서로 다른 역할/근거다. 아래 방향은 자료/처리의 연결이며 실제 성공을 자동으로 보장하지 않는다. 직접 제작한 개념도이며 본문의 조건과 함께 읽는다.
플랜지 F는 팔 끝 장착부에 정한 기준 프레임이고, Tool Frame T는 부착 공구에 정의한 프레임이다. TCP(Tool Center Point)는 작업 위치를 대표하는 점이며, 그 점을 원점으로 방향까지 정한 것이 여기서의 Tool Frame이다. 제조사/모델마다 이름과 축이 다를 수 있으므로 tool0 같은 이름만으로 실제 TCP라고 단정하지 않는다. 손가락 중심이나 드라이버 끝을 TCP로 택하면 작업 설명이 쉬워진다. 공구 교체/재조립이나 접촉점 변화가 있으면 고정 offset을 다시 확인한다.
작업 프레임 W는 테이블·지그 등 과업의 기준이다. 물체를 작업 프레임에서 지정하면 테이블 배치가 달라져도 그 안의 목표를 유지할 수 있다. 다만 base B에 대한 W의 변환이 정확히 갱신되어야 한다. 관절 명령, 그리퍼 명령, TCP의 위치/방향은 서로 다른 계약이며 하나의 '로봇 위치' 열에 섞어 적지 않는다.
아래첨자를 연결해 목표를 바꾼다
이 단위는 오른손 좌표계·열벡터를 쓴다. T_AB는 B에 표현한 동차 점을 A로 바꾸는 4×4 행렬이다. 회전 R_AB는 3×3, 이동 t_AB는 A에서 본 B 원점의 3×1 위치(m)이며 마지막 행은 (0,0,0,1)이다. 회전 예제의 90도는 π/2 rad와 같다. Modern Robotics 저자 자료의 곱셈 순서처럼 가운데 프레임을 연결한다.
TCP 목표 T_BT와 고정 공구 변환 T_FT를 알면 플랜지 목표는 다음과 같다. 별표 *는 원하는 목표를 뜻하고 역행렬은 변환 방향을 뒤집는다.
두 식을 확인하려면 T_BF* T_FT=T_BT*를 다시 곱한다. TCP 목표를 그대로 플랜지 목표로 주면 공구 길이만큼 틀릴 수 있다. 이동만 부호를 바꿔 빼는 방법도 일반 회전에서는 맞지 않는다. 회전과 이동을 함께 다루어야 한다.
합성 사례에서 W는 base의 z축으로 +90도 회전하고 원점은 (0.5,0,0) m다. 작업 프레임의 TCP 목표 위치는 (0.2,0.1,0.3) m이고 방향은 W와 같다. +90도 회전은 (x,y,z)를 (−y,x,z)로 바꾸므로 base 위치는 (−0.1,0.2,0.3)+(0.5,0,0)=(0.4,0.2,0.3) m다. 목표 TCP 방향도 base에 대해 +90도다.
공구는 플랜지와 방향이 같고 TCP가 플랜지 +x로 0.1 m 떨어져 있다고 하자. 따라서 플랜지에서 본 offset은 (0.1,0,0)이지만 base에서는 목표 회전 때문에 (0,0.1,0) m다. 플랜지 목표 위치는 (0.4,0.2,0.3)−(0,0.1,0)=(0.4,0.1,0.3) m이고 방향은 +90도다. 여기에 회전된 offset을 더하면 원래 TCP 목표로 돌아간다. base의 x에서 0.1을 빼는 답은 offset이 어느 프레임의 값인지 놓친 것이다.
공구 길이만 0.15 m로 바꾸면 플랜지 위치는 (0.4,0.05,0.3) m다. TCP 작업 목표를 유지하더라도 관절 해는 달라질 수 있다. 목표 자세가 있다고 팔이 반드시 거기에 도달하는 것은 아니다. IK는 목표를 만드는 관절값을 찾는 문제이고 경로 계획은 시작부터 목표까지 중간 상태를 연결하는 문제다. 관절 범위·특이점·공구/물체와 환경의 충돌을 따로 검사한다. 한 끝점의 좌표 계산은 충돌 없는 실행 허가가 아니다. 이 차이를 다음 MoveIt 단위에서 확장한다.
카메라를 어디에 고정했는지 먼저 정한다
핸드아이 보정은 로봇 쪽 기준과 카메라 사이의 고정 강체 변환을 여러 대응 관측에서 구하는 문제다. 카메라를 팔 끝에 고정한 eye-in-hand와 작업대에 고정한 eye-to-hand를 구분한다. 전자는 보통 플랜지→카메라 관계가 고정이고 base→카메라는 관절 자세에 따라 변한다. 후자는 장착이 유지되면 base→카메라가 고정일 수 있다. 장착 조건과 무엇이 움직이는지 명시해야 같은 식을 잘못 재사용하지 않는다.
eye-in-hand에서 F에 카메라 C를 단단히 고정하고 보정 표적 O는 base에 고정했다고 하자. i번째 동시 관측의 로봇 변환을 G_i=T_BF(i), 표적의 카메라 변환을 C_i=T_CO(i), 구하려는 고정값을 X=T_FC로 정의한다. 모든 관측에서 G_i X C_i는 같은 T_BO가 되어야 한다. 두 관측 i/j를 비교하면 다음 관계를 얻는다.
A_i/B_i는 두 관측 사이 상대 운동이며 X와 곱하는 순서가 다르다. 이 식은 '카메라 translation 한 번 빼기'가 아니라 회전/이동이 연결된 제약이다. 여기서는 해법 코드를 실행하지 않고 어떤 자료와 방향이 필요한지 판정한다. OpenCV4.13 calibrateHandEye는 gripper→base와 target→camera를 입력받아 camera→gripper를 출력한다. 이 예제에서 그 gripper 프레임을 F로 택했다면 출력이 X다. Tool TCP 프레임으로 바꾸려면 추가 고정 변환까지 일관되게 적용한다.
많은 자료보다 식을 구분할 수 있는 자료가 필요하다
한 자세에서 표적이 잘 보였다는 사실만으로 X 전체가 결정되지는 않는다. 같은 축의 작은 회전만 반복하면 구분하기 어려운 성분이 남을 수 있다. OpenCV 문서는 최소한 비평행 회전축을 가진 두 상대 운동과 세 자세를 요구하며 더 많은 자료를 권장한다. 그 숫자만 채웠다고 정확도가 보장되는 것은 아니다. 다양한 관측에서도 표적이 제대로 보이고 로봇/영상의 취득 시각이 대응해야 한다. 보드 크기의 단위, 카메라 내부 보정, 로봇 기구학 모델, 사용한 프레임과 장착 상태도 결과에 영향을 준다.
예를 들어 수집 표가 '20행 모두 같은 z축 회전, 영상 취득/관절 시각 차이 미상, 보드 칸 크기 단위 미상'이라면 행 수만으로 통과시키지 않는다. 축 다양성·단위/시간 대응을 먼저 보완할 자료로 표시한다. 이 활동은 수집 계획의 검토이며 실제 팔을 움직이라는 지시가 아니다.
검증에서는 추정에 쓰지 않은 자세/관측의 표적 위치·방향 일관성, 영상 재투영 잔차, 독립 기준과의 오차를 구별한다. 작은 pixel 잔차만으로 TCP의 m 단위 정확도를 승인하지 않는다. 보정 버전·카메라/공구 장착 버전·시간 기준·적용 범위를 함께 기록하고 장착이 달라지면 재검증한다. 기존 3.2 동차변환 체인과 기존 4.1 카메라 보정 품질은 자세한 모델 연결 자료다. 기본 활동은 아래 수치/기록만으로 끝난다.