A reader recently messaged us about a 50kg takeoff-weight multi-rotor that oscillates left and right in Position Hold mode — and the oscillations are getting worse. This is a classic case of divergent oscillation: the flight controller is “over-correcting” each time, making things worse instead of better. At Aomway, we’ve seen this pattern many times with heavy-lift industrial drones, and the fix follows a systematic approach.
What Causes Divergent Oscillation in Heavy-Lift Multirotors?
The root cause is almost always in the PID parameters — specifically, the P (proportional) value is too high or the D (damping) value is too low. With 50kg-class heavy drones, the higher vibration levels also degrade IMU sensor accuracy, compounding the problem. In Position Hold mode, both the position loop and velocity loop must be tuned correctly, or oscillation cascades through the system.
Core principle: Tune inner loops first, then outer loops. Mechanical before electrical. Learn more about industrial drone optimization at Aomway.
Step 1: Mechanical and Vibration Inspection
Before touching any PID values, verify that your mechanical structure is solid and vibrations are within acceptable limits. This is the most commonly skipped step — and the most important for heavy-lift builds.
- Check every motor mount and arm connection for tightness
- Use Mission Planner to check vibration data: AccX/AccY should be -3 to +3, AccZ should be -15 to -5
- If vibration exceeds limits, add FC vibration dampening and re-balance propellers
Step 2: Inner Loop (Angular Rate Loop) Tuning
This is the critical parameter group that resolves oscillation. All relevant parameters start with ATC_RAT_.
| Axis | Parameter | Action | Adjustment |
|---|---|---|---|
| Roll | ATC_RAT_RLL_P | Reduce | 20-30% of current |
| Roll | ATC_RAT_RLL_D | Increase | 50-100% of current |
| Roll | ATC_RAT_RLL_I | Keep | No change |
| Pitch | ATC_RAT_PIT_P | Reduce | 20-30% of current |
| Pitch | ATC_RAT_PIT_D | Increase | 50-100% of current |
| Pitch | ATC_RAT_PIT_I | Keep | No change |
Key insight: P value controls response speed — too high causes overshoot oscillation. D value provides damping to suppress oscillation. For 50kg heavy drones, P needs to be relatively low and D relatively high due to the larger moments of inertia.
Step 3: Outer Loop (Angle Loop) Tuning
Only tune the outer loop after the inner loop is stable. Parameters start with ATC_ANG_.
| Parameter | Action | Adjustment |
|---|---|---|
| ATC_ANG_RLL_P | Reduce | 10-20% |
| ATC_ANG_PIT_P | Reduce | 10-20% |
Step 4: Position Hold Mode Parameters
Position Hold involves the position control loop. Parameters start with PSC_.
| Parameter | Default | Suggested | Action |
|---|---|---|---|
| PSC_POSXY_P | 2.0 | 1.5 | Reduce moderately |
| PSC_VELXY_P | Varies | Reduce | Reduce moderately |
| LOIT_ACC_MAX | 500 | 300 | Reduce |
| LOIT_BRK_ACCEL | Varies | Reduce | Reduce moderately |
Step 5: Filter Tuning for Heavy Drones
Heavy-lift drones generate significant vibration, requiring enhanced filtering:
- INS_ACCEL_FILTER: Reduce from default (lower cutoff frequency = more filtering)
- INS_GYRO_FILTER: Also reduce from default
Step-by-Step Tuning Workflow
- Safety first: Test in an open field with plenty of altitude margin
- Back up parameters: Save current configuration via Mission Planner
- Single-variable adjustment: Change only one parameter at a time, by 10-20%
- Test fly immediately: Observe improvement after each change
- Log analysis: Enable IMU logging, analyze vibration and attitude data in Mission Planner
- Iterate: Fine-tune based on test results
Alternative: Auto-Tune
For 50kg-class drones, Auto-Tune CAN be used, but the pilot must remain vigilant:
- Assign a 2-position switch on your transmitter to the AutoTune function
- Take off in AltHold mode to 5-10 meters altitude
- Flip the switch — the drone will automatically execute oscillation maneuvers to learn optimal parameters
- Save parameters once complete
Important: Auto-Tune requires the drone to be basically flyable and must be performed in open, wind-free conditions.
Special Considerations for 50kg Heavy-Lift Drones
| Factor | Impact | Recommendation |
|---|---|---|
| Response Delay | High inertia = slower response | Keep P values conservative |
| Vibration | Most critical factor | Prioritize vibration dampening |
| Power Redundancy | Motors/ESCs under high load | Ensure adequate power margin |
| Safe Testing | Large mass = high risk | Test in Stabilize mode first, then Position Hold |
FAQ
Why does my 50kg drone oscillate more in Position Hold than Stabilize mode?
Position Hold mode adds the position control loop (PSC_POSXY_P) on top of velocity and angle loops. If any of these cascaded loops is too aggressive, oscillation amplifies through the system. Always tune inner loops (rate → angle → velocity → position) in sequence.
What are normal vibration levels for a 50kg multirotor?
Acceptable ranges are AccX/AccY: -3 to +3 and AccZ: -15 to -5. If readings exceed these, add FC vibration dampening and re-balance propellers before attempting PID tuning.
Should I use Auto-Tune for heavy-lift drones?
Yes, Auto-Tune works on 50kg-class drones, but the safety pilot must stay alert. Perform it in open, wind-free conditions at 5-10m altitude. The drone will oscillate during the process — this is normal, but be ready to abort if oscillation becomes excessive.
What is the right P/D ratio for heavy drones?
For 50kg-class drones, the P/D ratio should favor higher D values compared to smaller drones. As a starting point, cut P by 20-30% and double D by 50-100% from default ArduPilot values. The higher inertia demands stronger damping.
How do I know if the inner loop is stable before tuning the outer loop?
In Stabilize mode, the drone should hold attitude crisply without overshoot when you release the sticks. If it wobbles or “bounces back” after a sharp input, the inner loop needs more work. Use Mission Planner log analysis to confirm rate tracking is clean.
Any questions pls contact: [email protected]
