이벤트 카메라 동시 보정: 서로 다른 패턴의 코너를 맞추는 방법

여러 이벤트 카메라의 보정 관측을 한 묶음으로 쓰려면, 모든 카메라가 각자의 패턴을 검출한 시점을 모아야 합니다. Metavision은 서로 다른 패턴도 사용할 수 있게 하지만, 코너 수가 같고 같은 좌표계로 표현돼 있어야 한다는 조건을 둡니다. 카메라별 설정의 배열 순서도 실제 카메라 순서와 맞아야 합니다.

Metavision Calibration Pipeline 문서는 SDK 5.0부터 패턴 검출과 카메라 모델 추정을 분리한 구조를 설명합니다. 현재 문서의 버전은 5.3.1입니다. 여기서는 그중 여러 카메라의 패턴을 함께 수집하는 조건과, 수집한 관측을 보정 결과로 해석할 때 필요한 구분을 살펴봅니다.

패턴의 모양보다 코너가 가리키는 좌표가 먼저다

카메라는 패턴의 코너를 영상 위의 2차원 점으로 찾습니다. 보정에는 이 점이 패턴 위에서 어디에 있는지 나타내는 기하 정보도 필요합니다. 예를 들어 체커보드는 가로·세로 내부 코너 수와 사각형의 폭·높이를 설정하고, 능동 LED 패턴은 LED별 ID와 x·y·z 좌표를 담습니다.

서로 다른 패턴을 사용한다는 것은 카메라마다 이 검출과 기하 설정이 달라질 수 있다는 뜻입니다. 그렇더라도 동시 패턴 검출 단계가 요구하는 코너 수와 공통 좌표계 조건은 맞춰야 합니다. 같은 좌표계라는 말은 모든 코너의 좌표 숫자가 서로 같아야 한다는 뜻이 아닙니다. 위치를 적는 원점과 축, 단위의 기준을 함께 해석할 수 있어야 한다는 뜻입니다.

가령 두 패턴의 치수를 각각 밀리미터와 미터로 적어 놓고 같은 단위처럼 넘기면, 영상에서 코너를 잘 찾았어도 입력한 기하는 서로 다른 크기를 뜻합니다. 이는 검출기의 코너 찾기 성능을 바꿔 해결할 문제가 아닙니다. 패턴 파일에 들어간 치수와 좌표의 의미부터 맞춰야 합니다.

설정의 연결도 따로 확인해야 합니다. pattern-configs는 카메라마다 사용할 pattern-path, 검출기와 표시기를 담는 배열입니다. 모든 카메라가 같은 패턴을 쓰면 설정 하나를 공유할 수 있습니다. 서로 다른 패턴을 쓰면 설정 수를 카메라 수에 맞추고 순서도 같게 둡니다.

카메라에 연결할 항목 맡는 역할 뒤바뀌었을 때 확인할 지점
pattern-path 패턴의 종류와 기하 정보를 전달 실제 표적과 코너 수·치수가 맞는지
pattern-detector 이벤트에서 패턴을 검출 해당 패턴을 위한 검출기인지
pattern-renderer 검출 결과를 화면에 표시 표시된 코너 배열이 의도한 표적을 따르는지
pattern-configs의 순서 위 설정을 각 카메라와 연결 카메라 A에 카메라 B의 설정이 들어가지 않았는지

카메라 A와 B가 각각 다른 패턴을 본다는 설명용 상황을 생각해 보세요. 설정 배열의 길이가 2라는 조건은 맞더라도 순서를 반대로 넣으면 A의 이벤트에 B의 패턴 설명을 적용하게 됩니다. 배열 길이 확인과 카메라별 내용 확인을 나눠야 하는 이유입니다.

모든 카메라가 찾은 관측을 모으고, 같은 위치의 반복은 띄운다

eb-synced-pattern-detection은 동기화된 이벤트 스트림을 입력으로 받습니다. 이 단계는 각 카메라의 이벤트와 누적 검출을 표시하며, 모든 카메라가 각자의 패턴을 찾았을 때 유효한 동시 관측으로 받아들입니다. 한 카메라에서만 표적이 가려졌다면 나머지 카메라의 검출 수가 늘어도 해당 시점의 공동 관측 조건은 충족하지 못합니다.

유효한 검출을 얻은 뒤에는 다음 검출을 받아들이기 전 대기 구간을 둡니다. skip-time-us가 이 시간을 마이크로초 단위로 지정합니다. 문서에서 말하는 “no detection period”는 대기 시간이 없다는 뜻이 아니라, 같은 위치에서 연속 검출을 쌓지 않도록 잠시 새 검출을 받지 않는 구간입니다.

이 시간 설정은 카메라 간 시간 동기화 오차의 허용치가 아닙니다. 이미 동기화된 스트림에서 관측을 모으는 빈도에 관한 설정입니다. 센서의 시간 기준을 맞추는 문제와 같은 위치를 반복 수집하지 않는 문제를 섞으면, 바꾼 설정이 실제 원인과 어긋납니다.

대기 시간만 늘린다고 시야 전체의 자료가 생기지는 않습니다. 패턴을 계속 같은 위치에 두면 시간이 지나도 비슷한 관측이 모입니다. 공식 안내처럼 거리와 각도를 바꾸어 시야 여러 부분에서 패턴을 관찰해야 합니다. 화면의 누적 검출 표시는 몇 개를 모았는지뿐 아니라 어느 영역에 관측이 몰렸는지 보는 데 쓸 수 있습니다.

검출·내부 보정·카메라 간 보정은 다른 결과를 만든다

패턴 검출은 영상 좌표와 패턴의 기하를 연결할 관측 자료를 만듭니다. intrinsics-estimation은 이 자료에서 각 카메라의 수학적 모델에 맞는 내부 파라미터를 추정합니다. 확인한 문서에서 Intrinsics Estimator가 지원하는 카메라 모델은 pinhole입니다.

내부 보정 다음의 intrinsics-validation은 검출 당시의 영상, 표시한 패턴, 확대된 코너별 재투영 오차와 전체 재투영 오차를 겹쳐 보여 줍니다. 코너를 찾았다는 사실과, 추정한 카메라 모델로 그 코너를 다시 영상에 잘 투영하는지는 다른 질문입니다.

전체 오차 한 값과 함께 개별 관측을 넘겨 보세요. 중앙에서는 잘 맞는데 가장자리의 오차 벡터가 한쪽으로 커진다면, 그 차이가 어느 위치와 자세에서 반복되는지 볼 수 있습니다. 이는 원인을 바로 확정하는 규칙이 아니라 모델과 관측의 어긋남을 좁혀 보는 방법입니다. 이 화면은 수집한 검출을 다시 사용하는 검증이므로, 새 작업 장면에서 얻은 별도 정확도 측정과도 구분해야 합니다.

여러 카메라 사이의 상대 위치·방향은 extrinsics-estimation에서 다룹니다. 이 단계는 각 카메라의 기하 정보와 패턴 검출 자료를 입력으로 받고, camera-configs의 첫 항목을 기준 카메라로 사용합니다.

작업을 다시 살펴볼 때는 파일 하나를 “보정 결과”로 통칭하기보다, 패턴 정의인지 검출 기록인지 내부 파라미터인지 카메라 간 변환인지부터 구분해 보세요. 카메라와 로봇 좌표를 연결하는 핸드아이 보정까지 필요하다면 로봇 캘리브레이션 종류에서 각 변환이 맡는 역할을 이어 볼 수 있습니다.

2026년 10월 16일 확인한 공식 문서의 파이프라인과 설정을 설명한 글입니다. 실제 카메라 연결·패턴 수집·보정 실행은 수행하지 않았습니다.