기술 필드 노트 #22 · 2026년 11월
밖에서 확인한 스테레오 동기: 모니터 플래시로 잰 좌우 차이 0.15ms 이내
기술노트 #22 · 머리 착용 스테레오+IMU 리그(ODL-EGO S1)의 좌우 동기를 외부 광학 기준으로 확인, 기술노트 #18 후속
기술노트 #18에서 스테레오 리그의 좌우 동기를 15µs로 측정했지만, 그 값은 리그가 스스로 기록한 노출 시작 타임스탬프에서 나온 것이었습니다. 이번에는 밖에서 확인했습니다. PC 모니터의 패널을 70–250ms 무작위 간격으로 흑백 전환시키고 두 눈으로 2분씩 두 번 녹화했습니다(각 362회). 노출 도중에 전환이 일어난 프레임은 중간 밝기를 기록하므로, 노출 중 흰색을 본 비율과 각 눈의 노출 시작·노출 시간으로 전환 시각을 구할 수 있습니다. 같은 전환 357개와 316개를 좌우 눈이 각자 측정했습니다. 상승·하강 전환을 평균하면(좌우 밝기 이득 차이가 상쇄됨) 좌 − 우는 −23µs(95% CI −56 ~ −14)와 −40µs(−110 ~ −12)였고, 시험한 모든 센서 응답 곡선에서 ±0.15ms 안이었습니다. 두 번째 녹화는 자동노출이 움직이고 왼쪽 노출이 오른쪽보다 0.5ms 짧았는데도 결과가 같았습니다. 이 방법으로 14µs를 직접 잴 수는 없지만, 0.15ms보다 큰 숨은 어긋남이 없다는 것은 독립적으로 확인됩니다. 프레임의 0.5% 미만이고, 초당 200° 빠른 머리 회전에서 약 0.25픽셀입니다.
왜 중요한가
리그가 자기 타이밍의 유일한 증인이어서는 안 된다
스테레오 깊이, 스테레오 SLAM, 손 자세 삼각측량은 한 쌍의 두 영상이 같은 순간에 노출되었다고 가정합니다. 기술노트 #18에서 좌우 노출 시작이 중앙값 15µs 차이라는 것을 확인했지만, 그 값은 리그가 자기 영상 스트림에 써 넣은 노출 시작 타임스탬프에서 나왔습니다. 펌웨어가 같은 시계로 두 눈에 도장을 찍고 실제 센서는 다른 시각에 노출했다면, 메타데이터는 여전히 완벽해 보였을 것입니다.
이 노트는 그 빈틈을 외부 광학 기준으로 메웁니다. 두 카메라가 같은 물리적 순간에 바뀌는 것을 보고, 각 눈의 영상으로 따로 시각을 잽니다.
구성
깜빡이는 모니터 패널과 2분짜리 녹화 두 개
리그: R8 스테레오+IMU(ODL-EGO S1), 기술노트 #15–#21과 같은 장비, 눈당 1600×1200, 30fps, 책상 위에서 PC 모니터를 향하게 놓았습니다. 모니터에는 패널을 70–250ms 무작위 간격으로 흑백 전환하는 페이지를 띄웠습니다. 화면 갱신이나 플래시 일정은 기록하지 않았고, 이 방법에는 필요 없습니다.
녹화 1(2026-11-08 13:32, 카메라가 모니터보다 약간 아래): 양쪽 노출 10.04ms로 일정. 녹화 2(13:36, 모니터 중간 높이): 자동노출이 움직였고 왼쪽 6.9–11.3ms, 왼쪽 노출이 오른쪽보다 중앙값 0.51ms 짧았습니다. 각 녹화에 플래시 구간이 약 120초(362회) 있습니다.
프레임·눈마다 스트림 메타데이터의 노출 시작·노출 시간(µs)과 패널 영역의 평균 밝기를 썼습니다. 패널 영역은 가장 자주 바뀐 픽셀로 자동으로 찾았습니다(녹화 1에서 160×120 기준 611, 651픽셀).

방법
일부만 노출된 프레임으로 전환 시각 구하기
노출은 33.3ms 프레임 주기 중 약 10ms입니다. 노출 도중 패널이 바뀌면 그 프레임은 중간 밝기를 기록합니다. 앞뒤의 완전한 검정·흰색 프레임(같은 노출 시간으로 환산) 대비 흰색을 본 비율 f로 전환 시각을 구합니다. 상승은 t = 시작 + 노출 × (1 − f), 하강은 t = 시작 + 노출 × f.
각 눈이 자기 영상과 자기 타임스탬프로 이 계산을 하므로, 양쪽이 본 전환마다 서로 독립인 시각이 두 개 나옵니다. 그 차이가 메타데이터가 숨기고 있을 수 있는 동기 오차입니다. 양쪽에 완전한 프레임이 있고 두 눈 모두 0.05 < f < 0.95인 전환만 썼습니다.
밝기를 빛의 양으로 바꾸려면 센서 응답 곡선이 필요한데, 우리는 그 곡선을 모릅니다. 좌우 이득·응답 차이는 상승과 하강 추정을 반대 방향으로 밀기 때문에, 상승 중앙값과 하강 중앙값의 평균을 보고하고 응답 지수 γ = 0.7, 1.0, 1.3, 1.6, 2.2로 모두 반복했습니다.


결과 1
좌우가 같은 전환을 수십 µs 안에서 맞춘다
녹화 1: 양쪽에서 잰 전환 357개. 좌 − 우는 상승 −96µs, 하강 +51µs, 평균 −23µs(부트스트랩 95% CI −56 ~ −14µs). 녹화 2: 전환 316개. 상승 +27µs, 하강 −106µs, 평균 −40µs(−110 ~ −12µs). 전환별 흩어짐(중앙절대편차 81, 127µs)은 10ms 창 안의 밝기 잡음에서 오는 이 방법 자체의 잡음입니다.
흑/백 상태는 모든 프레임에서 일치했습니다. 플래시 구간 7,194프레임 중 18개가 임계값 양쪽으로 갈렸지만, 모두 양쪽 눈에서 밝기 47–53%인 전환 중간 프레임이었습니다.
| 녹화 | 카메라 위치 | 노출 (좌 / 우, 중앙값) | 플래시 | 사용한 전환 (상승 / 하강) | 상승 중앙값 | 하강 중앙값 | 광학 좌 − 우 (γ = 1, 95% CI) | γ 0.7–2.2 범위 | 메타데이터 노출 시작 좌 − 우 (중앙값 / 최대) |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 모니터보다 약간 아래 | 10.04 / 10.05ms | 362 | 357 (143 / 214) | −96µs | +51µs | −23µs (−56 ~ −14) | −15 ~ −106µs | −14 / 49µs |
| 2 | 모니터 중간 높이 | 8.99 / 9.42ms | 362 | 316 (121 / 195) | +27µs | −106µs | −40µs (−110 ~ −12) | −40 ~ −124µs | −14 / 60µs |

결과 2
응답 곡선 가정에도, 좌우 노출이 달라도 결과가 같다
γ 0.7–2.2 전체에서 평균은 녹화 1에서 −15 ~ −106µs, 녹화 2에서 −40 ~ −124µs였습니다. 항상 ±0.15ms 안이고, 부호도 항상 메타데이터와 같았습니다(왼쪽이 아주 조금 먼저).
녹화 2가 더 어려운 경우입니다. 자동노출이 움직였고 두 눈이 같은 노출을 고르지 않았습니다(왼쪽이 중앙값 0.51ms 짧음). 그러자 개별 상승 추정이 노출 차이를 따라갔습니다(상관 0.78). 화면이 순간적으로 바뀌지 않아 짧은 창이 전환을 다르게 적분하기 때문입니다. 평균하면 결과는 녹화 1과 같았습니다.

추가 관찰
프레임 짝은 표시 타임스탬프가 아니라 노출 시작으로
녹화 1에서는 모든 쌍의 표시 타임스탬프(PTS)가 좌우 동일했습니다. 녹화 2에서는 0.4%만 같았고 최대 1.0ms 달랐지만, 같은 쌍의 노출 시작은 여전히 60µs 안이었습니다. 여기서는 PTS로 짝지어도 맞는 프레임을 찾았겠지만, PTS는 하드웨어 타임스탬프가 아닙니다. 우리는 가장 가까운 노출 시작(2ms 이내)으로 짝짓고, 이는 기술노트 #18의 순서 기반 규칙과 같은 결과를 냅니다.
직접 확인하는 법
모니터 하나, 15분, 추가 장비 없음
프레임별 노출 시간을 기록하는 스테레오 리그라면 누구나 반복할 수 있습니다.
- 패널을 70–250ms 무작위 간격으로 흑백 전환하는 화면을 띄우고(무작위라야 전환이 프레임 주기에 고정되지 않음), 두 눈으로 2분 녹화합니다.
- 가장 자주 바뀌는 픽셀로 패널을 자동으로 찾고, 프레임마다 평균 밝기를 구합니다.
- 노출 시작으로 프레임을 짝짓고, 일부만 노출된 전환마다 각 눈의 노출 시작·노출 시간으로 시각을 구합니다.
- 상승·하강 중앙값을 평균하고 여러 응답 곡선으로 반복합니다. 진짜 어긋남이 있다면 모든 곡선에서 드러납니다.
의미
동기를 서로 독립인 두 경로로 확인했다
검증됨: 이 리그에서 외부 광학 기준이 내부 메타데이터와 일치합니다. 0.15ms보다 큰 숨은 좌우 어긋남은 없습니다. 프레임의 0.5% 미만이고, 초당 200° 빠른 머리 회전에서 0.03°, 이 카메라의 초점거리 482픽셀 기준 약 0.25픽셀입니다.
프로세스: 플래시 녹화를 새 리그 현장 투입 전 표준 인수 시험으로 삼고, 기술노트 #18의 프레임별 메타데이터 검사와 함께 씁니다. 스크립트와 전환별 표를 이 노트와 함께 공개합니다.
- 리그마다 투입 전 광학 검사: 모든 γ에서 ±0.5ms 안이면 통과.
- 납품마다 메타데이터 검사: 모든 쌍이 노출 시작 기준 1ms 안.
- 좌우 노출 차이를 보고: 자동노출은 두 눈에서 달라질 수 있음.
범위와 한계
연구의 한계
이 노트가 보여주지 않는 것을 먼저 밝힙니다.
- 리그 1대, 하루 한 사무실에서 2분짜리 녹화 2개, 카메라 정지 상태의 결과입니다. 일반화된 추정치가 아닙니다.
- 화면이 패널 전체를 두 눈에 같은 순간 바꾼다고 가정합니다. 화면 스캔과 픽셀 응답은 두 카메라에 공통이지만 전환당 정밀도를 약 0.1ms로 제한합니다.
- 센서 응답 곡선을 모르므로, 보정된 곡선 대신 γ 0.7–2.2 범위로 결과를 냈습니다.
- 플래시 일정을 기록하지 않아 전환 시각은 영상에서만 압니다. 따라서 각 눈의 절대 타이밍은 검증하지 않았고 좌우 차이만 확인했습니다.
- 예비 분석: AI 보조 자동 분석으로 수행했고, 사람 재검증이나 제3자 검토는 받지 않았습니다.
FAQ
데이터 구매자가 묻는 질문
Q01특별한 장비 없이 스테레오 카메라 동기를 확인할 수 있나요?
Q02ODL-EGO S1 스테레오 리그의 동기는 얼마나 맞나요?
Q03왜 상승과 하강 전환을 평균하나요?
Q04이 방법으로 15µs를 잴 수 있나요?
Q05좌우 카메라는 같은 노출을 쓰나요?
공개 데이터와 코드
근거 자료를 직접 확인하세요
이 노트의 모든 수치는 검증할 수 있습니다. 가공 데이터, 분석 코드, 그림, 실행 가능한 노트북을 공개합니다.
origin-data-lab/stereo-sync-external-flash-verification저장소 보기 origin-data-lab/stereo-sync-external-flash-verification데이터셋 열기 origindatalab/odl-stereo-sync-external-flashKaggle에서 보기 라이선스: CC BY 4.0 (데이터·그림) · MIT (코드)
Origin Data Lab (2026). 기술노트 #22: 밖에서 확인한 스테레오 동기. https://origindatalab.io/ko/technical-field-notes/stereo-sync-external-flash-verification.html