### 0.0.1 HRT(High-Resolution Timer) 시스템 클럭과 GPS 시간(UTC/ITOW) 간의 오프셋 동기화 알고리즘

### 0.0.1 HRT(High-Resolution Timer) 시스템 클럭과 GPS 시간(UTC/ITOW) 간의 오프셋 동기화 알고리즘

비행 제어기(FC)의 심장인 NuttX 운영체제는 부팅을 시작한 순간부터 마이크로초(\mu s) 단위로 증가하는 고해상도 타이머(High-Resolution Timer, hrt_absolute_time())를 시스템의 유일한 시간 척도로 삼는다.
반면 GPS 위성은 1980년 1월 6일 자정을 기점으로 지금까지 똑딱거리는 우주적 스케일의 ’성좌의 시간(GNSS Time)’을 기준으로 삼는다. U-Blox UBX 프로토콜 등은 이 시간을 “이번 주가 시작된 지 몇 밀리초 지났는가“라는 의미의 ITOW (Time Of Week) 값으로 쪼개어 내려보낸다.

이 전혀 다른 시공간을 살아가는 두 시계를 동기화(Synchronization) 시키는 행위는 센서 융합 수학의 가장 밑바탕이 된다. src/drivers/gps 클래스 내부에 은밀하게 구현된 오프셋(Offset) 추적 알고리즘을 분석해 본다.

0.1 시계 간의 격차 측정: time_offset의 정의

GPS 데이터 패킷 파싱이 막 완료된 시점(수신 완료 시점)의 FC 하드웨어 시간을 t_{hrt}, 그리고 그 패킷 안에 적혀서 배달된 위성의 발송 시각을 t_{gps} (보통 ITOW에서 마이크로초 단위로 환산됨)라 하자. 두 시계 간의 오프셋(격차) \Delta t_{offset}은 다음과 같이 지극히 단순한 뺄셈으로 정의된다.

\Delta t_{offset} = t_{gps} - t_{hrt}

여기서 얻어진 \Delta t_{offset} 값은, 앞으로 들어올 임의의 FC 하드웨어 시간 t를 절대적인 우주의 시간 t_{utc}로 변환하거나, 반대로 우주의 시간을 FC 시간으로 끌어내리는 만능 열쇠(환율)가 된다.

2. 가변적 전송 지연(Transport Latency)의 함정 타파

그러나 앞서 언급한 t_{hrt} (패킷 수신 완료 시각)에는 통신 케이블을 타고 내려오는 물리적인 **전송 지연(Transport Latency)**이라는 거품이 심하게 끼어있다. 더 심각한 것은 이 거품이 운영체제의 스케줄링 상태나 버퍼 상황에 따라 매번 밀리초 단위로 출렁거린다는 점(Jitter)이다.

PX4 백엔드는 이 지저분한 출렁거림에 속지 않기 위해 다음과 같은 엄격한 필터링 로직을 수행한다.

  1. 지속적인 샘플 누적: 매 GPS 주기마다 T_{sample} = t_{gps} - t_{hrt} 값을 백그라운드 배열에 지속적으로 덧칠한다.
  2. 노이즈(Jitter)의 배제: 만약 통신 버퍼가 막혀서 데이터가 매우 늦게 도착했다면, t_{hrt} 값은 정상보다 비정상적으로 커질 것이고, 오프셋 T_{sample}은 평소보다 훨씬 작은(음수 방향) 값으로 도출될 것이다. 이는 명백한 아웃라이어(Outlier)이다.
  3. 최대 오프셋(Maximum Offset) 쫓기 풀링: 따라서 PX4 시간 동기화 필터는 한 번 계산된 \Delta t_{offset} 수치들을 단순 평균 내는 것이 아니라, 가장 지연이 없이(Latency=0에 가깝게) ’빛의 속도’로 배달된 패킷, 즉 지금까지 관측된 오프셋 중 가장 큰(최댓값) 수치를 진정한 영점(Zero-point Offset)으로 신뢰하여 취한다.

3. 클럭 드리프트(Drift) 미세 조정 (Slew Rate Limit)

위에서 최댓값 필터링을 통해 기가 막히게 두 클럭을 맞춰 놓았다 할지라도, FC 기판에 붙어있는 싸구려 수십 센트짜리 크리스털 발진기(Oscillator)와 우주 궤도에 떠 있는 수백억 원짜리 세슘 원자시계는 필연적으로 시간이 흐르는 속도 자체가 다르다 (열 팽창 등에 의한 Clock Drift 현상).

  • 수 분(Minute)이 흐르면 t_{hrt}는 점점 위성 시간보다 앞서나가거나 뒤처진다.
  • 이를 맹목적으로 추적하여 \Delta t_{offset} 값을 순간적으로 수 밀리초씩 덜컹거리며 갱신(Step Change)해버리면, 이 데이터를 믿고 있는 EKF2 추정기는 기체가 순간 이동을 한 줄 알고 모터에 펄스 킥(Pulse Kick)을 날려 기폭 시킬 수 있다.
  • 슬루 레이트(Slew Rate) 제한: 이를 막기 위해 알고리즘은 오프셋 갱신 함수에 로우 패스 필터(Low-pass Filter) 특성을 띠는 슬루 레이트 제한을 건다. 아무리 두 시계의 격차가 심하게 벌어졌음을 발견하더라도, 오프셋 값을 한 번에 보정하지 않고 초당 수 마이크로초(µs) 이하의 속도로 소수점 단위로 부드럽게(Smooth) 찌그러뜨려 수렴시킨다.

이처럼 단순한 뺄셈 수학 뒤에 숨겨진 노이즈 필터링과 미세한 슬루잉(Slewing) 기법이야말로, 다종다양한 제조사의 클럭 편차를 통합하고 우주와 지상의 시공간을 매끄럽게 엮어내는 PX4의 핵심 무형 자산이다.