27.5.4.2. 이착륙 시 발생하는 지면 효과 강하(Drop) 현상의 모델링 코드

27.5.4.2. 이착륙 시 발생하는 지면 효과 강하(Drop) 현상의 모델링 코드

드론이 지면에 가까이 붙어 비행할 때 발생하는 지면 효과(Ground Effect) 는 헬리콥터 조종사들에게는 부력(Lift)이 증가하여 연료를 아낄 수 있는 고마운 현상이지만, 기압계(Barometer)에 의존하는 자동 비행 제어기(EKF)에게는 최악의 교란 요인 중 하나다.

고속으로 회전하는 프로펠러 층(Rotor Wash)이 아래로 강하게 밀어낸 공기가 단단한 지면에 부딪혀 반사되면서, 기체 하부에 위치한 기압계 센서 포트 주변의 국소적인 정압(Static Pressure)이 순간적으로 급상승한다. 칼만 필터 입장에서 압력이 올라갔다는 것은 곧 고도가 낮아진 것을 의미하므로, 드론은 실제로는 허공(예: 0.5m 상공)에 떠 있음에도 불구하고 센서는 “지하 1m로 파고들었다“는 식의 가짜 하강(Drop) 데이터를 지속적으로 뿜어낸다.

본 절에서는 이 물리적인 기압 왜곡 현상을 소스 코드 레벨에서 어떻게 감지하고 억제(Mitigation)하여 기체가 착륙 시 튀어 오르는(Bouncing) 사고를 방지하는지 분석한다.


1. 지면 효과 강하 현상(Baro Drop)이 유발하는 제어기 발산

PX4 EKF2가 이 ‘기압 하강(고도계 상 하강, 실제 압력 증가)’ 현상을 그대로 받아들여 상태 벡터 9번(p_D)을 업데이트하면 어떤 일이 발생할까?

수직 위치 제어기(Position Controller)는 현재 기체의 고도가 목표 고도보다 너무 낮다고(지하로 꺼졌다고) 판단하여, 고도를 복구하기 위해 스로틀(Throttle) 추력을 급격히 올리게 된다. 그 결과 지면에 착지하려고 했던 기체가 갑자기 하늘로 튀어 오르고(Surge), 올라가면 지면 효과가 사라져 다시 기압이 정상이 되므로 스로틀을 내리고, 다시 지면에 가까워지면 기압이 튀고 스로틀을 올리는 끔찍한 **발진(Oscillation)**이 발생한다.


2. 지면 효과(Ground Effect) 상태 머신과 강하량 보상

이 현상을 방어하기 위해 PX4 EKF2 아키텍처는 src/lib/ecl/EKF/ground_effect.cpp (또는 관련 분리 모듈) 내에 지면 효과 개입 여부를 추적하는 논리를 내장하고 있다. 핵심은 기압계 센서가 측정하는 혁신 잔차(Innovation Residual) 자체를, 이착륙 조건에서만큼은 수학적으로 ‘기각’ 또는 ’단방향 보정’하는 데 있다.

2.1 지면 효과 활성화(GND_EFFECT) 조건식

EKF는 현재 기체가 지면 효과 영역 내에 있는지 판단하기 위해 다음과 같은 다중 조건 플래그(Flag)를 검사한다.

// 1. 상태 레벨 기반 지면 근접 판단
bool is_near_ground = false;

// 거리 센서(Range Finder)가 가용할 경우 최우선으로 지상고 기준 판단
if (_range_sensor.is_valid()) {
    is_near_ground = (_range_sensor.get_dist() < _params.gnd_effect_max_hgt);
} 
// 거리 센서가 없다면 이착륙 상태 머신 플래그에 의존
else {
    is_near_ground = _control_status.flags.in_air && !has_cleared_ground_effect_time; 
}

// 2. 수직 속도(Vertical Velocity) 조건 (착륙/이륙 중인지, 너무 빠른 속도가 아닌지)
bool is_moving_slowly_vertically = abs(_state.vel(2)) < 1.0f; 

bool gnd_effect_active = is_near_ground && is_moving_slowly_vertically;

2.2 비대칭(Asymmetric) 잔차 혁신 처리 로직

위 조건에 의해 gnd_effect_activetrue가 되면, EKF의 기압 퓨전 로직은 비대칭 잔차 처리 모드로 전환된다. 이 아이디어는 매우 직관적이고 강력하다.

지면 효과는 물리적으로 압력을 증가시키는 방향(고도를 낮추는 방향) 으로만 작용한다.
따라서 지면 근처에서 기압계가 “고도가 갑자기 낮아졌다(압력 증가)“라고 보고하는 센서 잔차는 ’지면 효과에 의한 노이즈’로 간주하여 퓨전에서 기각(Reject)하거나 가중치를 대폭 하향(De-weight) 시킨다.
반대로 지면 근처에서 기압계가 “고도가 높아졌다(압력 감소)“라고 보고하는 잔차는 지면 효과와 거리가 멀므로 정상적으로 수용(Accept)한다.

// src/lib/ecl/EKF/baro_fusion.cpp 의 보상 로직 (의사코드)

float baro_innov = _state.pos(2) - (-measured_baro_alt); // 잔차 연산

if (gnd_effect_active) {
    // 만약 잔차가 '하강(기압 상승)'을 지시한다면, 혁신(Innovation) 값을 0으로 뭉개버리거나 제한을 건다.
    // 이는 칼만 게인(K)에 의한 고도 상태 벡터의 하향 업데이트를 강제로 막는 효과를 낳는다.
    if (baro_innov > 0.0f) { 
        baro_innov = 0.0f; // 가짜 강하(Drop) 데이터를 EKF에 전파하지 않음
    }
}

이 고의적인 비대칭 퓨전(단방향 관측치 무시) 덕분에, PX4 드론은 지상 0.5m 이내에 진입하여 거센 로터 워시(Rotor Wash) 압력을 통째로 뒤집어쓰더라도, EKF 고도가 땅속으로 꺼지지 않고 IMU 가속도계의 관성 데이터를 굳건히 믿고 부드럽게 지면(Touchdown)까지 고도를 내릴 수 있게 된다.


3. 소결

PX4-Autopilot의 기압계 지면 효과 강하(Baro Drop) 보상 로직은 제어 이론 교과서에 나오는 파라미터 튜닝만으로는 절대 풀 수 없는 ’물리적 유체 역학의 한계’를 소프트웨어적인 예외 처리 상태 머신으로 극복한 훌륭한 엔지니어링 쾌거다. 지상고와 속도 조건, 그리고 단방향 혁신 값 클리핑(Clipping)을 통해 비행의 가장 위험한 순간인 이착륙 단계의 안정성을 담보해 낸 것이다.

지금까지 가속도계, GPS, 지자계, 기압계 등 전통적인 항법 센서들의 융합 로직을 모두 살펴보았다. 다음 절에서는 카메라 비전과 IMU가 결합하여 GPS 음영 지역(실내, 지하)에서도 드론의 눈이 되어주는 옵티컬 플로우(Optical Flow) 및 VIO(Visual Inertial Odometry) 퓨전 파이프라인의 핵심 수학 구조를 분석하도록 하겠다.