13.4.2. 다중 센서 융합: Dual GPS 아키텍처 및 페일세이프(Failsafe) 펌웨어 로직
단일(Single) RTK 시스템은 센티미터 수준의 비행 정밀도를 보장하지만, 하드웨어 자체가 가진 치명적인 약점(Single Point of Failure)을 벗어날 수는 없다. 고압선 주변의 극심한 전자기 간섭(EMI), 안테나 커넥터의 물리적 파손, 혹은 태양 흑점 폭발로 인한 전리층 폭풍 발생 시, 기체에 장착된 단 하나의 GPS가 침묵하거나 허위 데이터를 뿜어내면 드론은 필연적으로 통제 불능 상태에 빠진다.
상업용 대형 멀티로터나 장거리 고정익(Fixed-wing) 플랫폼에서 ’이중(Dual) GPS 아키텍처’는 선택이 아닌 필수 생존 요건이다. 본 절에서는 PX4-Autopilot이 두 개의 독립적인 GPS 수신기(Primary & Secondary)로부터 쏟아지는 좌표 데이터를 어떻게 동시에 수용하고 우열을 가리며, 한쪽 수신기의 심정지(Failure) 상황에서 기체의 추락을 막기 위해 어떠한 C++ 기반 페일세이프(Failsafe) 로직을 가동하는지 분석한다.
1. Dual GPS 하드웨어 토폴로지(Topology) 및 GPS_2_CONFIG
물리적으로 기체에는 서로 멀리 떨어진 두 개의 암(Arm)이나 마스트(Mast)에 GPS 안테나를 배치해야 하며, 각각은 비행 제어기(FC)의 서로 다른 Serial 포트(예: GPS 1 포트와 GPS 2 포트)에 체결되어야 한다.
소프트웨어적으로 두 번째 GPS를 깨우는 방법은 첫 번째와 동일하다.
GPS_2_CONFIG: 두 번째 수신기가 연결된 하드웨어 포트를 지정한다 (예:GPS 2포트를 나타내는201).- 이로써
gps데몬은 두 개의 독립적인 스레드(Thread) 혹은 Polling 프로세스를 돌리며 칩셋 1번과 2번을 향해 동시에 파싱을 수행하게 된다.
2. uORB 데이터 버스 상의 멀티플렉싱(Multiplexing)
두 개의 GPS가 살아났다면, 드론 시스템 내부에는 초당 10번씩 두 개의 서로 다른 위치 데이터가 뿜어져 나온다. PX4의 uORB 아키텍처는 이를 어떻게 교통정리 할까?
PX4의 sensor_gps 토픽 메시지는 단 하나뿐이지만, 이 토픽을 발행하는 인스턴스(Instance)가 분리된다.
- 0번 인스턴스: 통상
GPS_1포트에서 올라오는 메인 수신기 데이터. - 1번 인스턴스: 통상
GPS_2포트에서 올라오는 백업 수신기 데이터.
EKF2 모듈은 단순히 0번 인스턴스만 바라보지 않는다. EKF2 앞에 위치한 sensors 모듈 선형에서 두 인스턴스의 데이터를 몽땅 빨아들인 후, 이퀄라이저 믹서(Mixer)처럼 두 데이터를 수학적으로 ’블렌딩(Blending, 혼합)’하거나 철저하게 ’택일(Selection)’하여 하나의 정제된 가상 GPS 데이터(vehicle_gps_position)로 재포장한 뒤에야 EKF2 칼만 필터 코어 내부로 조달한다.
3. 다중 센서 융합 모드: SENS_GPS_MASK 파라미터 제어
이 두 개의 데이터를 섞는 방식을 통제하는 파라미터가 SENS_GPS_MASK 이다. 이 비트마스크에 따라 페일세이프의 양상이 완전히 뒤바뀐다.
3.1 전환 모드 (Switching Mode, Blending OFF)
가장 보수적이고 전통적인 다중 센서 운용 방식이다. (SENS_GPS_MASK 비트 미할당)
- 작동 방식: 1번 수신기를 Primary로, 2번 수신기를 Secondary로 둔다. 평상시에는 1번의 데이터만 100% EKF2로 전달한다.
- 페일세이프 발동 조건: 1번 GPS의 위성 개수가 급감하거나, 위치 오차(EPH)가 2번보다 압도적으로 나빠졌다고(통상 1.5\text{배} 이상 악화) 판별되는 순간,
sensors모듈은 내부 스위치를 2번으로 딸깍 변경(Switch-over)한다. - 한계: 전환되는 찰나의 순간에 1번 좌표와 2번 좌표 간의 이격 거리(Offset)로 인해 EKF2 필터에 일시적인 충격(Position Jump)이 가해질 수 있다.
3.2 블렌드 모드 (Blending Mode, 가중 평균 융합)
최신 센서 융합 패러다임으로, 양쪽 GPS 데이터를 모두 신뢰하되, 그들이 각자 보고하는 불확실성(Variance)에 반비례하여 가중치(Weight)를 부여하는 방식이다.
SENS_GPS_MASK 의 Bit 0, Bit 1, Bit 2 등 활성화 조건에 따라 작동한다.
- 가중치 산정 (C++ 로직의 핵심):
1번 GPS가 “내 위치의 분산은 0.1\text{m}^2 야”, 2번 GPS가 “내 위치의 분산은 0.9\text{m}^2 야” 라고 보고했다고 가정하자.
혼합기(Blender) 로직은 역분산 가중치(Inverse-Variance Weighting) 공식에 따라 1번 데이터에 90\%, 2번 데이터에 10\% 의 비율을 곱하여 도출해 낸 제3의 좌표를 EKF2로 밀어 넣는다. - 페일세이프 강건성: 한쪽 GPS의 수신율이 점진적으로 나빠지면(분산 값이 서서히 커지면), 해당 포트 데이터에 곱해지는 가중치가 물 흐르듯 0\% 로 스무스하게 수렴해 간다. 즉, ’전환 충격’이 존재하지 않는 가장 우아한 결함 허용(Fault Tolerant) 시스템이 완성되는 것이다.
4. 완전 침묵(Total Outage) 시의 EKF2 단독 페일세이프 타임아웃
만약 블렌딩이건 스위칭이건 상관없이, 기체에 벼락이 떨어져 두 GPS가 동시에 물리적으로 타버리는(Data Timeout) 초유의 사태가 발생하면 어떻게 될까?
- 타임아웃 감지:
gps데몬은sensor_gps토픽의 업데이트 주기가 500\text{ ms} (파라미터에 따라 다름) 이상 지연됨을ekf2에서 알아챈다. - GPS 유효성 비트 박탈: EKF 코어는 즉시 GPS 데이터에 대한 Measurement Update 밸브를 철저히 닫아버린다 (
_control_status.flags.gps_pos = false). - 내부 상태 전이(State Transition): EKF는 위치 고정 모드를 잃고 IMU 관성에만 의존하는 ‘Dead Reckoning’ 상태 혹은 ‘Altitude Hold’ 등 광학 흐름(Optical Flow, 존재 시) 호버링 모드로 트리거 조건을 강제 하달한다.
- Commander 비상 조치: 커맨더 모듈은 EKF의 비상 신호를 받아, 사전에 정의된
COM_POSCTL_NAVL(항법 정보 소실 대응) 파라미터 지침에 따라 자동으로 기체를 서서히 강하시켜 착륙시키거나 고도를 유지하는 비상 구조 프로시저를 발동한다.
결론적으로 PX4의 이중 GPS 생태계는 하드웨어적인 연결만으로 끝나는 주종 관계가 아니다. uORB 버스 위에서 시시각각 변하는 개별 센서의 신뢰도를 통계학적으로 계측하고 실시간 가중치 블렌딩(Blending)을 통해 가장 안전한 좌표 하나를 끊임없이 뽑아내는, 생존 본능에 극한으로 최적화된 유기적인 펌웨어 방호 체계라 할 것이다.