### 0.0.1 타임스탬프(Timestamp) 동기화 및 PPS(Pulse Per Second) 정밀 보정

### 0.0.1 타임스탬프(Timestamp) 동기화 및 PPS(Pulse Per Second) 정밀 보정

수백 킬로미터 밖의 위성 성좌(Constellation)로부터 광속으로 쏟아지는 전파를 받아 기체의 3차원 위치를 뱉어내는 GPS 모듈은, 태생적으로 심각한 **전송 지연 시간(Transport Latency)**을 수반할 수밖에 없다.
모듈 내부에서 위치를 계산하는 연산 시간, 115200bps 직렬 케이블을 타고 바이트가 줄지어 내려오는 시간, OS 커널 버퍼에 갇혀 스케줄러를 기다리는 시간, 그리고 파서가 바이트를 조립하는 시간까지 합치면 최소 수십 밀리초(ms) 지연이 기저에 깔려있다.

시속 100km로 비행하는 레이싱 드론이나 1도 단위의 정밀한 카메라 짐벌(Gimbal) 제어 환경에서, 수십 밀리초 지난 “과거의 위치“를 “현재의 위치“로 착각하여 EKF2 추정기에 밀어 넣는 행위는 심각한 오실레이션(Oscillation)과 상태 발산을 유발한다.
이러한 시간축의 오정렬을 바로잡기 위해 PX4 드라이버 계층은 타임스탬프 스티칭(Stitching) 기법과 하드웨어 인터럽트 기반의 PPS(Pulse Per Second) 정밀 보정 아키텍처를 도입했다.

0.1 hrt_absolute_time(): FC 시스템 클럭의 절대 권력

PX4 생태계에서 흘러가는 모든 시간의 척도는 NuttX 운영체제가 제공하는 하드웨어 기반 마이크로초 단위 단조 증가 클럭인 HRT(High-Resolution Timer, hrt_absolute_time()) 단 하나로 통일된다.

  • 파서가 이리저리 바이트를 조립하여 sensor_gps_s 구조체의 lat, lon 필드를 다 채운 바로 그 순간, 가장 마지막으로 기입하는 데이터가 바로 이 timestamp 멤버 변수이다.
  • 그러나 직렬 선로를 통과해 막 파싱이 끝난 이 시점의 HRT 시간은 실제 하늘 위에서 위성 신호가 샘플링된 시간과는 엄청난 괴리가 있다. EKF2는 이 타임스탬프를 받아보고 “아, 이 위치는 방금 측정된 것이구나“라고 착각하게 된다.

0.2 타임스탬프 지연(Latency)의 두 가지 축

이 지연 현상을 교정하기 위해서는, 지연의 정체를 수치화해야 한다.

  1. 전파/연산 지연 (Processing Latency): GPS 모듈이 안테나로 신호를 포착한 후, 칩셋 내부에서 푸리에 변환과 궤도 계산을 거쳐 알맹이 데이터를 만들어 내는 데 걸린 시간.
  2. 전송 지연 (Transport Latency): 만들어진 바이너리 덩어리가 UART TX 핀을 빠져나와 FC의 RX 버퍼를 거쳐 소프트웨어 파서가 알맹이를 끄집어낼 때까지 걸린 시간.

0.3 PPS(Pulse Per Second): 하드웨어 선단의 구세주

이러한 불확실한 소프트웨어적 지연을 단칼에 끊어내는 물리적 장치가 바로 GPS 모듈에서 매초 정각(UTC 기준)마다 번쩍하고 전기 신호를 쏴주는 핀, PPS(Pulse Per Second) 라인이다.

  • 하드웨어 인터럽트 캡처(Capture): 최고급 픽스호크(Pixhawk) 보드들은 GPS 커넥터의 특정 핀을 타이머 캡처 하드웨어 인터럽트에 직결시켜 놓았다. PPS 핀에서 신호가 에지 트랜지션(Rising Edge)을 일으키면, CPU는 하던 일을 즉시 매달아 놓고 그 정확한 나노초 단위의 HRT 시간을 hrt_absolute_time()으로 낚아채 특정 전역 레지스터(또는 ORB 토픽)에 기록해 둔다.
  • 이로써 FC는 “정확히 매초 정각(000ms)“이 언제였는지 절대적인 영점(Zero-point) 기준을 가지게 된다.

0.4 시공간 오프셋(Offset) 동기화 알고리즘

GPS 직렬 파서는 방금 파싱해 낸 위성 항법 메시지 안에 들어있는 “GPS 시간 정보(Time of Week, ITOW)“와, 아까 PPS 하드웨어 핀이 번쩍였을 때 기록해 둔 “HRT 시스템 시간“을 머리 맞대고 비교한다.

  1. 파서는 방금 디코드(Decode)된 메시지가 가리키는 고유의 GPS 시각(예: 이번 주의 100,000번째 초 정각)을 확인한다.
  2. 그리고 바로 그 정각을 가리키던 PPS 신호가 FC 하드웨어 보드의 HRT 타이머 상에서는 과연 몇이었는지 대조한다.
  3. 이 대조를 통해 파서는 우주 공간의 절대시간인 UTC(GPS Time)와 자신(픽스호크)의 손목시계 틱(HRT) 간의 정확한 시차(Offset)를 도출해 낸다.
  4. 마지막으로, 현재 방금 통신 케이블을 건너온 데이터가 파싱 완료된 시점의 hrt_absolute_time() 값에서, 직통으로 날아온 PPS 인터럽트 시간과의 격차(통신비용 및 연산비용 합산) 역계산을 통해, 이 위치 데이터가 하늘에서 샘플링된 진짜 HRT 타임스탬프를 sensor_gps_s.timestamp에 정밀하게 되돌려 써넣는다(Backdating).

0.5 EKF2의 마법: 상태 지연 보상(Delay Compensation)

GPS 드라이버가 이렇게 눈물겨운 보정 작업을 거쳐 진짜 샘플링 시점(상당히 시계가 뒤로 돌아간 과거 값)이 찍힌 uORB 메시지를 발행하면, 비로소 EKF2 센서 융합 모듈이 활짝 웃는다.

  • EKF2는 이미 자신의 버퍼 안에 과거 1초 치의 관성 센서(IMU) 기록을 촘촘히 롤백 버퍼(Ring Buffer) 구석에 쌓아두고 있다.
  • 늦게 도착한 GPS 좌표에 찍힌 타임스탬프가 T-50ms 라면, EKF2는 지체 없이 자신의 타임머신 버퍼를 뒤져 정확히 50ms 전의 기체 롤/피치 자세 및 가속도 상태를 꺼내어 행렬 연산을 실시한다.
  • 이로써 통신 속도가 아무리 느리더라도 센서 융합의 무결성은 완전히 보존되며, 기체는 수백 ms 단위의 제어 주기 스파이크(Spike) 현상에서 영원히 해방된다.