[PX4 Tuning Series 7] Land Detector Configuration: The Essential Guide for a Perfect Flight Conclusion
Hello once again to all university students, graduate students, and researchers dedicating yourselves to aerospace engineering and autonomous drones!
We have finally arrived at the concluding chapter of our extensive PX4 tuning guide. From [Series 1] to [Series 6], we have successfully eliminated physical hardware vibrations, optimized sensor filters through high-rate logging, performed manual and automatic PID tuning, and even sculpted elegant S-Curve trajectories. Your drone is now undeniably capable of achieving flawless flight performance in the air.
However, the true completion of any flight lies in a safe landing. No matter how perfectly a vehicle flies, catastrophic issues can arise if the flight controller fails to recognize the exact moment it touches the ground. If it fails to detect the ground, the controller may try to correct its attitude against the floor, spooling up the motors and causing the drone to violently flip over. Conversely, if it falsely detects a landing while still descending in the air, it may turn off the motors and plummet to the ground.
To prevent these disasters, PX4 utilizes a critical dynamic vehicle model known as the Land Detector. Today, in Series 7, we will explore the principles behind the land detector—which represents key vehicle states from initial ground contact through to a confirmed landing—and dive deep into the essential parameters you must tune for perfect landing behavior.
1. Understanding the 3-Stage State Machine of the Land Detector
The land detector does not simply use a binary “landed or not landed” logic. To prevent false triggers from sensor noise or sudden wind gusts, the multicopter must sequentially progress through three different, strict states.
In order to proceed to the next state, each specific condition must be continuously true for 300ms. Furthermore, if your vehicle is equipped with a distance sensor (like a LiDAR) but the distance to the ground is currently unmeasurable (e.g., out of range), this trigger time is safely increased by a factor of 3 (900ms). If even one condition fails during this time, the land detector drops out of the current state immediately.
Stage 1: Ground Contact
This is the first stage where the flight controller suspects it might have touched the ground. The conditions for this state include:
- No vertical movement: Vertical velocity is below
LNDMC_Z_VEL_MAX. - No horizontal movement: Horizontal velocity is below
LNDMC_XY_VEL_MAX. - Low Thrust: The current thrust is significantly lower than hover thrust (specifically, lower than
MPC_THR_MIN+ (hover throttle –MPC_THR_MIN) * 0.3). - Intent to Descend: If flying in a height-rate controlled mode (like Position or Altitude mode), the vehicle must have a deliberate vertical velocity setpoint commanding it to descend.
- Distance Sensor (Optional): If a distance sensor is active, the current distance to the ground must be below 1 meter.
👉 Controller Reaction: If the vehicle is in Position or Velocity control and ground contact is detected, the position controller will immediately set the thrust vector along the body X-Y axis to zero. This crucial step prevents the drone from sliding or skidding horizontally on the ground.

Stage 2: Maybe Landed
Once Ground Contact is confirmed, the system verifies if the drone is truly resting and stable. The conditions are:
- All conditions of the “Ground Contact” state remain true.
- Not Rotating: The vehicle’s angular rotation is below
LNDMC_ROT_MAX. - Even Lower Thrust: The thrust has dropped even further (
MPC_THR_MIN+ (hover – min) * 0.1). - No Freefall: The system confirms the drone is not in a freefall state.
👉 Controller Reaction: When “Maybe Landed” is detected in Position or Velocity control, the position controller sets the entire thrust vector to zero, dropping motor output to the absolute minimum.
Stage 3: Landed
If all conditions of the “Maybe Landed” state remain true for the required duration, the flight controller officially transitions to the Landed state.
2. The Fatal Flaw: The Importance of Hover Throttle (MPC_THR_HOVER)
The most common and dangerous mistake made by beginner researchers during landing configuration is leaving the Hover Throttle (MPC_THR_HOVER) parameter at its default value of 50% (0.50).
Modern FPV racers or large research camera drones flying without their heavy payloads are often highly overpowered, meaning they might hover at just 30% to 35% throttle. What happens if MPC_THR_HOVER is still set to 50% on these vehicles?
⚠️ The “Mid-air Twitching” Phenomenon When you lower your RC stick to descend in Position or Altitude mode, the drone must reduce its motor output below its physical hover throttle (e.g., dropping from 35% to 20%) to lose altitude. However, because the flight controller believes the hover throttle is 50%, it sees a current output of 20% and an “intent to descend.” Consequently, the flight controller gets confused and incorrectly detects “Ground Contact” or “Maybe Landed” while the drone is still high in the air!
When this false detection happens, the flight controller cuts the thrust. The drone begins to drop rapidly, the controller realizes the altitude error is growing, and it immediately spikes the motors back up to recover. This terrifying cycle causes the vehicle to aggressively “twitch” (turn down the motors, and then immediately turn them back up) during descent.
✅ The Solution: To ensure accurate altitude control and correct land detection, you must analyze your flight logs, find the actual throttle percentage required to hover your specific vehicle, and set it properly.
# Example: Correcting the hover throttle for an overpowered research drone
MPC_THR_HOVER = 0.35 # Set to the actual physical hover throttle (Default is 0.50)
3. Fine-tuning Landing Parameters in QGroundControl
Once your hover throttle is accurate, you can fine-tune the remaining multicopter landing parameters in QGroundControl (QGC). These parameters all share the LNDMC_ prefix.
① Velocity Threshold Tuning (LNDMC_Z_VEL_MAX, LNDMC_XY_VEL_MAX)
If you are flying on a very windy day or if your GPS/Optical Flow sensors are particularly noisy, the sensors might report that the drone is moving at 0.5 m/s even when it is sitting perfectly still on the ground. Because of this perceived movement, the drone will fail the Ground Contact conditions and refuse to shut off its motors. If your drone takes too long to register a landing after touching down, you should slightly increase these thresholds.
LNDMC_Z_VEL_MAX: The maximum vertical velocity allowed to still be considered landed.LNDMC_XY_VEL_MAX: The maximum horizontal velocity allowed to still be considered landed.
② Autonomous Landing Crawl Speed (MPC_LAND_CRWL)
When performing an autonomous mission or Return-to-Launch (RTL), this parameter dictates the vertical speed applied in the very last stage of landing (if a distance sensor is present and working). If you are carrying expensive, fragile research equipment and need the softest possible touchdown, lower this value. Note: It must be set larger than LNDMC_Z_VEL_MAX, or the drone will never trigger the land detector.
③ Minimum Throttle (MPC_THR_MIN)
This is the overall minimum throttle of the system. It must be set high enough to ensure the motors do not completely stop during flight, enabling a stable and controlled descent.
④ Auto-Disarming (COM_DISARM_LAND)
For safety, the land detector automatically disarms the vehicle upon landing.
- The
COM_DISARM_LANDparameter specifies the exact number of seconds after a confirmed “Landed” state that the system should automatically shut off the motors (disarm). - It is typically set around 2 seconds. While you can turn off auto-disarming by setting this parameter to
-1, we highly recommend keeping it enabled to prevent nasty accidents on the ground.
# Example: Recommended parameter configuration for a safe and stable landing
LNDMC_Z_VEL_MAX = 0.50 # Compensating for vertical sensor noise
LNDMC_XY_VEL_MAX = 1.0 # Compensating for horizontal sensor noise
MPC_LAND_CRWL = 0.3 # A gentle 0.3 m/s crawl speed right before touchdown
COM_DISARM_LAND = 2.0 # Auto-disarm exactly 2 seconds after landing confirmation
Conclusion: Wrapping Up the [PX4 Tuning Series]
To all the university students, graduate students, and researchers who have followed along—congratulations and fantastic work!
Today, we placed the final piece of the puzzle by mastering the state machine of the Land Detector. We uncovered why the terrifying mid-air twitching phenomenon occurs during descent and learned how to resolve it permanently by correctly setting MPC_THR_HOVER.
Through this 7-part series, you have conquered the entire spectrum of UAV control engineering in PX4. You started by eliminating raw physical vibrations, advanced through high-rate data logging to set up complex notch and low-pass filters, mastered both manual and auto-tuning of the PID rate and attitude loops, sculpted beautiful Jerk-limited S-Curve flight trajectories, and finally, configured a flawless autonomous landing sequence.
We sincerely hope that the countless hours you spent in the lab puzzling over flight logs and mysterious drone behaviors have been somewhat alleviated by the logical, step-by-step methodologies presented in this series. Your drone is no longer just a collection of parts; it has been reborn as an incredibly reliable, perfectly tuned flight platform ready to execute your most critical research missions.
The sky is vast, and the research possibilities ahead of you are endless. Thank you so much for your passion and for joining us throughout the [PX4 Tuning Series]. We wish you the utmost safety, success, and groundbreaking discoveries in all your future flight tests and academic papers!

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