0biglife.

[자율주행] 센서 캘리브레이션 — 좌표계를 맞추지 못하면 아무것도 맞지 않는다

자율주행/캘리브레이션

· 2026-07-16

[자율주행] 센서 캘리브레이션 — 좌표계를 맞추지 못하면 아무것도 맞지 않는다

앞 글에서 씬(scene)은 여러 센서가 같은 순간을 각자의 좌표계로 기록한 묶음이라고 했다. 그렇다면 당연한 질문이 남는다. 그 좌표계들을 어떻게 하나로 맞추는가. 이 정합의 정확도를 책임지는 작업이 캘리브레이션(calibration) 이다.

캘리브레이션은 눈에 잘 안 띄지만, 자율주행에서 가장 조용하고 치명적인 부분이다. 모델이 아무리 좋아도, 센서 사이가 몇 cm·몇 ms 어긋나 있으면 그 위의 모든 판단이 미세하게, 그러나 일관되게 틀어진다.

세 가지 정렬: 내부·외부·시간

캘리브레이션은 크게 세 축으로 나뉜다.

  1. 내부 파라미터(intrinsic) — 센서 하나가 세상을 자기 안에 어떻게 담는지.
  2. 외부 파라미터(extrinsic) — 센서가 차의 어디에, 어떤 자세로 붙어 있는지.
  3. 시간 정렬(temporal) — 서로 다른 센서의 타임스탬프가 정말 같은 순간을 가리키는지.

셋 중 하나만 틀어져도 씬은 거짓말을 하기 시작한다.

내부 파라미터(intrinsic)

카메라의 내부 파라미터는 3D 점이 2D 픽셀로 찍히는 규칙이다. 초점거리 fx, fy, 주점 cx, cy로 이루어진 카메라 행렬 K, 그리고 렌즈가 직선을 휘게 만드는 왜곡 계수(distortion) 가 여기 속한다.

[u]     [fx  0  cx] [X/Z]
[v]  =  [ 0 fy  cy] [Y/Z]
[1]     [ 0  0   1] [ 1 ]

K가 틀리면 픽셀 좌표가 실제 광선 방향과 어긋난다. 특히 왜곡 보정을 안 하면 화면 가장자리의 직선이 휘어, 차선이나 먼 물체의 위치가 밀린다. 라이다에도 자체 내부 보정(빔별 각도·거리 오프셋)이 있다.

외부 파라미터(extrinsic)

외부 파라미터는 한 센서 좌표계를 다른 좌표계(보통 차량 기준)로 옮기는 강체 변환 이다. 회전 R(3×3)과 이동 t(3×1)를 4×4 동차 변환으로 묶는다. (회전을 적는 방법과 동차 변환의 근간은 3D 기하 기초 — 좌표계·회전·yaw에서 판다.)

        [ R   t ]
T =     [ 0   1 ]

라이다 점 p_lidar를 차량 좌표로 옮기려면 p_ego = T_lidar→ego · p_lidar, 카메라에 투영하려면 다시 p_cam = T_ego→cam · p_ego를 거쳐 K로 픽셀에 찍는다. 라이다→카메라 캘리브레이션은 이 사슬 전체를 맞추는 일이고, 자율주행에서 가장 많이 쓰이는 조합이다. 이것이 맞아야 "라이다가 잰 3D 박스를 카메라 이미지 위에 정확히 겹쳐 그리기"가 가능하다.

extrinsic이 몇 도만 틀어져도, 먼 거리에서는 그 오차가 미터 단위로 벌어진다. 각도 오차는 거리에 비례해 커지기 때문이다.

시간 정렬(temporal)

세 번째 함정은 시간이다. 라이다는 20Hz, 카메라는 30Hz, 레이더는 또 다른 주기로 돈다. 같은 '샘플'이라 묶어도, 실제로는 서로 몇 ms 차이 나는 순간일 수 있다.

문제는 차와 주변이 움직이고 있다는 점이다. 시속 72km면 1ms에 2cm를 간다. 라이다와 카메라가 20ms 어긋나 있으면, 빠른 차는 이미 40cm 앞에 가 있는데 이미지엔 뒤에 있는 것으로 겹쳐진다. 게다가 라이다는 한 바퀴 도는 동안에도 차가 움직여 스윕 안의 점들이 저마다 다른 순간에 찍히므로, 에고 모션으로 되감아(모션 디스큐/deskew) 하나의 순간으로 정렬해야 한다.

왜 '한 번 하고 끝'이 아닌가

캘리브레이션은 공장에서 한 번 맞추면 끝이 아니다.

  • 방지턱·온도 변화·진동으로 센서 마운트가 미세하게 틀어진다.
  • 정비·교체 후 값이 바뀐다.
  • 그래서 주행 중 데이터로 스스로 보정하는 온라인 캘리브레이션과, 값이 벗어났음을 감지하는 모니터링이 필요하다.

데이터 파이프라인 관점에서 캘리브레이션은 씬마다 따라다니는 메타데이터다. 어떤 로그가 어떤 캘리브레이션 버전으로 찍혔는지 추적하지 못하면, 나중에 그 데이터로 학습한 모델의 오차 원인을 영영 못 찾는다.

어긋남이 만드는 실패

캘리브레이션 오차는 요란하게 터지지 않는다. 대신 조용히 일관되게 성능을 갉는다.

  • 라이다-카메라 융합이 물체를 살짝 겹쳐 보며 검출을 놓친다.
  • 3D 박스가 실제보다 앞/뒤로 밀려 거리 추정이 틀린다.
  • 이미지에 라이다 깊이를 얹는 라벨링 도구가 어긋나, 틀린 정답이 데이터에 스며든다.

마지막이 가장 무섭다. 캘리브레이션 오차는 데이터 자체를 오염시키기 때문에, 그 위에 무엇을 쌓아도 흔들린다.

정리

  • 캘리브레이션은 센서의 내부(intrinsic)·외부(extrinsic)·시간(temporal) 을 정렬하는 작업이다.
  • 외부 파라미터는 좌표계 사이의 회전·이동(동차 변환)이며, 각도 오차는 거리에 비례해 커진다.
  • 센서가 움직이는 순간을 다루므로 시간 동기화와 모션 보정이 필수다.
  • 진동·정비로 값이 변하므로 온라인 보정·모니터링이 필요하고, 캘리브레이션은 씬을 따라다니는 메타데이터로 관리해야 한다.

좌표계를 맞췄다면, 이제 그 위의 3D 데이터를 어떻게 '표현'하느냐가 남는다. 다음 글은 3D 데이터 표현 — 포인트 클라우드부터 복셀·BEV까지다.

Index

세 가지 정렬: 내부·외부·시간내부 파라미터(intrinsic)외부 파라미터(extrinsic)시간 정렬(temporal)왜 '한 번 하고 끝'이 아닌가어긋남이 만드는 실패정리