[PX4 튜닝 시리즈 4] 고급 PID 튜닝 및 비행 최적화: 극한의 비행 성능을 끌어내는 숨겨진 1%의 비밀
항공우주공학과 자율비행 드론을 연구하시는 대학생, 대학원생, 그리고 연구원 여러분, 안녕하십니까!
지난 [시리즈 3]에서는 수동 PID 튜닝의 기초를 다루며, 기체가 호버링(Hovering)하는 상태에서 조종기의 스틱 입력에 얼마나 빠르고 정확하게 반응하는지를 튜닝했습니다. 기본 튜닝 절차를 잘 따라오셨다면, 여러분의 기체는 이제 꽤 안정적인 비행 성능을 보여주고 있을 것입니다.
하지만 연구 목적의 기체이거나 FPV 레이싱 드론처럼 한계까지 성능을 쥐어짜 내야 하는 상황이라면, ‘호버링 추력(Hover thrust) 주변’에서의 튜닝만으로는 부족합니다. 스로틀을 최대로 높였을 때 기체가 갑자기 부르르 떨리거나, 반대로 스로틀을 완전히 내린 상태에서 기체가 중심을 잃고 기울어지는 현상을 겪어보신 적이 있으신가요?
이번 시리즈 4에서는 이러한 비선형적인 비행 환경에서도 기체를 완벽하게 제어하기 위한 **고급 PID 튜닝 기법(Advanced PID Tuning)**을 다룹니다. 속도 제어기의 아키텍처부터 고출력 구간의 진동을 잡는 추력 곡선 보상, 그리고 영(0) 스로틀에서도 자세 제어를 잃지 않게 해주는 에어모드(Airmode)까지 상세히 알아보겠습니다.
1. 속도(Rate) 제어기 아키텍처: Standard vs Parallel
드론 제어의 가장 핵심인 각속도(Rate) 제어기는 세 축(Roll, Pitch, Yaw)의 회전 속도를 제어하는 독립적인 3개의 PID 제어기로 구성됩니다. 재미있는 점은, PX4는 이 Rate 제어기에 대해 수학적으로 동일한 두 가지 형태의 아키텍처, 즉 **표준형(Standard Form)**과 **병렬형(Parallel Form)**을 단일 ‘혼합(Mixed)’ 구현체로 지원한다는 것입니다.
여러분은 설정하고자 하는 형태에 따라 파라미터 값 중 하나를 ‘1’로 설정하여 원하는 아키텍처를 선택할 수 있습니다.
① 병렬형 아키텍처 (Parallel Form)
교과서에서 가장 흔히 볼 수 있는 직관적이고 단순한 형태입니다. 오차(Error)에 대해 비례(P), 적분(I), 미분(D) 연산을 각각 수행한 후 이를 단순히 더하여 제어 출력(u)을 만들어냅니다.
- 설정 방법: QGroundControl(QGC)에서
MC_ROLLRATE_K(전체 이득 값)를 1로 설정하면 P, I, D 게인이 각각 독립적으로 작동하는 병렬형 컨트롤러가 됩니다.
② 표준형 아키텍처 (Standard Form)
이 형태는 수학적으로는 병렬형과 완전히 동일하지만, **비례 게인(P)의 튜닝을 적분(I) 및 미분(D) 게인으로부터 분리(Decouple)**시킨다는 엄청난 장점이 있습니다.
- 장점: 만약 여러분이 새로운 드론을 조립했는데, 이전에 튜닝해 둔 드론과 크기나 관성(Inertia)이 비슷하다면, 이전 드론의 I와 D 게인을 그대로 가져온 뒤 단순히 전체 K 게인 하나만 조절하여 손쉽게 새로운 기체의 튜닝을 끝낼 수 있습니다.
- 설정 방법: QGC에서
MC_ROLLRATE_P값을 1로 설정하고,MC_ROLLRATE_K값을 조절하여 전체 시스템의 반응성을 튜닝합니다.

참고: 미분(D) 항은 목표값의 급격한 변화로 인한 ‘미분 킥(Derivative kick)’ 현상을 방지하기 위해 피드백 경로(Feedback path)에 배치되어 있습니다.
2. 추력 곡선(Thrust Curve) 보상: 최고 속도에서의 진동 잡기
시리즈 3에서 수행한 기본 튜닝은 기체가 떠 있는 ‘호버링 추력(Hover throttle) 지점’을 중심으로 최적화되어 있습니다. 그런데 스로틀을 70~100%로 강하게 올리며 급가속할 때 기체가 요동치거나 발진(Oscillation)하는 현상을 본 적이 있으신가요?
이러한 고출력 진동은 모터 제어 신호(PWM)와 실제 모터가 내뿜는 추력(Thrust) 간의 비선형성(Non-linearity) 때문에 발생합니다. 제어 신호는 선형적으로 증가하지만, 프로펠러가 만들어내는 공기역학적 추력은 2차 곡선(Quadratic)의 형태로 급격히 증가하기 때문입니다. 이를 보상하기 위해 PX4는 THR_MDL_FAC 파라미터를 제공합니다.
2-1. THR_MDL_FAC 설정 원리
이 파라미터는 모터 신호가 추력으로 변환되는 모델을 결정합니다.
- 값 0.0: 완전한 선형(Linear) 맵핑을 의미합니다.
- 값 1.0: 완전한 2차 곡선(Quadratic) 맵핑을 의미합니다. (DShot 텔레메트리 등 RPM 기반 ESC를 사용할 때는 이미 추력이 2차 곡선을 따르므로 1.0을 사용합니다).
- 값 0.3 ~ 0.5: 일반적인 PWM 제어 방식의 ESC를 사용할 때 권장되는 기본값입니다.
2-2. 실험적(Empirical) 튜닝 방법 가이드
고가의 추력 측정 스탠드(Thrust stand)가 연구실에 없다면, 실제 비행을 통해 실험적으로 이 값을 찾아낼 수 있습니다.
- QGC 파라미터 검색창에서
THR_MDL_FAC를 찾아 기본값인 0.3부터 시작합니다. - 이후 비행하며 스로틀을 높였다 낮췄다 반복해 봅니다.
- 고출력(High throttle)에서 진동이 발생한다면: 값이 너무 낮은 것입니다. 값을 0.1씩 올려가며 (예: 0.4 -> 0.5) 풀 스로틀 진동이 사라지는지 확인합니다.
- 저출력(Low throttle)에서 진동이 발생한다면: 값이 너무 높은 것입니다.
- 가장 진동이 없는 부드러운 구간의 값을 찾아 저장합니다.
# 예제 파라미터 설정
THR_MDL_FAC = 0.45 # 실험을 통해 고출력과 저출력 모두에서 발진이 없는 최적의 값을 찾음
주의: 이 파라미터를 크게 변경했다면 전체 제어 루프의 응답성이 달라지므로 Rate 제어기를 다시 튜닝해야 할 수도 있습니다.
3. 에어모드(Airmode)와 믹서 포화(Mixer Saturation): 중력 체공 상태에서의 제어 유지
연구를 하다 보면 기체가 자유 낙하(Freefall)하는 것처럼 스로틀을 0으로 완전히 내린 상태에서도 롤(Roll)이나 피치(Pitch) 제어가 필요한 경우가 있습니다.
비행 제어기는 세 축의 회전 명령(Torque)과 전체 상승/하강 명령(Thrust)을 계산한 뒤, 이를 ‘믹서(Mixer)’를 통해 4개의 모터에 각각 분배합니다. 예를 들어 기체를 오른쪽으로 기울이려면 왼쪽 모터의 추력에는 롤(Roll) 명령값을 더하고, 오른쪽 모터의 추력에서는 동일한 롤(Roll) 명령값을 뺍니다.
문제는 조종자가 스로틀을 0으로 내린 상태(명령 추력이 0인 상태)에서 기체를 회전시키려 할 때 발생합니다. 오른쪽 모터의 출력에서 롤 명령값을 빼야 하는데, 이미 스로틀이 0이므로 모터 명령값이 마이너스(-)가 되어버리는 ‘믹서 포화(Mixer Saturation)’ 현상이 일어납니다. (가변 피치 프로펠러가 아닌 이상 모터가 역회전할 수는 없으니까요). PX4는 이를 해결하기 위해 두 가지 방식을 지원합니다.
3-1. 에어모드 비활성화 (Airmode Disabled – 기본 동작)
마이너스 출력이 나오는 것을 막기 위해, PX4는 모터 명령값이 0 이하로 내려가지 않도록 롤이나 피치의 회전 명령(Torque) 자체를 깎아버립니다. 극단적으로 스로틀이 0이라면 어떤 자세 제어 명령도 수행할 수 없게 되며, 기체는 바람이나 관성에 의해 휙 뒤집어질 수 있습니다.
3-2. 에어모드 활성화 (Airmode Enabled – 비행 성능 극대화)
에어모드를 활성화하면(MC_AIRMODE), 마이너스 출력을 피하기 위해 회전 명령을 깎는 대신 전체 시스템의 스로틀 추력(Thrust)을 강제로 끌어올려 버립니다(Boosting). 이렇게 되면 모터의 마이너스 출력이 0 이상으로 올라오게 되어, 스로틀이 완전히 0인 상태에서도 기체가 완벽하게 자세와 각속도를 추적(Tracking)할 수 있게 됩니다. 이는 레이싱 드론이나 공격적인 기동이 필요한 연구용 기체의 비행 성능을 폭발적으로 향상시킵니다.

3-3. 에어모드 사용 시 주의사항 (★매우 중요★)
에어모드는 훌륭한 기능이지만, PID 튜닝을 할 때는 무조건 에어모드를 꺼야 합니다(Disable). 만약 P 게인이 너무 높게 설정되어 심한 발진(Oscillation)이 발생하는 기체에 에어모드를 켜면, 비행 제어기는 진동을 잡기 위한 강한 제어 명령을 내리게 되고, 이 과정에서 포화를 피하기 위해 에어모드가 스로틀을 계속해서 부스팅하게 됩니다. 결과적으로 조종자가 스로틀을 0으로 내렸음에도 불구하고 기체가 하늘로 무한히 솟구쳐버리는 끔찍한 플라이어웨이(Fly-away) 현상이 발생할 수 있습니다.
따라서 에어모드(MC_AIRMODE)는 기체가 모든 스로틀 구간에서 진동 없이 완벽하게 비행하는 것을 확인한 후, 가장 마지막에 켜야 하는 파라미터입니다.
마치며
수고하셨습니다! 오늘 우리는 [시리즈 3]의 기본 튜닝을 넘어, 기체의 비행 능력을 100% 끌어내기 위한 세 가지 고급 기법을 배웠습니다.
- 연구 기체의 특성에 맞게 표준형(Standard) 또는 병렬형(Parallel) 제어기 아키텍처를 선택하고,
THR_MDL_FAC파라미터 조정을 통해 풀 스로틀 급가속 시 발생하는 고출력 진동을 보상했으며,- 기체의 튜닝이 완벽하다는 전제하에
MC_AIRMODE를 활성화하여 영(0) 스로틀에서의 완벽한 자세 제어까지 구현해 냈습니다.
이제 여러분의 드론은 호버링 상태는 물론, 급상승과 급강하, 그리고 어떤 악조건의 스틱 입력에서도 끄떡없이 목표 궤적을 추종하는 최상의 퍼포먼스를 보여줄 것입니다.
하지만 모든 연구자가 수동으로 수십 번씩 비행을 반복하며 그래프를 분석할 시간적 여유가 있는 것은 아닙니다. 다음 [시리즈 5: 자동 튜닝 (Auto-Tuning)] 편에서는 비행 중 단 40초 만에 비행 제어기가 스스로 기체의 관성과 반응성을 분석하여 최적의 PID 값을 찾아내는 획기적인 ‘오토 튜닝’ 절차와 문제 해결 방법에 대해 상세히 다뤄보겠습니다.
연구실에서의 성공적인 비행을 응원하며, 다음 시리즈에서 뵙겠습니다!

Author: maponarooo, CEO of QUAD Drone Lab
Date: March 6, 2026
