Skip to content

Flight Parameter Tuning ​

When tuning a multirotor, the first goal is a stable airframe with no oscillation — everything after that builds on it.

  • Put the aircraft in STABILIZE.
  • Raise the throttle slowly until it lifts 2~3 m, and watch how pitch and roll respond.

WARNING

Tuning flights are dangerous. They are for professionals only, and the operator carries the risk; this page is technical reference, nothing more. If you cannot accept that risk, buy a ready-built drone instead.

If the airframe starts shaking or vibrating during the process, cut the throttle immediately and abort the takeoff or land. Finish the pre-tuning setup before you touch the PIDs.

Default PID experience notes ​

NOTE

The Stabilize (angular rate) P sets how fast and how hard the attitude is corrected; the rate P sets how steady it flies. Stabilize P strongly affects the rate P. Unless you need more agility, want a different feel at the sticks, or the rate P has hit the system's limit, leave the angular rate P alone. The larger it is, the better the wind rejection. In ordinary tuning you work on the rate PID in the red box first.

TIP

The defaults suit small aircraft. Micro and light machines need a lower rate P; mid-to-large machines usually need a higher one. Within one airframe class: more power means a lower rate P; softer arms or wings mean a higher D to suppress the vibration; a higher angular rate P means the matching rate P goes down.

  1. For wheelbase 250 and below, if it shakes as soon as it leaves the ground, start from:
AxisParameterDefaultSuggested start (lower P to cut the shake)
RollATC_RAT_RLL_P0.1350.07
RollATC_RAT_RLL_I0.1350.07
RollATC_RAT_RLL_D0.00360.0016
PitchATC_RAT_PIT_P0.1350.07
PitchATC_RAT_PIT_I0.1350.07
PitchATC_RAT_PIT_D0.00360.0016
YawATC_RAT_YAW_P0.180Adjust to suit
YawATC_RAT_YAW_I0.018Adjust to suit
YawATC_RAT_YAW_D0.000Adjust to suit
  1. On large heavy-lift drones, tilt the motors outward by 3° for better yaw stability, or more if the airframe needs it, so the heading does not drift on takeoff. (Rule out magnetometer and transmitter stick issues first.)
AxisParameterDefaultSuggested start (raise it)
YawATC_RAT_YAW_P0.1800.5 or higher

Multirotors with a low thrust-to-weight ratio and weak power need higher default PI values:

AxisParameterDefaultSuggested start (raise it)
RollATC_RAT_RLL_P0.1350.25
RollATC_RAT_RLL_I0.1350.25
PitchATC_RAT_PIT_P0.1350.25
PitchATC_RAT_PIT_I0.1350.25
YawATC_RAT_YAW_P0.1800.5 or higher
  1. Airframes with flexible arms or wings

A soft airframe shakes at high frequency. Dropping P alone makes the attitude response sluggish and the body wobble. Raise D instead — it suppresses the vibration while keeping the response.

Note: the proper fix is to stiffen the structure.

AxisParameterDefaultSuggested start (raise D to cut the shake)
RollATC_RAT_RLL_D0.00360.0040 or higher
PitchATC_RAT_PIT_D0.00360.08 or higher

WARNING

These are values from experience, meant for the first test flight only. To match a specific airframe properly, work through the rate PID guide using how it actually flies.

Rate PID tuning guide ​

TIP

The order we recommend for those new to this: set rate P, then rate I (normally I = P), then adjust D for the conditions (lower D if the aircraft feels stiff, raise it if it buzzes). After the test flight, review the log and refine.

TermWhat it doesWhen wrongWhich way to moveStep size
P (rate proportional)Speed and strength of the error correctionToo small: slow rate response, weak feel, attitude lags
Too large: high-frequency buzz, overshoot
Raise it if the body wallows or power feels weak; lower it if it buzzes0.01~0.04
I (rate integral)Corrects accumulated errorToo small: error is never removed and keeps building
Too large: extra small corrections, bounce-back, low-frequency swing
It tolerates a wide range — normally keep it equal to PMove gradually toward P
D (rate derivative)Predicts and damps error, kills high-frequency buzzToo small: buzz cannot be suppressed
Too large: sluggish, stiff response
Raise it when it buzzes, lower it when it feels slow0.0002~0.0004

Typical symptoms and what to do

AxisCore parameter (ArduPilot)Symptom and treatment
Roll / pitchATC_RAT_P (rate P)Slow wallowing, weak response → raise P
Roll / pitchATC_RAT_P / D (rate P, rate D)High-frequency buzz, overshoot → lower P or raise D
Roll / pitchATC_RAT_I (rate I)In normal use set it equal to rate P
YawATC_RAT_YAW_P (rate P)Yaw will not hold, spins, track drifts → raise P
YawATC_RAT_YAW_P (rate P)Yaw too aggressive, oscillates → lower P

NOTE

Tuning is really about matching the ratio between P and D so the aircraft responds quickly yet flies steadily. In normal conditions the FLIT, FLTD and the gyro and accelerometer cutoff frequencies come from the parameters generated by the pre-tuning setup. If the motors screech, try lowering the gyro cutoff frequency.

Stabilize P (angular rate) loop ​

Outer loop (Stabilize): Stabilize P is your stick sensitivity — how much angular rate is commanded to correct an attitude error.

NOTE

Normally leave Stabilize P alone. If you want a livelier feel at the sticks, this is the parameter to change, because it strongly affects how rate P must be matched; the higher it goes, the lower rate P has to be, and too high makes rate P impossible to match.

If you do want more sensitivity, raise it in 20% steps until the airframe starts to shake, then back off 20%.

Vertical (throttle) PID tuning ​

  • Set MOT_HOVER_LEARN to 2 to enable hover throttle learning.

TIP

If the aircraft bobs up and down in AltHold, halve the position and velocity loop gains: PSC_POSZ_P(PSC_D_POS_P) and PSC_VELZ_P(PSC_D_VEL_Z). If AltHold is steady with no bobbing, leave the altitude parameters alone — the defaults work for most airframes.

  • Take off in STABILIZE, climb to 5 m, then switch to AltHold (be ready to go back to Stabilize if it loses altitude control).
  • If the motors buzz or the throttle surges, lower PSC_POSZ_P and PSC_VELZ_P by 30% each time.
  • Hover for at least 30 seconds so the hover throttle value converges, then land and disarm.
  • Read MOT_THST_HOVER and set the parameters like this:
PSC_ACCZ_P(PSC_D_ACC_P) = 1.5 × MOT_THST_HOVER
PSC_ACCZ_I(PSC_D_ACC_I) = 2 × PSC_ACCZ_P(PSC_D_ACC_P)
ATC_THR_MIX_MAX = 0.9  // applies when MOT_THST_HOVER < 0.3
  • Take off in STABILIZE again, climb to 5 m and switch to AltHold. Once altitude hold is working, you can take off directly in AltHold (it needs over 60% throttle output to lift off).
  • Next, tune the Loiter control loop.

TIP

After the hover throttle learning run with no payload, set MOT_HOVER_LEARN back to 0 to disable it. Otherwise flying with a payload rewrites the value and the throttle starts surging.

NOTE

Most airframes need no changes to the altitude parameters at all.

Losing height in fast forward flight ​

This is mostly the controller's exposed barometer picking up airflow in flight, which makes the altitude reading wander. Options:

Option 1: fix the cause (physical shielding)

ApproachWhat to doHowCautions
Block the airflowFit a cover over the controllerPhysically shields the barometer from direct airflow1. Do not seal it completely — leave vent holes; 2. Keep the sensor ventilated for heat; 3. Do not block any other ports

Option 2: weight the altitude sources down

ApproachParameterWhat it doesRecommendedWhen to use
Add GPS altitude correctionEK3_OGN_HGT_MASKWhen the primary height source is not GPS, uses GPS height to correct its offset and datum drift over timeSet to 1 when GPS is trustworthy (RTK, for example)Barometric altitude has a slight offset and the GPS signal is solid
Adjust sensor weightingEK3_ALT_M_NSEThe RMS noise of the height measurement — larger values lower the barometer's weight and raise that of GPS and the accelerometerRaise it when wind disturbance is significantAirflow through the barometer makes altitude readings jump

Option 3: change the primary altitude source (pick one)

ApproachParameterWhat it doesRecommendedPrecondition
Switch the primary barometerBARO_PRIMARYWhich barometer the controller prefersPick the one least exposed to airflowThe controller has more than one barometer
Switch the vertical position sourceEK3_SRC1_POSZSets the EKF3 vertical position (height) sourceSet to 3 (GPS as the height source) when using RTKAn RTK module is fitted and its height data is trustworthy

Option 4: wind estimation compensation

Wind estimation compensation guide

Loiter parameters ​

Loiter (position loop) PID tuning ​

TIP

Finish the pitch and roll PID tuning before you start on the Loiter position loop. Some wobble and buzz that never showed in Stabilize or AltHold appears in Loiter. Most airframes need no changes to the position loop parameters.

ParameterCore functionHow it worksTuning and troubleshooting
PSC_POSXY_PPosition loop P (horizontal)Converts the gap between actual and target position into a desired horizontal velocity for the velocity controller — the core position parameter, setting how fast position error is answered1. Too small: it will not hold position, drifts
2. Too large: correction too strong, it shakes or overshoots when holding a point
3. Regular circular drift is almost always compass calibration or GPS, not this parameter
PSC_VELXY_PVelocity loop P (horizontal)Converts the gap between desired and actual velocity into a target acceleration — sets how hard a velocity error is corrected right away1. Too small: velocity lags, turns respond late, which shows up as position drift
2. Too large: over-aggressive correction, velocity overshoot, the airframe darts
PSC_VELXY_DVelocity loop D (horizontal)Damps short-term velocity changes during position control, smoothing the response1. Too small: cannot damp velocity swings; gusty wind makes it shake or dart
2. Too large: over-damped, turns and speed changes feel stiff and lag
PSC_VELXY_IVelocity loop I (horizontal)Corrects long-term steady-state velocity error1. Too small: a fixed velocity offset never goes away
2. Too large: integral winds up fast and overshoots

TIP

Order: PSC_POSXY_P first (the foundation), then PSC_VELXY_P (the core of the velocity loop), then match PSC_VELXY_D and PSC_VELXY_I.

Braking ​

If the airframe rocks badly or drops altitude when you brake in Loiter, check these:

ParameterNotesRemarks
MOT_THST_EXPOThrottle curve thrust compensationLower values ease the rocking and roll-over risk when braking at low speed; 0~0.2 is suggested for power sets or FOC drives
Loit_BRK_ACCELLoiter braking accelerationHigher values brake harder and faster in Loiter
Loit_BRK_JERKBraking jerkHigher values make the braking force change more sharply; twice Loit_BRK_ACCEL is recommended
Loit_BRK_DELAYBraking delayHow long it coasts after the stick centres before braking; higher values smooth the transition and delay the brake
LOIT_ACC_MAXMaximum acceleration for position error correction-
LOIT_ANG_MAXMaximum tilt angle in Loiter-

Loiter handling ​

ParameterNotesRemarks
PSC_JERK_ZVertical jerkControls how fast vertical acceleration changes
PSC_ACCEL_ZMaximum vertical accelerationControls how quickly vertical speed changes
PILOT_SPEED_DN/UPMaximum manual climb and descent speed-

Softer, smoother stick feel ​

Beginners, and anyone used to consumer drones, can keep the airframe gentle even at full stick by limiting the commanded acceleration:

ParameterUnitNotes
ATC_RATE_P_MAX°/sMaximum pitch rate
ATC_RATE_R_MAX°/sMaximum roll rate
ATC_RATE_Y_MAX°/sMaximum yaw rate

TIP

Set these to taste — the smaller the value, the gentler and slower the response. 30 °/s is the usual recommendation.

Tilt angle limits (optional) ​

For almost everyone a 30° maximum tilt does the job; change it if your work needs more.

ParameterUnitNotes
ANGLE_MAXdegreesMaximum tilt for all modes
PSC_ANGLE_MAXdegreesMaximum tilt in position-hold modes; 0 means use ANGLE_MAX
LOIT_ANGLE_MAXdegreesMaximum commanded tilt in Loiter; 0 means two thirds of ANGLE_MAX

TIP

A larger limit makes turns and translational acceleration quicker, but holding attitude gets harder and it asks more of both the controller's algorithms and the pilot.

Throttle PID gain ​

Even a well-tuned multirotor can briefly lose attitude control when the throttle is slammed. Fast throttle-up or throttle-down easily produces pitch or roll excursions, and it shows up worst on high thrust-to-weight racing quads. ATC_THR_G_BOOST helps.

When ATC_THR_G_BOOST is non-zero, a fast throttle change adds dynamic gain to the PID loops, up to a maximum of 1. With it enabled, rate PID gains are doubled and angular rate PID gains rise with them; smaller values give less extra gain.

WARNING

This feature has not been fully tested. Enable it with care.