27.5.3.2. 지상고 및 추력 데이터 기반 외부 자기장 간섭 회피 로직

27.5.3.2. 지상고 및 추력 데이터 기반 외부 자기장 간섭 회피 로직

드론이 철근 콘크리트 패드 위에서 이륙하거나, 고압 송전선 근처를 비행할 때, 혹은 모터가 무거운 페이로드를 들어 올리기 위해 최대 추력(Maximum Thrust)을 낼 때 발생하는 전자기장은 나침반 센서에 극심한 교란(Magnetic Interference)을 일으킨다. 특히 전원 케이블이 지자계 센서와 너무 가까이 배치된 설계 결함 기체에서는 스로틀(Throttle)을 올릴 때마다 기수가 돌아가는 치명적인 현상이 발생한다.

이러한 물리적/환경적 한계를 극복하기 위해 PX4-Autopilot의 EKF2는 단순히 지자계 센서 내부의 수치만 바라보는 것이 아니라, 기체의 고도(지상고)시스템 추력/전류(Thrust/Current) 데이터를 지자계 퓨전 로직에 실시간으로 개입시키는 복합 회피 아키텍처를 구현하였다. 본 절에서는 이 정교한 방어 메커니즘을 소스 코드 타당성(Feasibility) 수준에서 분석한다.


1. 지상고(Ground Clearance) 기반 간섭 회피

기체가 시동(Arming) 직후 지상에 대기 중이거나 이착륙을 막 시작한 순간은 지면의 철골 구조물(철근 콘크리트, 금속성 맨홀 뚜껑 등)로부터 뿜어져 나오는 자기장 교란에 가장 취약한 상태다. 앞선 절에서 살펴보았듯, 이 단계에서 PX4는 3D 벡터 퓨전을 강제로 중단하고 1D Heading 퓨전 모드로 하향(Fall-back)한다.

하지만 “과연 언제 다시 3D 벡터 퓨전으로 복귀할 것인가?“를 결정하는 메커니즘이 중요하다. PX4는 지면의 자기장 간섭이 거리의 세제곱에 반비례하여 급격히 감소한다는 물리적 사실을 바탕으로 고도 기반 스위칭(Altitude-based Switching) 로직을 사용한다.

// src/lib/ecl/EKF/mag_control.cpp 의 의사코드

// 1. 이착륙 단계를 판단 (in_air 플래그 작동)
bool is_in_air = _control_status.flags.in_air;

// 2. 이륙 후 일정 고도 이상 도달 및 비행 시간 충족 여부 검사
// EKF2_MAG_DELAY 파라미터는 이륙 직후 기체가 금속성 지면에서 완전히 벗어날 때까지의 추가 대기 시간(s)을 의미한다.
bool has_cleared_ground_effect = false;
if (is_in_air && (time_since_takeoff > _params.mag_delay_ms)) {
    has_cleared_ground_effect = true;
}

// 3. 지면 효과를 완벽히 벗어났다고 판별되면 3D 퓨전 복귀 조율
if (has_cleared_ground_effect && !_control_status.flags.mag_3D) {
    // Heading 값을 기반으로 공분산 정렬 후 3D 퓨전 모드로 조심스럽게 복귀
    resetMagStates();
    _control_status.flags.mag_hdg = false;
    _control_status.flags.mag_3D = true;
}

이 고도 및 이륙 지연(Delay) 시간 연계 로직 덕분에, PX4 드론은 철판 위에서 이륙하더라도 허공으로 솟아올라 깨끗한 지구 자기장 환경에 진입하기 전까지는 오염된 지자계 데이터를 3차원 상태 변수에 오염시키지 않는다.


2. 추력/전류(Thrust/Current) 기반 전류 유도 간섭 보상

더 큰 문제는 기체 내부에서 발생하는 자기장이다. 배터리에서 ESC(모터 변속기)로 흐르는 대전류는 암페어의 법칙에 의해 주변에 강력한 자기장을 형성하며, 이는 드론의 스로틀이 오르락내리락할 때마다 지자계 센서를 비틀어버린다.

이를 가장 확실히 해결하는 방법은 지자계 센서를 길쭉한 GPS 마스트(Mast) 꼭대기로 최대한 멀리 유배(?) 보내는 하드웨어적 분리이지만, 초소형 기체나 밀폐형 기체에서는 이것이 불가능하다. 따라서 PX4는 전원 모니터 모듈에서 들어오는 측정 전류값이나 믹서(Mixer)에서 출력되는 추력 지령(Thrust Setpoint) 값을 사용하여 자기장 편향 오차(\mathbf{m}_{\text{bias}})를 선제적으로 모델링한다.

2.1 선형 전류 보상 수식의 적용

사용자가 EKF2_MAG_B_X/Y/Z 계수와 함께 EKF2_MAC_COEF_X/Y/Z 파라미터(전류 대비 자기장 구배 편차)를 설정하면, EKF 내부에서 예상 관측치를 구할 때 전류에 비례하는 동적 바이어스 오프셋을 실시간으로 추가한다.

// _state.mag_B: 기본 정적 기체 자기장 바이어스
// _params.mag_coef: 단위 전류당 X, Y, Z 자기장 편향 선형 계수 벡터 (사용자 튜닝 값)
// _batt_current: 실제 배터리 소비 전류 (또는 추력 예측치)

Vector3f dynamic_mag_bias = _state.mag_B + (_params.mag_coef * _batt_current);

// 예상 관측치 산출 시 이 동적 바이어스를 적용
Vector3f mag_pred = (_R_to_body * _state.mag_I) + dynamic_mag_bias;

2.2 간섭 임계치 돌파 시의 긴급 정지 (Fail-safe)

만약 이러한 보상 수식으로도 감당이 안 될 정도로 수십 암페어의 역전류가 튀어 지자계 센서가 포화(Saturation)되거나 센서의 Innovation Test Ratio가 연속적으로 1.0을 심각하게 초과할 경우, EKF2는 “지자계 센서 퓨전의 완전한 중단(Mag Fusion Denied)” 을 선언한다.

이 상태에 돌입하면 기체의 요(Yaw) 축은 가속도계만으로는 유지될 수 없으므로, 즉시 다크 디드 리코닝(Dead Reckoning) 모드나 GPS 속도 벡터를 활용한 공기역학적 추정(고정익의 경우) 등으로 전환되며 조종자에게 치명적인 경고(Mag Interference)를 송출한다.


3. 소결

PX4-Autopilot의 지자계 퓨전 로직은 자기장 센서 하나만을 쳐다보고 결정을 내리지 않는다. “지금 기체가 땅바닥에 있는가?”, “모터가 전기를 얼마나 빨아먹고 있는가?“라는 다른 맥락(Context)들을 종합적으로 판단하여 관측 행렬의 적용을 스위칭하고 동적 오프셋을 더한다.

이러한 기체 환경(Environment) 메트릭과 칼만 필터 수학의 창의적인 융합이야말로 순수 학술적 필터 알고리즘과 현장 검증을 거친 실산업용 비행 제어기(Flight Controller) 간의 메울 수 없는 격차를 보여주는 단면이라 할 수 있다.

지자계 센서만큼이나 예민한 또 다른 센서인 기압계(Barometer)는 바람과 온도의 농간에 취약하다. 다음 절에서는 이 기압계 데이터가 어떻게 GPS 고도 데이터와 엮여 ’최적의 수직 위치(fuseBaro)’를 도출해 내는지 그 퓨전 원리를 다각도로 조명한다.