내부와 외부는 서로 다른 질문이다
내부 파라미터는 카메라 좌표의 광선을 영상 픽셀에 대응시키는 f_x/f_y·주점 c_x/c_y와 왜곡 모형/계수 등이다. M12.02의 K와 D가 여기에 해당한다. 외부 파라미터는 서로 다른 프레임 사이의 회전/이동이다. 카메라와 로봇 base의 장착 관계, 보정판과 카메라의 상대 자세는 모두 외부 관계지만 서로 같은 변환은 아니다. 보정 calibration은 대응 관측과 모형으로 이 값을 추정/검사하는 과정이며 숫자를 파일에 적는 행위만을 뜻하지 않는다.
초점/영상 crop·resize가 바뀌면 내부 파라미터의 영상 계약을 확인한다. 카메라 장착이 움직이면 base와 카메라의 외부 관계를 확인한다. 장착이 고정이어도 로봇 팔에 달린 카메라의 세계 위치는 관절 운동에 따라 달라질 수 있다. ‘한 번 보정했으니 모든 프레임 관계가 영구 고정’이라는 주장은 틀리다. 원본 영상/왜곡 제거 영상과 보정 개정/해상도·시각을 함께 묶는다.
프레임 축도 계약이다. ROS의 일반 몸체 축은 x 전방/y 좌측/z 위쪽을 쓰고 optical은 x 오른쪽/y 아래/z 전방을 쓴다. 실제 축을 회전시키지 않고 이름에 _optical만 붙여도 맞아지는 것은 아니다. REP103 공식 원문의 오른손/SI/광학 규약을 실제 센서/모델 경계에 대조한다. 예외 규약을 쓴다면 이유와 어댑터를 명시한다.
어느 좌표에서 어느 좌표로 보내는가
C를 카메라 optical, B를 기준 Cartesian 프레임이라고 하자. 아래 R_BC는 C의 벡터를 B축으로 표현하는 3×3 회전행렬이고 t_BC는 C의 원점 위치를 B에서 표현한 m 벡터다. p_C/p_B는 같은 물리점의 서로 다른 열벡터 좌표다. 이 정의가 변환 방향을 고정한다.
그림 M14.01-1. 각 칸은 서로 다른 역할/근거다. 아래 방향은 자료/처리의 연결이며 실제 성공을 자동으로 보장하지 않는다. 직접 제작한 개념도이며 본문의 조건과 함께 읽는다.
R이 올바른 회전이면 RᵀR=I/det R=+1이고 역은 전치다. 역변환의 이동은−Rᵀt이지−t만이 아니다. 상첨자 T는 전치, I는 단위행렬이다. 길이는 모두 m이며 회전은 무차원이다. 실제 quaternion 경계에서는 성분 순서/정규화와 q/−q의 동일 회전도 M02.02의 계약대로 확인한다.
가상 R_BC를 z축+90도 회전으로, t_BC=(1,2,0) m로 두자. 이 배치는 계산용이며 실제 카메라의 기본 장착을 뜻하지 않는다.
p_C=(0.1,0.05,1) m에 R을 적용하면(−0.05,0.1,1), 이동을 더하면 p_B=(0.95,2.1,1) m다. 역으로 p_B−t=(−0.05,0.1,1)에 Rᵀ를 적용하면 원래 p_C가 돌아온다. 역변환 이동은(−2,1,0) m다. 같은 위치라도 프레임을 바꾸면 숫자는 바뀌지만 실제 물리점이 움직인 것은 아니다.
변환 합성도 방향을 맞춘다. C→B와 B→W를 알면 같은 점을 순서대로 보내며 행렬 곱은 나중 변환이 왼쪽이다. C→B가 필요한 자리에 B→C를 넣거나 서로 다른 시간의 관절 변환을 섞으면 곱셈은 실행돼도 결과 의미가 틀린다. frame_id·source/target·취득 시각과 각 edge의 담당 발행자를 기록한다.
추정값의 방향을 파일 이름으로 추측하지 않는다
OpenCV solvePnP 공식 설명의 rvec/tvec는 주어진 object/world 점을 카메라 좌표로 보내는 변환이다. 카메라의 세계 위치가 필요하다면 그 역을 구해야 한다. rvec은 축각 벡터 표현으로 회전행렬로 바꾸는 규약이며 roll/pitch/yaw 세 값의 별명이 아니다. 실제 API를 선택 실행할 때 표현/방향·보드 단위를 확인한다. 여기서는 solvePnP를 호출하지 않는다.
계산을 단순화해 R_BC가 이미 정확히 알려졌고 같은 시각의 대응 3차원 점 p_C/p_B가 주어졌다고 하자. 위 예에서 t_BC=p_B−R_BC p_C=(1,2,0)을 얻는다. 이것은 알려진 회전 아래 이동만 계산한 특수 문제다. 한 픽셀/한 점만으로 K/D와 모든 회전/이동을 동시에 추정할 수 있다는 뜻은 아니다.
실제 내부 보정은 보정판의 알려진 기하와 다양한 자세/영상 위치의 점 대응을 사용한다. 점의 순서·패턴 크기·실제 간격 단위와 검출 품질이 중요하다. 한 위치/한 방향의 흐린 그림을 많이 모은 것과 시야 전체/거리·자세를 충분히 덮은 자료는 다르다. 필요한 최소 관측/퇴화 조건은 추정 방법에 따라 확인하며 보드 개수 하나를 모든 방법의 성공 보증으로 쓰지 않는다. 공식 보정 자료를 입력 기하와 함께 읽는다.
잔차와 물리 계약을 함께 검증한다
재투영은 추정한 3차원/변환·내부 모형으로 픽셀을 다시 계산하는 일이다. 예측 픽셀을(360,260), 관측을(361,258)이라고 하면 관측−예측 잔차는(1,−2) pixel이고 크기는√5≈2.236068 pixel이다. 모델이 맞출 때 쓴 점과 별도 검사 점/자세의 잔차를 나누어 본다. 중심 부근의 작은 잔차만으로 모서리/다른 거리에서 정확하다고 승인하지 않는다.
낮은 재투영 오차가 metric 길이까지 맞다는 보증도 아니다. 보드 좌표를 실제 0.02 m 간격 대신 단위 1의 칸 수로 넣으면 이동도 그 칸 단위가 된다. 단위/스케일을 일관되게 함께 바꾼 3차원 모형은 투영 비율이 같을 수 있다. pixel 잔차가 작아도 m 단위 거리를 검증하려면 실제 패턴 간격과 독립 기준이 필요하다.
잔차가 크면 내부/왜곡 오류 외에도 외부 방향·점 대응·시간 지연/움직임·영상 변환 오류가 원인일 수 있다. 모서리/거리·움직임 속도별 패턴과 원본 시각을 조사한다. 마운트 이동/렌즈 초점·해상도/전처리 변경 후 재검사 조건을 정하고, R/t·K/D의 방향/단위/코드/자료 개정과 유효 범위를 저장한다. 기존 4.2 좌표 변환과 연결하되 보정이 센서별 정합/Kalman 추정까지 완료했다는 주장은 하지 않는다.