Reading and Fixing the ArduPilot Throttle Hover Offset
ardupilottuninghover-throttlelog-analysisfleet-maintenance

Reading and Fixing the ArduPilot Throttle Hover Offset

LogHat Engineering TeamMarch 28, 20265 min read

Key Takeaway

Throttle hover offset in ArduPilot is MOT_THST_HOVER (0-1 fraction, typical 0.3-0.5). MOT_HOVER_LEARN = 2 enables persistent learning during stable hover. Read CTUN.ThO vs CTUN.ThH to confirm the learned value matches reality. Drift across flights signals payload change, worn props, or motor degradation.

TL;DR: The throttle hover offset in ArduPilot is the autopilot’s estimate of how much throttle the airframe needs to maintain altitude. The learned value lives in MOT_THST_HOVER (a fraction between 0 and 1; typical 0.3–0.5). It’s set automatically when MOT_HOVER_LEARN is enabled. If the learned value drifts from the true hover throttle, altitude-controlled modes feel sluggish or twitchy. Read CTUN.ThO against CTUN.ThH in your log to confirm whether the autopilot’s estimate matches reality.

Why hover throttle matters

Every altitude-controlled mode (AltHold, Loiter, PosHold, Auto, RTL, LAND) computes the throttle output as a feed-forward (hover throttle) plus a feedback correction for climb rate error. If the feed-forward is wrong, the feedback controller has to do all the work and the response feels delayed. If the feed-forward overshoots, the drone climbs unintentionally when you switch into AltHold.

The autopilot learns hover throttle in two ways: a brief calibration at first flight, or continuous learning during stable hover. MOT_HOVER_LEARN selects the mode:

  • 0 — learning disabled. Uses whatever value is stored in MOT_THST_HOVER.
  • 1 — learn only (don’t save). The autopilot adapts during flight but the value resets on next boot.
  • 2 — learn and save. The value updates persistently during steady hover; this is what you almost always want.

Reading the offset in the log

The CTUN message has both the commanded and the estimated hover throttle:

CTUN  TimeUS  ThI  ABst  ThO  ThH  DAlt  Alt  BAlt  DSAlt  SAlt  TAlt  DCRt  CRt
  • ThO — throttle output the autopilot is commanding right now.
  • ThH — the calculated hover throttle estimate the autopilot is currently using.

During steady hover (no climb or descent commanded), ThO and ThH should agree closely. If ThO sits noticeably above ThH while altitude is stable, the autopilot’s estimate is too low; if ThO sits below ThH, the estimate is too high. Plot both during a 30-second stable hover to see whether the offset matches reality.

Confirming it in MAVExplorer

MAV> graph CTUN.ThO CTUN.ThH
MAV> graph CTUN.DAlt CTUN.Alt
MAV> param show MOT_THST_HOVER MOT_HOVER_LEARN

The parameter dump tells you what value the firmware was carrying at takeoff and whether learning was enabled.

Why the offset drifts

  1. Payload change. A drone tuned at one weight will hover at a different throttle with extra payload. MOT_THST_HOVER values around 0.35 mean you have headroom; values approaching 0.65 mean you’re close to maximum thrust capacity and adding more payload risks saturation.
  2. Pack ageing. A worn pack delivers less voltage under load; the autopilot needs more throttle for the same thrust. Re-learn after a battery change.
  3. Prop replacement. Different props of the same size can have different thrust constants. Re-learn after any prop change.
  4. Altitude effects. Flying at high elevation (less air density) raises hover throttle. A tune learned at sea level will mis-feed at 3000 m elevation.
  5. Damaged prop. A chipped prop produces less thrust than expected; the autopilot raises throttle to compensate; MOT_THST_HOVER climbs over flights as the autopilot learns the higher requirement. Watch this trend across flights for a fleet preventive-maintenance signal.

Reading MOT_THST_HOVER as a fleet health indicator

For an operator running multiple identical airframes, the MOT_THST_HOVER value tells you a lot:

  • Values below 0.3 — the airframe is oversized for the payload, plenty of authority.
  • Values between 0.3 and 0.5 — typical for a well-matched build at design weight.
  • Values between 0.5 and 0.65 — getting close to thrust limits; expect reduced climb rate authority, less ability to recover from wind disturbances.
  • Values above 0.65 — flight controller is saturating motors at hover; you have no safety margin. Reduce payload, swap to higher-thrust motors, or fly only in calm conditions.

Across a fleet, a single drone’s MOT_THST_HOVER climbing relative to its siblings is a maintenance flag — usually a worn prop, an underperforming motor, or a marginal ESC.

Fixing a stuck or wrong offset

  1. Confirm MOT_HOVER_LEARN = 2. Most issues are from this being set to 0 historically.
  2. Reset the learned value if it’s clearly wrong. Set MOT_THST_HOVER manually to a sensible starting value (0.4 if you don’t know your airframe; otherwise the average from previous flights), then take off and let the autopilot relearn in stable hover.
  3. Verify in the next log. Plot CTUN.ThO versus CTUN.ThH; they should agree within a few percent during steady hover.
  4. For payload-variable operations, accept the learned value won’t be ideal for both extremes. Tune for the heaviest payload; the lighter configurations will feel slightly soft in AltHold but won’t saturate.

When the issue isn’t the hover offset

  • Untuned PIDs. If the altitude controller is over-reacting to climb-rate error, that’s a PSC_ACCZ_* or PSC_VELZ_* tune problem, not a hover-throttle issue.
  • Baro drift. If BARO.Alt reports a different altitude than the drone is at (sun on the sensor, ground effect), the autopilot adjusts throttle for a phantom altitude error. See our BARO glitch post.
  • Wind. Vertical wind components (downdrafts) require the autopilot to increase throttle beyond the learned hover — that’s correct behaviour, not a hover-offset bug.

When LogHat helps — and when it doesn’t

LogHat plots CTUN.ThO versus CTUN.ThH on the throttle envelope panel and surfaces the takeoff value of MOT_THST_HOVER in the parameter snapshot. For fleet operators, we trend the value across flights of the same airframe and flag drift outside the expected band. What we can’t do is decide whether the payload was the design payload — that needs you to record the configuration.

About the author

LE

LogHat Engineering Team

The LogHat engineering team — drone-systems engineers who build and operate the LogHat flight analytics platform. Posts in this byline are written and reviewed by team members working on the parsers, analysis engine, and Vector AI that the post describes.

Tagged

ardupilottuninghover-throttlelog-analysisfleet-maintenance

Try LogHat

Analyze your flight logs in seconds

Upload a .bin, .tlog, .log, or .ulg file. Get AI crash analysis, 3D replay, and forensic PDF reports instantly.

Try LogHat Free