29.5.4. 극한 기동 튜닝 보조 메커니즘

29.5.4. 극한 기동 튜닝 보조 메커니즘

1. 개요 및 설계 목적

최신 PX4-Autopilot(v1.14 및 v1.15 기준)에서 수동 비행의 꽃이라 할 수 있는 아크로(Acro) 모드와 안정화(Stabilized) 모드에서의 극한 기동(Extreme Maneuver)은 조종자의 급격한 입력에 대해 기체가 즉각적이고 정확하게 반응할 것을 요구한다. 이러한 극한 기동 상황에서는 기체의 관성, 공기역학적 저항, 그리고 구동기(Actuator)의 물리적 한계로 인해 일반적인 비례-적분-미분(PID) 제어기만으로는 오버슈트(Overshoot)나 오차 누적(Windup) 등의 현상이 발생하기 쉽다.

이에 대응하기 위해 PX4-Autopilot은 단순한 오차 기반 제어를 넘어, 극한 기동 시 조종성을 유지하고 제어기 포화(Saturation)를 방지하기 위한 다양한 **튜닝 보조 메커니즘(Tuning Assistance Mechanisms)**을 내장하고 있다. 본 절에서는 피드포워드(Feedforward) 제어, 적분기 와인드업 방지(Anti-Windup), 스러스트 커브(Thrust Curve) 선형화 등의 핵심 알고리즘 구조와 소스 코드 수준의 동작 원리를 심층적으로 분석한다.

2. 핵심 튜닝 보조 메커니즘 아키텍처

PX4의 각속도 제어 루프(Rate Control Loop)는 조종자의 스틱 입력으로부터 파생된 목표 각속도(Rate Setpoint)를 추종한다. 이 과정에서 극한 기동 시 발생하는 비선형성을 제어하기 위해 다음과 같은 보상 메커니즘이 동작한다.

2.1 피드포워드 제어 (Feedforward Control)

오차(Error)가 발생한 후 보상하는 피드백(Feedback) 제어방식의 지연 시간을 극복하기 위해, PX4는 목표 각속도 명령 자체에 비례하는 제어값을 구동기에 직접 전달하는 피드포워드(Feedforward) 항을 사용한다.
특히 롤(Roll) 통 스핀이나 고속 플립(Flip)과 같은 극한 기동에서는 목표 각속도의 변화율이 매우 크기 때문에, MC_ROLLRATE_FF, MC_PITCHRATE_FF, MC_YAWRATE_FF 이득(Gain) 값이 제어 응답성을 결정하는 핵심 파라미터가 된다. 이를 통해 조종 지연(Latency)을 최소화하고, 높은 주파수의 스틱 입력에 기체가 즉각적으로 동기화된다.

2.2 적분기 와인드업 방지 (Integrator Anti-Windup)

극한 기동 중에는 모터가 100% 출력에 조기 도달하여 액추에이터 포화(Actuator Saturation) 상태에 빠지는 경우가 빈번하다. 이때 적분기(Integrator)가 계속해서 오차를 누적하게 되면 기동 종료 후 심각한 오버슈트 현상이 발생한다.
이를 방지하기 위해 PX4의 제어 라이브러리는 다이내믹 안티 와인드업(Dynamic Anti-Windup) 알고리즘을 구현하고 있다. 제어 행렬의 출력이 모터 출력을 초과하여 포화 플래그(Saturation Flag)가 활성화될 경우, 적분기의 오차 누적을 즉시 중단(Clamp)시켜 시스템의 안정성을 보증한다.

2.3 스러스트 커브 선형화 (Thrust Curve Linearization)

멀티로터의 프로펠러 추력(Thrust)은 모터의 PWM 신호에 대해 비선형적인 특징(통상 제곱에 비례)을 가진다. 극한의 스로틀 입력 변화 상황에서 제어기의 선형성을 유지하기 위하여, 파라미터 THR_MDL_FAC를 통한 추력 모델 비선형성 보상이 이루어진다. 이 파라미터를 정확히 튜닝하면 호버링(Hovering) 스로틀과 최대 스로틀 사이의 입력-출력 응답이 선형화되어 제어기의 대역폭(Bandwidth)을 일관되게 유지할 수 있다.

3. 제어기 동작 흐름 (Mermaid 설계도)

다음은 목표 각속도가 급격히 변하는 극한 기동 시, PID 루프와 보조 메커니즘이 어떻게 결합되어 모터 명령(Mixer Input)으로 전달되는지 보여주는 시스템 다이어그램이다.

graph TD
    A[조종기 RC 입력 <br> High-rate Command] --> B[목표 각속도 변환기]
    B --> C(Rate Setpoint)
    
    C -->|Feedforward Path| D[FF 제어기 Gain 적용]
    
    C --> E((오차 계산))
    F[Gyro 센서 회전 각속도] --> E
    
    E --> G[비례 제어기 P]
    E --> H[적분 제어기 I]
    E --> I[미분 제어기 D]
    
    H --> J{포화 검사기<br>Anti-Windup}
    J -- 포화 시 Clamped --> K((제어값 합산))
    J -- 정상 시 --> K
    
    G --> K
    I --> K
    D --> K
    
    K --> L[스러스트 커브 선형화]
    L --> M[Control Allocator / 믹서]
    M --> N[모터 제어 액추에이터]

4. 소스 코드 분석 (src/modules/mc_rate_control/RateControl.cpp)

각속도 제어기의 핵심 로직은 극한 기동 시 피드포워드를 우선 처리하고 안티 와인드업 조건을 계산하도록 설계되어 있다. PX4 펌웨어 소스 코드의 RateControl::update() 함수 내부를 살펴보면 다음과 같은 흐름을 확인할 수 있다.

// 1. 피드포워드(Feedforward) 계산: 목표 각속도 단위(rad/s)에 대해 직접 토크를 산출
matrix::Vector3f torque_ff = _rate_sp.emult(_gain_ff);

// 2. 비례(P) 및 미분(D) 제어 계산
matrix::Vector3f rate_error = _rate_sp - rates;
matrix::Vector3f torque_p = rate_error.emult(_gain_p);
matrix::Vector3f torque_d = _angular_accel.emult(_gain_d);

// 3. 전체 필요한 토크 추산 (적분기 미포함)
matrix::Vector3f torque_req = torque_p + torque_d + torque_ff + _torque_int;

// 4. 안티 와인드업 로직 적용
// 제어 출력 한계(limit)를 초과하는 축에 대해 적분기(Integrator) 누적을 동반 정지시킴
if (_actuators_saturated.roll || _actuators_saturated.pitch || _actuators_saturated.yaw) {
    // 포화된 축의 부호와 오차의 부호를 비교하여 적분기 고정(Clamping)
    prevent_windup(rate_error); 
} else {
    // 포화되지 않은 경우 오차 적분 진행
    _torque_int += rate_error.emult(_gain_i) * dt;
}

위의 소스 코드에서 볼 수 있듯, 피드포워드 항(torque_ff)은 피드백 제어 이전의 기본값을 즉각적으로 구성한다. 이후 구동기의 제어 한계를 모니터링하는 _actuators_saturated 상태 변수를 통해 적분기의 누적을 제한(prevent_windup)함으로써 극한의 각속도에서 기체가 오버슈팅 없이 빠르고 둔탁하게 멈출 수 있는 환경을 제공한다.

5. Ardupilot과의 아키텍처 비교

극한 기동 제어 관점에서 PX4-Autopilot과 Ardupilot은 비슷한 물리적 문제를 해결하지만, 내부 아키텍처 및 파라미터 구조에서 차이를 보인다.

  • PX4-Autopilot:
    각 축(Roll, Pitch, Yaw)에 대해 독립적이고 명시적인 피드포워드 파라미터(MC_ROLLRATE_FF, 등)를 사용한다. P/I/D 체계와 FF 체계가 독립적으로 병렬 계산되며, QGroundControl(QGC)의 기본 UI에서 PID 튜닝 탭 내 안티와인드업 및 FF 값을 마우스 스크롤만으로 직관적으로 수정할 수 있도록 통합되어 있다.
  • Ardupilot:
    ATC (Attitude Control) 라이브러리를 통해 제어하며, ATC_RAT_RLL_FF, ATC_RAT_PIT_FF 와 같은 변수를 사용한다. Ardupilot은 기본적으로 V-Tail 등 복합 형태를 고려한 복잡한 믹서 매핑 로직 이전에 내부적으로 Autotune(자동 튜닝) 모델을 통한 FF 이득 자동 산출에 비중을 높게 두는 경향이 있다.

결과적으로, PX4의 보조 메커니즘 튜닝 체계는 로우레벨 모델 개발자 및 학술 연구자가 직접 제어 궤적을 명시적으로 디자인하기에 투명하고 직관적인 소스 코드 구조를 제공한다. 반면, 극한 기동 전용 최적 제어를 위해서는 관련 제어 계수 논문(예: “Design of Feedforward and Feedback Control for High-Agility Quadrotors”)에서 제시되는 이득 스케줄링(Gain Scheduling) 기법을 반영하여 비행 영역 전체의 파라미터를 세분화 할 필요성이 대두된다.