29.5.2.1. 선형 비례 연산: 스틱 입력값과 최대 각속도 파라미터 간의 선형 비례 방정식 구조

29.5.2.1. 선형 비례 연산: 스틱 입력값과 최대 각속도 파라미터 간의 선형 비례 방정식 구조

조종기의 조작을 기체의 회전 운동으로 변환하는 가장 기초적이고 직관적인 수학적 모델은 선형 비례(Linear Proportional) 방정식이다. 비선형적인 엑스포(Expo) 커브를 적용하기 전에, PX4-Autopilot의 아크로(Acro) 모드 제어 시스템은 입력된 물리적 스틱 변위를 조종사가 설정한 최대 각속도(Max Rate) 한계점과 매핑하는 기준 선형 모델을 백본(Backbone)으로 삼는다.

본 절에서는 src/modules/manual_control/ManualControl.cpp의 소스 코드를 통해 스틱의 정규화된 입력값이 어떻게 물리적인 초당 회전각(rad/s)으로 1:1 선형 사상(Mapping)되는지 그 원리를 분석한다.

1. 선형 비례 변환의 수학적 모델

수동 비행 모드에서 하드웨어 드라이버(예: SBUS, CRSF 수신기 모듈)를 통해 들어온 조종기 스틱의 펄스폭(PWM) 단위 데이터는 제어기 내부로 들어오기 전 -1.0에서 +1.0 사이의 무차원(Dimensionless) 실수로 정규화된다.

선형 비례 연산 모델에서, 조종사가 스틱을 최대로 쳤을 때(±1.0) 기체가 도달해야 하는 최대 회전 속도를 R_{max} 라고 한다면, 임의의 스틱 입력 x 에 대한 목표 각속도 y 는 다음과 같은 1차 선형 방정식으로 정의된다.

y = x \cdot R_{max} \quad (단, -1.0 \le x \le 1.0)

이 수식 체계의 가장 큰 특징은 스틱의 변위율(Gradient)과 기체의 각속도 변화율이 상수로 일정하다는 것이다. 즉, 조종사가 스틱을 10%만큼 더 밀면 기체의 회전 속도도 정확히 최대 각속도의 10%만큼 증가한다.

선형 방정식의 C++ 소스 코드 구현체 분석

PX4는 비선형 지수 커브를 사용하지 않고 순수하게 선형 제어만을 수행해야 하는 경우(예: 파라미터에서 Expo 값을 0.0으로 설정했을 때), 위 수식을 코드 내에서 매우 직관적인 연산으로 처리한다.

// src/modules/manual_control/ManualControl.cpp 핵심 발췌

float ManualControl::apply_acro_expo(float stick_in, float expo, float super_expo, float max_rate)
{
    // ... 부호 추출 및 비선형 분모 계산 로직 생략 ...

    // 만약 사용자가 QGroundControl에서 파라미터(MC_ACRO_EXPO)를 0.0으로 주었다면,
    // 아래의 다항식은 순수한 1차 선형 방정식(Linear Equation)으로 퇴화(Degenerate)된다.
    // stick_in_abs * (1.0f - 0.0f) + powf(stick_in_abs, 3.0f) * 0.0f => stick_in_abs
    
    float expo_applied = stick_in_abs * (1.0f - expo) + powf(stick_in_abs, 3.0f) * expo;

    // 부호를 다시 복원하고, 파라미터에 정의된 최대 각속도(max_rate)를 곱함
    float rate_setpoint = sign * expo_applied * max_rate;

    return rate_setpoint; // 최종 각속도(rad/s) 반환
}

해당 코드 블록에서 확인되듯, R_{max}max_rate 파라미터 값(예: 롤 축의 경우 MC_ACRO_R_MAX)은 연산의 가장 마지막 단계에 스케일링 팩터(Scaling Factor)로 곱해진다.

Ardupilot 제어 구조와의 파라미터 매핑 비교

  • PX4-Autopilot: MC_ACRO_R_MAX, MC_ACRO_P_MAX, MC_ACRO_Y_MAX 파라미터를 통해 롤, 피치, 요 축에 대한 최대 각속도(deg/s를 내부에서 rad/s로 변환하여 사용)를 개별적으로 엄격하게 통제한다. ManualControl 모듈은 이 파라미터들을 읽어와 선형 비례식의 상수로 사용한다.
  • Ardupilot: 유사한 기능으로 ACRO_RP_RATE (롤/피치 최대 각속도) 및 ACRO_Y_RATE (요 최대 각속도) 파라미터가 존재하며, 이 값들은 AC_AttitudeControl의 각속도 타겟 주입 함수에서 비례 상수로 쓰인다.

선형 비례 모델의 물리적 한계와 비선형 모델 도입의 당위성

순수한 선형 비례 제어는 수학적 예측 가능성이 가장 뛰어나다는 장점이 있다. 로봇 공학의 자율 에이전트(Autonomous Agent)가 궤적을 계획하여 vehicle_rates_setpoint를 직접 인가할 때는 이러한 선형적 구조가 훨씬 유리하다.

그러나 인간 조종사의 손가락 근육 움직임을 기반으로 하는 수동 비행의 관점에서 볼 때, 최대 각속도를 1,000 \text{ deg/s} 와 같이 극단적으로 높여놓은 레이싱 기체에서는 선형 방정식이 치명적인 조종 불안정성을 야기한다. 스틱 중심부 근처에서 단 1%의 미세한 스틱 떨림만 발생해도 기체에 초당 10\text{deg} 의 회전 명령이 들어가기 때문에, 기체의 수평 유지나 미세한 궤도 수정이 사실상 불가능해진다.
따라서 PX4 개발진은 이 선형 방정식의 코어 뼈대를 유지한 채, 그 위에 지수 함수를 결합하여 중앙부 해상도를 높이는 Expo(엑스포) 및 Super Expo 로직을 덧씌우는 구조를 채택하게 되었다.