### 0.0.1 모듈 런타임 설정 메시지(`UBX-CFG-PRT`, `UBX-CFG-RATE`)의 구성 및 송수신(ACK/NACK) 메커니즘

### 0.0.1 모듈 런타임 설정 메시지(UBX-CFG-PRT, UBX-CFG-RATE)의 구성 및 송수신(ACK/NACK) 메커니즘

PX4-Autopilot의 GPS 드라이버는 단순히 외부 모듈이 던져주는 데이터를 수동적으로 받아먹는 것에 그치지 않는다. 부팅 직후의 드라이버 초기화(Initialization) 단계에서 제어기는 GPS 모듈 내부의 동작 방식을 자신의 실시간 제어 스케줄러(Scheduler) 요구사항에 맞도록 강제로 뜯어고치는, 능동적이고 агре시브(Aggressive)한 런타임 재설정(Runtime Reconfiguration) 과정을 수행한다.

이러한 모듈 제어의 핵심 통로가 바로 UBX 프로토콜의 설정 클래스인 UBX-CFG 메시지 그룹이며, PX4 시스템은 이 중에서도 포트 설정(PRT)과 갱신 주기(RATE) 메시지를 최우선적으로 조작한다.

0.1 UBX-CFG-PRT: 포트(Port) 프로토콜 및 대역폭 통제

초기화 로직이 뚫고 들어가야 할 최우선 과제는 GPS 모듈의 UART 직렬 포트를 NMEA의 구시대적 제약으로부터 해방시키는 것이다. UBX-CFG-PRT (Class 0x06, ID 0x00) 메시지는 모듈의 특정 입출력 포트(I/O Port) 속성을 하드웨어 수준에서 바꿀 수 있는 강력한 레지스터 제어권을 제공한다.

  • 프로토콜 스위칭(Protocol Switching):
    PX4는 이 설정 메시지의 inProtoMaskoutProtoMask 필드를 덮어써서, 모듈이 출력하는 모든 NMEA 문장(String) 생성을 강제로 음소거(Mute)시켜 버리고, 오직 UBX 바이너리 프로토콜만 입출력되도록 스위치를 강제 전환한다.
  • 보드레이트 록인(Baudrate Lock-in):
    동시에 baudRate 필드에 115200 (또는 지정된 고속 통신 속도) 값을 주입하여, 기존 9600 bps의 느린 파이프라인 대역폭을 10배 이상 확장 확장한다. 이 메시지가 전송된 직후 PX4 제어기 본체도 자신의 통신 속도를 즉시 115200 bps로 함께 들어 올려(Step-up) 새로운 차원의 고속 터널 동기화를 완성한다.

0.2 UBX-CFG-RATE: EKF2 맞춤형 고속 갱신 주기 주입

대역폭이 확보되었다면, 이제 확장된 칼만 필터(EKF2)의 샘플링 나이퀴스트(Nyquist) 주파수 한계를 충족하기 위해 위성 데이터의 산출 템포를 끌어올려야 한다. 이를 위해 UBX-CFG-RATE (Class 0x06, ID 0x08) 메시지가 투입된다.

  • 측정 주기(Measurement Rate) 단축:
    기본적으로 1000ms(1Hz)로 셋팅된 공장 초기화 모듈을 향해, PX4는 measRate 필드에 200을 밀어 넣어 위성 관측 주기를 200ms(5Hz) 또는 파라미터에 따라 100을 밀어 넣어 100ms(10Hz)로 극단적으로 단축시킨다.
  • 항법 주기(Navigation Rate):
    속도와 갱신율이 과도하게 빨라지면 GPS 코어 프로세서에 연산 병목이 올 수 있으므로, navRate (Measurement 루프 몇 회당 1번씩 계산 결과 패킷을 방출할 것인가의 비율) 필드를 적절히 조율하여 모듈 내부 MCU의 CPU 로드를 최적화한다.

0.3 양방향 비동기 검증의 정수: ACK / NACK 메커니즘

수백억 원짜리 자율 비행 시스템의 신뢰성을 담보하기 위해서, PX4는 설정 명령을 단순히 허공에 외치고(Fire-and-Forget) 기원만 하는 방식(Blind transmission)을 철저히 배격한다.

  • Acknowledge (ACK):
    제어기가 UBX-CFG-* 류의 클래스 0x06 설정 메시지를 보낼 때마다, U-Blox 모듈은 명령을 성공적으로 수신하고 내부 레지스터에 적용을 완료했음을 알리는 UBX-ACK-ACK (Class 0x05, ID 0x01) 패킷을 회신해야만 한다. 이 답변 패킷의 페이로드에는 자신이 승인한 원래 명령의 Class와 ID가 메아리(Echo)처럼 포함되어 있다.
  • 타임아웃(Timeout) 및 상태 머신 폴링(Polling):
    PX4의 GPS 드라이버 메인 스레드는 UBX-CFG 패킷을 전송한 직후, 다음 명령으로 넘어가지 않고 타이머(Timer)를 켜둔 채 수신 버퍼 상태 머신 모드에서 대기한다. 만약 약 1~2초 이내에 UBX-ACK-ACK가 돌아오면 안전하게 다음 설정 단계로 넘어가고, 만약 UBX-ACK-NAK(Not Acknowledged)가 돌아오거나 타임아웃이 발생하면, 포트 설정이 꼬였거나 케이블 노이즈로 유실된 것으로 간주하여 동일한 CFG 명령을 즉시 재전송(Retry)하는 집요한 폴링(Polling) 루틴을 수행한다.
  • 이러한 엄격한 양방향 핸드셰이크(Handshake) 덕분에, PX4-Autopilot은 이륙 전(Pre-flight) 단계에서 GPS 센서의 상태를 100% 완벽하게 장악했음을 보장받게 된다.