29.5.2.3. 아크로 엑스포(Acro Expo) 적용: 중앙 제어 영역의 분해능(Resolution) 향상을 위한 비선형 곡선 튜닝 알고리즘
수동 비행 시 조종기의 짐벌 스틱(Stick)은 한정된 물리적 이동 거리(Throw)를 가진다. 레이싱 드론이나 3D 아크로바틱 기체처럼 최대 초당 회전수(Maximum Roll/Pitch Rate) 설정값이 거대할 경우, 스틱 중심부 근처에서의 미세한 조작마저도 큰 회전 각속도로 번역되어 조종자가 기체의 수평을 되찾거나 미세하게 자세를 교정하는 것을 극도로 어렵게 만든다.
이를 소프트웨어적으로 해결하기 위해 PX4-Autopilot은 스틱 입력값의 중앙 제어 영역 분해능(Resolution)을 인위적으로 높이는(즉, 둔감하게 만드는) ‘엑스포(Expo)’ 곡선 알고리즘을 사용한다. 본 절에서는 MC_ACRO_EXPO 파라미터를 기반으로 스틱 입력이 어떻게 비선형 3차 곡선(Cubic Curve)으로 변환되는지 소스 코드를 중심으로 살펴본다.
1. Expo(엑스포) 알고리즘의 동역학적 목적
Expo 함수는 스틱 변위 x (-1.0 \le x \le 1.0)에 대하여, 스틱이 중앙값(0.0)에 가까울 때는 변화율(Gradient)을 감소시키고, 스틱이 양 극단에 가까워질수록 변화율을 급격히 증가시키는 비선형 매핑 함수다.
이를 통해 조종사는 한정된 스틱 가동 범위 내에서 두 가지 상반된 제어 특성을 동시에 확보하게 된다.
- 중앙 영역의 정밀도(Precision): 미세한 궤도 수정이나 호버링 유지 시 스틱 떨림(Jitter)이나 미세 조작에 기체가 과민하게 반응하지 않도록 방지한다.
- 외곽 영역의 기동성(Agility): 스틱을 끝까지 칠 때(Full Deflection)는 원래 설정한 최대 각속도(Max Rate)에 도달할 수 있도록 보장한다.
2. 차 다항식(Cubic Polynomial) 보간법 C++ 소스
PX4의 모듈 src/modules/manual_control/ManualControl.cpp 내에 정의된 Expo 수식은 단순한 제곱근이나 삼각함수가 아닌, 1차 함수(선형 방정식)와 3차 함수(Cubic Equation) 사이의 가중 편차 스케일링 기법(Weighted Linear Interpolation)을 사용한다.
// src/modules/manual_control/ManualControl.cpp 핵심 구간 분석
float ManualControl::apply_acro_expo(float stick_in, float expo, float super_expo, float max_rate)
{
float stick_in_abs = fabsf(stick_in); // 스틱 입력의 절대값 (0.0 ~ 1.0)
// --- Expo 연산부 ---
// expo 매개변수: 사용자가 설정한 MC_ACRO_EXPO (보통 0.0 ~ 1.0)
// 수학적 튜닝 알고리즘: (1 - expo) 비율의 '선형 곡선'과 (expo) 비율의 '3차 곡선'을 합성
float expo_applied = stick_in_abs * (1.0f - expo) + powf(stick_in_abs, 3.0f) * expo;
// (이하 Super Expo 분모 연산 및 최종 rate 환산 로직 생략...)
이 알고리즘에서 가장 눈여겨볼 점은 파라미터 expo가 1차항 \vert x \vert 와 3차항 \vert x \vert^3 사이의 가중치로 작용한다는 것이다.
expo = 0.0일 때:expo_applied = stick_in_abs. 즉, 순수한 선형 비례 선(y=x)이 된다.expo = 1.0일 때:expo_applied = powf(stick_in_abs, 3.0f). 즉, 순수한 3차 곡선(y=x³)이 되어 중앙 영역이 극도로 둔감해진다.expo = 0.6일 때: 선형 특성 40%와 3차항 특성 60%가 부드럽게 융합(Blending)된다. 이처럼 비선형 곡선의 깊이(Depth)를 조종사가 직관적인 퍼센티지로 튜닝할 수 있게 해준다.
3. Ardupilot(AC_AttitudeControl) 대응 로직 통합 방식과의 차이
Ardupilot은 전통적으로 조종기 측에서 Expo를 설정하거나 (펌웨어 초기 버전), 내부 파라미터(ACRO_RP_EXPO)를 사용할 때 다항식 근사 혹은 조종 스틱 객체 내부의 LUT(Look Up Table) 방식을 혼용하는 등 기능이 파편화되어 있었다.
반면 PX4는 ManualControl 모듈 안에 단일화된 부동소수점 수학 함수 apply_acro_expo를 독립 커널로 설계하여 캡슐화시켰다. 이를 통해 어떠한 조종기 제조사 프로토콜(SBUS, DSM, CRSF 등)이 혼용되더라도, 기체 내부에서의 비선형 증폭 특성은 완벽하게 동일한 3차 곡선을 그리며 C1 연속성(Continuous Differentiability)을 보장받는다.
4. 실무 튜닝 가이드라인
PX4 시스템 상에서 QGroundControl을 통해 MC_ACRO_EXPO 파라미터를 튜닝할 때는 기체의 중량 대비 추력비(Thrust-to-Weight Ratio)와 연계해야 한다. 레이싱 드론처럼 반응성이 흉포한 기체는 0.6 ~ 0.8 사이의 강한 엑스포를 주어 중앙 분해능을 확연히 넓혀야 하지만, 느린 항공 촬영용 쿼드콥터에 지나치게 높은 엑스포 값을 적용할 경우 스틱을 일정 수준 이상 밀기 전까지 기체가 먹먹하게(Sluggish) 느껴지는 ‘컨트롤 딜레이’ 증후군을 호소하게 될 수 있으므로 유의해야 한다.