[PX4 튜닝 시리즈 3] 초보자를 위한 수동 PID 튜닝: 기체와 완벽하게 교감하는 법

항공우주공학과 자율비행 드론을 연구하시는 대학생, 대학원생, 그리고 연구원 여러분, 다시 만나게 되어 반갑습니다!

지난 [시리즈 1]과 [시리즈 2]를 통해 우리는 하드웨어의 유격을 잡고 제어 지연(Latency)을 최소화했으며, 비행 로그 분석을 통해 진동을 걸러내는 ‘필터 튜닝(Filter Tuning)’까지 완벽하게 마쳤습니다. 이제 여러분의 드론은 어떠한 기계적 노이즈에도 방해받지 않고 제어기의 명령에 즉각적으로 반응할 수 있는 ‘최고의 신체적 조건’을 갖추었습니다.

오늘 다룰 시리즈 3에서는 드론의 두뇌이자 비행 안정성의 핵심인 **수동 PID 튜닝(Manual/Basic PID Tuning)**에 대해 심도 있게 알아보겠습니다. PX4에는 매우 훌륭한 ‘자동 튜닝(Auto-tuning)’ 기능이 존재하지만, 연구 목적의 특수한 기체이거나 세밀한 최적화가 필요할 때는 수동 튜닝에 대한 깊은 이해가 필수적입니다. 이번 글을 통해 직관적이고 친절하게 수동 튜닝의 원리와 절차를 안내해 드리겠습니다.


1. PID 제어기의 구조와 튜닝 순서 이해하기

드론의 제어 알고리즘은 단일 구조가 아니라, 여러 계층으로 겹겹이 쌓인 ‘캐스케이드(Cascade)’ 형태를 띠고 있습니다. PX4의 제어기는 가장 낮은 수준(가장 안쪽)의 속도(Rate) 제어기부터 시작하여, 자세(Attitude) 제어기, 그리고 가장 바깥쪽의 속도 및 위치(Velocity & Position) 제어기 순으로 데이터를 전달합니다.

튜닝을 진행할 때는 반드시 가장 안쪽 루프인 ‘속도(Rate) 제어기’부터 시작하여 바깥쪽으로 진행해야 합니다. 속도 제어기가 제대로 튜닝되지 않으면, 상위 제어기인 위치 모드에서 기체가 갑자기 떨리거나 제자리를 완벽하게 유지하지 못하는 현상이 발생하게 됩니다. 따라서 모든 튜닝의 시작과 끝은 속도(Rate) 제어기에 달려있다고 해도 과언이 아닙니다.


2. 튜닝 전 필수 준비 사항: 에어모드 해제 및 기본 설정

본격적인 비행 튜닝에 앞서, QGroundControl(이하 QGC)에서 반드시 확인해야 할 몇 가지 사전 설정이 있습니다.

① 에어모드(Airmode) 비활성화

튜닝 중에는 반드시 에어모드(MC_AIRMODE)를 비활성화(Disabled)해야 합니다. 에어모드는 스로틀이 0인 상태에서도 자세를 유지하게 해주는 유용한 기능이지만, 튜닝이 덜 된 불안정한 기체에서는 과도한 진동으로 인해 기체가 하늘로 솟구치는 오작동을 유발할 수 있습니다.

② 추력 곡선(Thrust Curve) 설정

모터에 들어가는 제어 신호와 실제 발생하는 추력 간의 선형성을 맞추기 위해 추력 곡선 값을 설정합니다.

  • 일반 PWM ESC 사용 시: 기본값인 0.3을 사용합니다.
  • DShot 등 RPM 기반 ESC 사용 시: 값에 1.0을 입력합니다 (RPM 기반은 이미 2차 곡선 형태의 추력을 가지므로 추가 튜닝이 필요 없습니다).

③ 고속 텔레메트리 연결

실시간 PID 튜닝 화면에서 그래프를 지연 없이 확인하려면, 대역폭이 좁은 일반 텔레메트리(예: 915MHz)보다는 Wi-Fi를 통한 고속 데이터 링크를 사용하는 것이 강력히 권장됩니다.


3. 실전 Rate 제어기 튜닝: QGroundControl 100% 활용하기

이제 기체를 이륙시킬 준비가 되었습니다. 넓고 안전한 장소에서 기체를 고도 모드(Altitude Mode)나 안정화 모드(Stabilized Mode)로 이륙시킨 후 안전한 고도(약 1~2m)에서 호버링합니다.

  1. QGC를 열고 [Vehicle Setup] > [PID Tuning] 메뉴로 진입합니다.
  2. 상단의 탭에서 **[Rate Controller]**를 선택합니다.
  3. 튜닝할 축으로 Roll을 먼저 선택합니다. (일반적으로 대칭형 쿼드콥터는 Roll과 Pitch의 게인 값이 거의 동일합니다).
  4. 화면 하단의 Start 버튼을 누르면 실시간으로 튜닝 그래프가 그려지기 시작합니다.

튜닝의 최종 목표는 조종기 스틱을 움직였을 때 생성되는 설정값(Setpoint, 목표치) 곡선을 기체의 실제 움직임인 반응(Response) 곡선오버슈트(Overshoot) 없이 최대한 빠르고 정확하게 따라가도록 만드는 것입니다.

3-1. 스텝 입력(Step-input) 부여하기

그래프의 반응성을 확인하기 위해서는 조종기의 Roll 스틱을 한쪽으로 끝까지 빠르게 ‘툭’ 치고 놓는 **스텝 입력(Step-input)**을 주어야 합니다. 이렇게 하면 그래프에 사각형 형태의 날카로운 펄스가 생성되며, 이에 대한 기체의 반응 곡선을 관찰하여 P, I, D 게인을 조절합니다.

3-2. P, I, D 게인의 역할과 조절 방법

P (Proportional, 비례 제어) 게인 조절: P 게인은 기체가 목표값에 얼마나 빠르고 즉각적으로 반응할지를 결정합니다.

  • 올려야 할 때: 기체의 반응이 너무 둔하거나 그래프 상에서 Response가 Setpoint를 한참 뒤늦게 따라간다면 P 값을 올립니다.
  • 내려야 할 때: P 값이 너무 높으면 고주파 발진(빠른 떨림)이 발생하며, 기체가 목표값을 뚫고 올라가는 오버슈트(Overshoot)가 발생합니다. 이 경우 값을 낮춥니다.

D (Derivative, 미분 제어) 게인 조절: D 게인은 P 게인으로 인해 발생하는 오버슈트와 진동을 ‘댐핑(Damping, 감쇠)’시켜 잡아주는 브레이크 역할을 합니다.

  • 올려야 할 때: P 게인을 올렸을 때 나타나는 오버슈트나 진동을 줄이고 싶을 때 사용합니다.
  • 내려야 할 때 (주의): D 게인은 센서의 노이즈를 증폭시키는 부작용이 있습니다. D 게인이 너무 높으면 모터가 불규칙하게 떨리며(Twitchy) 심한 발열이 발생합니다. 모터가 뜨거워지면 즉시 튜닝을 멈추고 D 게인을 낮춰야 합니다.

I (Integral, 적분 제어) 게인 조절: I 게인은 오차를 누적하여 지속적으로 발생하는 편차(Steady-state error)를 없애줍니다.

  • 올려야 할 때: 바람이 부는 환경 등에서 기체가 최종 목표값(Setpoint)에 끝내 도달하지 못하고 약간 모자란 채로 유지된다면 I 게인을 올립니다. 아크로(Acro) 모드에서 기체를 45도로 기울였을 때 원래 자세로 슬금슬금 돌아오려 한다면 I 값이 부족한 것입니다.
  • 내려야 할 때: I 게인이 너무 높으면 느리고 묵직한 진동(Slow oscillations)이 발생합니다.

3-3. Roll, Pitch, Yaw 순차 튜닝

Roll 축에 대해 P 게인을 올려 반응성을 극대화하고, D 게인을 살짝 올려 오버슈트를 잡아주며, 마지막으로 I 게인으로 미세 오차를 줄이는 작업을 마쳤다면 QGC의 [Save to Clipboard] 버튼을 눌러 Roll 게인을 복사합니다. 그 후 튜닝 축을 Pitch로 변경하고 **[Reset from Clipboard]**를 눌러 Roll과 동일한 값을 적용한 뒤, Pitch 축에 대해서도 스텝 입력을 주며 미세 조정을 진행합니다. 마지막으로 Yaw 축을 튜닝합니다. Yaw는 구조상 응답이 느리므로 D 게인은 보통 0으로 두고 P와 I 게인만 조절하여 튜닝합니다.


4. Attitude 제어기와 Velocity/Position 제어기 튜닝

Rate 제어기 튜닝을 완벽하게 마쳤다면 사실상 튜닝의 90%는 끝난 셈입니다.

자세(Attitude) 제어기 튜닝: 자세 제어기는 속도 제어기에 비해 튜닝이 훨씬 쉽습니다. QGC에서 [Attitude Controller] 탭으로 이동한 후, 안정화 모드(Stabilized mode)에서 비행하며 조종기 스틱을 움직여 봅니다. P 게인(MC_ROLL_P, MC_PITCH_P, MC_YAW_P)을 천천히 올리되, 만약 기체에 진동이나 오버슈트가 발생하기 시작하면 즉시 값을 낮춰줍니다. 대부분의 경우 기본값(Default)을 그대로 사용해도 훌륭한 비행 성능을 보여줍니다.

위치 및 속도(Velocity & Position) 제어기 튜닝: 외부 환경(바람 등)에서 기체의 위치를 얼마나 칼같이 유지할지를 결정합니다. 이 제어기를 튜닝할 때는 비행 모드를 **위치 모드(Position mode)**로 변경해야 합니다. QGC의 튜닝 화면에서 Simple position control 옵션을 체크하여 조종기 스틱 입력을 직접적인 스텝 입력으로 변환시킨 후, 상하좌우로 스틱을 강하게 튕기며 Rate 튜닝 때와 마찬가지로 목표값에 잘 도달하는지 확인합니다.


5. 마무리 및 다음 시리즈 예고

수고하셨습니다! 여러분은 방금 가장 까다로운 비행 제어기인 Rate PID를 실시간 데이터를 보며 완벽하게 튜닝해 내셨습니다. 이제 여러분의 드론은 마치 조종기와 한 몸이 된 것처럼 빠르고 단단하게(‘Locked-in’) 반응할 것입니다.

튜닝이 모두 끝났다면 잊지 말고 비활성화해 두었던 에어모드(MC_AIRMODE)를 다시 켜주시기 바랍니다!. 에어모드가 켜져 있어야 스로틀을 낮추며 급강하할 때도 안정적인 자세 제어가 가능합니다.

하지만 아직 끝이 아닙니다. 오늘 튜닝한 값들은 ‘호버링 추력(Hover Thrust)’ 구간에서는 완벽하게 작동하지만, 풀 스로틀(Full throttle)처럼 모터가 최대 출력으로 도는 구간에서는 예상치 못한 진동이 발생할 수 있습니다. 이를 해결하기 위해 다음 [시리즈 4: 고급 PID 튜닝 및 비행 최적화 (Advanced PID Tuning)] 편에서는 비선형 추력 곡선 보상 기법(THR_MDL_FAC)의 심화 내용과, PID 컨트롤러의 표준/병렬 아키텍처에 대해 더욱 깊이 파헤쳐 보겠습니다.

오늘의 성공적인 튜닝을 축하드리며, 다음 연구실 비행 테스트에서도 안전 비행하시길 바랍니다!


YouTube 강좌

재생

Author: maponarooo, CEO of QUAD Drone Lab

Date: March 6, 2026

Similar Posts

One Comment

  1. 안녕하세요. 너무 잘 보고 배우고있는 구독자입니다.
    먼저 이렇게 소중한 정보를 공유해주셔서 너무 감사하게 생각하고있습니다.
    질문이 있는데,
    추력곡선을 PWM ESC = 0.3, Dshot or RPM ESC = 1.0 으로 세팅하라고 하셨는데 “THR_MDL_FAC” 파라미터를 말하시는게 맞을까요?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다