MAVLINKHUD

Overview

The TKOFF parameter group configures the Autonomous Takeoff sequence for ArduPlane and QuadPlane.

Automating the takeoff ensures a consistent climb-out and prevents pilot errors during the most vulnerable stage of flight.

Key Concepts

1. Launch Acceleration (TKOFF_THR_MINACC)

(Plane) For hand-launched or bungee-launched planes, the motor shouldn't start until the plane is physically thrown.

  • Threshold: The motor starts only after the IMU detects an acceleration spike (m/s²) exceeding this value.

2. Takeoff Pitch (TKOFF_LVL_PITCH)

The target pitch angle during the initial climb-out.

  • Recommendation: Usually 10-15 degrees for most airframes.

3. Transition Altitude (TKOFF_ALT)

The height at which the takeoff sequence is considered "Complete," and the autopilot switches to the first mission waypoint or its standard navigation logic.

Parameter Breakdown

  • TKOFF_THR_MAX: Maximum throttle allowed during takeoff.
  • TKOFF_DIST: (Rover/Plane) Distance from home to consider the takeoff complete.
  • TKOFF_FLAP_PCNT: Percentage of flaps to deploy during takeoff.

Integration Guide

  • Hand Launch: Set TKOFF_THR_MINACC = 15 and TKOFF_THR_DELAY = 2 (0.2s) to ensure the motor doesn't bite your hand as you throw.

Developer Notes

  • Library: ArduPlane/mode_takeoff.cpp.

TKOFF_ACCEL_CNT

Default 1
Range 1 10

Takeoff Throttle Acceleration Count (TKOFF_ACCEL_CNT)

Description

TKOFF_ACCEL_CNT is the "Confirmation Code" for your launch trigger. It enables a feature often called "Shake-to-Arm."

Instead of a single throw triggering the motor, you can require multiple forward and backward jolts. This is extremely useful for preventing accidental motor starts caused by bumping the drone or walking with it in windy conditions.

  • 1 (Default): A single forward throw triggers the motor.
  • 2+: Requires multiple deliberate forward/backward shakes to start the motor.

The Engineer's View

Defined in ArduPlane/takeoff.cpp.
The code maintains a counter of "acceleration events." An event is recorded every time the X-axis acceleration exceeds TKOFF_THR_MINACC. To prevent false counts from vibration, events must alternate direction (Forward/Backward) or happen within a specific time window.

// ArduPlane/takeoff.cpp
if (g2.takeoff_throttle_accel_count <= 1) {
    if (xaccel < g.takeoff_throttle_min_accel) {
        goto no_launch;
    }
} else {
    // Advanced shake detection logic
    bool odd_event = ((takeoff_state.accel_event_counter & 1) != 0);
    // ...
}

Tuning & Behavior

  • Default Value: 1.
  • Recommendation: Set to 2 or 3 if you are launching in high-vibration environments or from a moving vehicle.
  • Usage: If set to 2, you must give the plane a firm forward "pump" or shake before the final throw to arm the throttle.

TKOFF_ALT

m
Default 50
Range 10 1000

Takeoff Target Altitude (TKOFF_ALT)

Description

TKOFF_ALT defines the "Destination Height" for an automatic plane takeoff.

When you trigger a takeoff mission (e.g., via a catapult or hand-launch in AUTO mode), the plane will climb at a steady angle until it reaches this specific height. Once this altitude is reached, the takeoff is considered complete, and the autopilot will move to the next waypoint in your mission.

  • Default Value: 50 meters.
  • Units: Meters above the takeoff point.

The Engineer's View

Defined in ArduPlane/mode_takeoff.cpp.
This parameter is used by the ModeTakeoff state machine. While the altitude is below TKOFF_ALT, the system enforces specific pitch and roll limits (TKOFF_LVL_ALT, TKOFF_LVL_PITCH) to ensure a safe, stable climb-out.

// ArduPlane/mode_takeoff.cpp
AP_GROUPINFO("ALT", 1, ModeTakeoff, target_alt, 50),

The climb logic is typically handled by the TECS (Total Energy Control System), which manages throttle and pitch together to maintain the requested climb rate and airspeed.

Tuning & Behavior

  • Default Value: 50 m.
  • Effect of Increasing: The drone spends more time in the "Takeoff" protected state. Safer for clearing tall trees or buildings around your launch site.
  • Effect of Decreasing: The drone transitions to mission navigation sooner.

Use Case Recommendations

  • Small Field (Tight Space): Increase to 100m. Ensure you have plenty of height before the drone tries to bank and turn toward the first waypoint.
  • Large Open Area: Keep at 50m. Standard value provides a safe buffer for most airframes.
  • Long-Range Mapping: Set to 50m. Allows the drone to get on track as quickly as possible to maximize efficiency.

TKOFF_DIST

m
Default 200
Range 0 1000

Takeoff Completion Distance (TKOFF_DIST)

Description

TKOFF_DIST is a secondary exit condition for a takeoff. It ensures the drone transitions to its normal mission path even if it hasn't reached its target altitude (TKOFF_ALT) yet, but has flown a safe distance away from the launch site.

This is useful for prevent the drone from climbing endlessly in a straight line if it's having trouble reaching a high TKOFF_ALT.

  • Default Value: 200 meters.

The Engineer's View

Used by the ModeTakeoff state machine.
The takeoff is marked as "Complete" if either of these conditions are met:

  1. Current Altitude $\geq$ TKOFF_ALT.
  2. Horizontal Distance from Start $\geq$ TKOFF_DIST.

Tuning & Behavior

  • Default Value: 200 m.
  • Recommendation: Set this to roughly the size of your takeoff field. If you have a 500m long runway, set this to 300 or 400.

TKOFF_FLAP_PCNT

%
Default 0
Range 0 100

Takeoff Flap Percentage (TKOFF_FLAP_PCNT)

Description

TKOFF_FLAP_PCNT sets the specialized wing configuration for the "Roll-out" and "Climb-out" phase of an autonomous takeoff.

Deploying flaps increases the wing's lift coefficient, allowing the plane to rotate and become airborne at a lower ground speed. This is essential for short-field takeoffs or for heavy aircraft.

Tuning & Behavior

  • Default: 0%.
  • Recommendation: Set to the "Takeoff Flap" position recommended by your airframe's manufacturer (typically 15% to 40%).
  • Automation: The autopilot will automatically retract the flaps to their normal cruise position once the aircraft reaches a safe altitude and airspeed after takeoff.

TKOFF_GND_PITCH

deg
Default 5
Range 0 15

Takeoff Ground Pitch (TKOFF_GND_PITCH)

Description

TKOFF_GND_PITCH is used for Runway Takeoffs. It defines the attitude of the aircraft while it is accelerating along the ground, before it has reached enough speed to lift its nose and fly.

For tricycle gear aircraft (nose wheel), this is usually set to 0 or 5 degrees to keep the plane level on its wheels. For taildraggers, this setting helps the autopilot manage the transition from "tail on ground" to "tail in air" (level roll).

  • Default Value: 5 degrees.

The Engineer's View

Defined in ArduPlane/mode_takeoff.cpp.
This parameter is active whenever the airspeed is below TKOFF_ROTATE_SPD. It ensures the autopilot doesn't try to pull up too early, which would cause the tail to strike the ground or the plane to "jump" off the runway prematurely.

// ArduPlane/takeoff.cpp
if (auto_state.highest_airspeed < g.takeoff_rotate_speed) {
    nav_pitch_cd = int32_t(100.0f * mode_takeoff.ground_pitch);
    // ...
}

Tuning & Behavior

  • Default Value: 5°.
  • Recommendation: Match the "Natural" sitting angle of your drone on its wheels.
  • Tricycle Gear: Use 0 or 2 degrees.
  • Taildragger: Use 5 or 8 degrees to help lift the tail wheel off the ground during the takeoff run.

TKOFF_LVL_ALT

m
Default 10
Range 0 50

Takeoff Level-Flight Altitude (TKOFF_LVL_ALT)

Description

TKOFF_LVL_ALT is a safety buffer that prevents your airplane from banking too steeply when it is close to the ground.

When a plane first takes off, it is often flying slowly and lacks full stability. If the drone tried to make a sharp turn while only 2 meters high, it could strike a wing on the ground. TKOFF_LVL_ALT keeps the wings level (or nearly level) until the drone has reached a safe "Staging Altitude."

  • Default Value: 10 meters.
  • Units: Meters above the takeoff point.

The Mathematics

ArduPilot uses a dual-threshold scaling logic for the maximum allowed bank angle ($\phi\_{max}$) during takeoff:

  1. Below TKOFF_LVL_ALT: Roll is restricted to LEVEL_ROLL_LIMIT (typically 5-10 degrees).
  2. Above TKOFF_LVL_ALT x 3: Roll is allowed up to the full ROLL_LIMIT_DEG (typically 45 degrees).
  3. In Between: The limit is linearly interpolated.

$$ \text{Active\_Roll\_Limit} = \text{lerp}(\text{LEVEL\_ROLL}, \text{ROLL\_LIMIT}, \text{Alt}, \text{LVL\_ALT}, \text{LVL\_ALT} \times 3) $$

The Engineer's View

Defined in ArduPlane/takeoff.cpp inside takeoff_calc_roll().

// ArduPlane/takeoff.cpp
const float lim1 = MAX(mode_takeoff.level_alt, 0);
const float lim2 = MIN(mode_takeoff.level_alt*3, mode_takeoff.target_alt);
const float current_baro_alt = barometer.get_altitude();

takeoff_roll_limit_cd = linear_interpolate(g.level_roll_limit*100, roll_limit_cd, 
                                current_baro_alt,
                                auto_state.baro_takeoff_alt+lim1, auto_state.baro_takeoff_alt+lim2);

This logic ensures a smooth transition of control authority. As the plane gains altitude and clears ground obstacles, it is granted more freedom to maneuver toward its mission path.

Tuning & Behavior

  • Default Value: 10 m.
  • Effect of Increasing: Safer, but the drone will take longer to correct its heading if it was thrown off-track.
  • Effect of Decreasing: Allows earlier turning. Only recommended for small, high-power drones in tight spaces.

Use Case Recommendations

  • Large Scale / Heavy Planes: Increase to 20m. Heavy planes have more momentum and take longer to stabilize; keeping the wings level longer prevents tip-stalls.
  • Windy Sites: Increase to 15m. Prevents a gust from flipping the plane into the ground before it has enough altitude to recover.
  • Standard build: Keep at 10m.

TKOFF_LVL_PITCH

deg
Default 15
Range 0 45

Takeoff Level-Flight Pitch (TKOFF_LVL_PITCH)

Description

TKOFF_LVL_PITCH is the "Launch Angle" for your airplane. It defines how steeply the plane should point its nose up immediately after being thrown or launched.

This initial pitch is maintained until the aircraft reaches the TKOFF_LVL_ALT (Stage 1 altitude). It ensures the drone gains altitude rapidly without stalling or wavering.

  • Default Value: 15 degrees.
  • 15 - 20 Degrees: Standard for high-power park flyers and gliders.
  • 5 - 10 Degrees: For heavy, low-power aircraft that need to prioritize airspeed over climb rate.

The Engineer's View

Defined in ArduPlane/mode_takeoff.cpp.
During the initial "Phase 1" of a takeoff mission, the autopilot ignores the standard TECS (Total Energy Control System) pitch demands and forces the nose to this specific angle. This provides a predictable and repeatable launch behavior.

// ArduPlane/mode_takeoff.cpp
AP_GROUPINFO("LVL_PITCH", 3, ModeTakeoff, level_pitch, 15),

Tuning & Behavior

  • Default Value: 15°.
  • Effect of Increasing: Steeper climb. Better for clearing nearby obstacles, but carries a higher risk of a stall if the motor power isn't sufficient.
  • Effect of Decreasing: Shallower climb. The plane gains airspeed faster but altitude slower.

Troubleshooting

  • Scenario: The plane climbs steeply after I throw it, but then the wings wobble and it falls (Tip Stall).
    • Diagnosis: TKOFF_LVL_PITCH is too high for your plane's weight or power.
    • Fix: Reduce to 10 or 12 degrees.
  • Scenario: I threw the plane perfectly, but it slowly drifted down into the tall grass.
    • Diagnosis: TKOFF_LVL_PITCH is too low, or TKOFF_THR_MAX is too low.
    • Fix: Increase to 18 degrees and ensure full throttle is allowed.

TKOFF_OPTIONS

Default 0
Range 0 1

Takeoff Options (TKOFF_OPTIONS)

Description

TKOFF_OPTIONS is a bitmask that selects how "Smart" the throttle is during takeoff.

Normally, ArduPilot just pins the throttle at THR_MAX during a takeoff to ensure the plane doesn't fall. However, high-power modern planes sometimes don't need full power for the entire climb-out. This parameter allows the plane to use its speed sensor to modulate the throttle.

Key Bits:

  • Bit 0 (1): Use TECS Variable Throttle.
    If enabled, the plane will not just "Blast" the motors. Instead, it will use the Total Energy Control System (TECS) to balance speed and height. It will reduce throttle if the plane is already exceeding its target climb rate. Only use this if you have a well-calibrated airspeed sensor.

The Engineer's View

If Bit 0 is Unset (0): The autopilot forces THR_MAX (or TKOFF_THR_MAX) for the duration of the takeoff. This is the safest default.
If Bit 0 is Set (1): The TECS controller is allowed to calculate a throttle command between THR_MIN and THR_MAX based on the energy balance.

Tuning & Behavior

  • Default Value: 0 (Full throttle takeoff).
  • Recommendation: Keep at 0 for most users.
  • Advanced: Use 1 for high-efficiency gliders that would overspeed if full power was applied during the entire climb-out.

TKOFF_PLIM_SEC

s
Default 2
Range 0 10

Takeoff Pitch Limit Lead Time (TKOFF_PLIM_SEC)

Description

TKOFF_PLIM_SEC prevents your plane from overshooting its target altitude at the end of a takeoff.

Normally, during takeoff, the autopilot enforces a "Minimum Pitch" to ensure the plane keeps climbing. If this limit is held all the way to the target altitude, the plane's momentum will cause it to fly past the target height before it can level off. This parameter tells the autopilot to start relaxing that pitch limit a few seconds early, allowing for a smooth, graceful transition to level flight exactly at the target altitude.

Tuning & Behavior

  • Default: 2 seconds.
  • Recommendation: Leave at 2. If you find your plane consistently "pops" up 5-10 meters above the takeoff altitude before settling, increase this to 4 or 5.
  • 0: Disables the lead time. The pitch limit is held until the altitude is reached.

TKOFF_ROTATE_SPD

m/s
Default 0
Range 0 30

Takeoff Rotate Speed (TKOFF_ROTATE_SPD)

Description

TKOFF_ROTATE_SPD is the "Fly Speed" for runway takeoffs. It defines the exact moment the autopilot pulls back on the elevator to lift the nose and start climbing.

If you set this too low, the plane might try to fly before it has enough speed, leading to a stall and a crash. If you set it too high, you will waste runway length and potentially damage your landing gear by rolling too fast.

  • 0 (Default): The plane will rotate as soon as it feels enough airspeed to move the control surfaces (not recommended for runway takeoffs).
  • Recommendation: Set to 1.1x to 1.3x your stall speed.

The Engineer's View

Defined in ArduPlane/takeoff.cpp.
The parameter acts as a state trigger. While Airspeed < TKOFF_ROTATE_SPD, the plane uses TKOFF_GND_PITCH. Once the threshold is crossed, the autopilot transitions to the mission climb pitch or TKOFF_LVL_PITCH.

// ArduPlane/takeoff.cpp
if (!auto_state.rotation_complete && g.takeoff_rotate_speed > 0) {
    if (auto_state.highest_airspeed < g.takeoff_rotate_speed) {
        // Still rolling
    } else {
        // Rotate!
    }
}

Tuning & Behavior

  • Default Value: 0.
  • Effect of Increasing: Safer takeoff with more lift energy. Requires a longer runway.
  • Effect of Decreasing: Shorter takeoff run. Higher risk of stalling during the initial climb.

Use Case Recommendations

  • Standard Build: If your plane stalls at 12 m/s, set TKOFF_ROTATE_SPD to 14 or 15 m/s.
  • Hand/Catapult Launch: Always set to 0. You want the plane to enter climb mode immediately after it leaves your hand.

TKOFF_RPM_MAX

RPM
Default 0
Range 0 20000

Takeoff RPM Maximum (TKOFF_RPM_MAX)

Description

TKOFF_RPM_MAX detects "Free-Spinning" motors.

If a propeller nut comes loose, the motor shaft will spin up to a very high RPM because it has no load. This parameter detects that condition and prevents the drone from attempting to fly with a loose prop.

The Engineer's View

Used in ArduCopter/takeoff_check.cpp.
If RPM > TKOFF_RPM_MAX, the takeoff is aborted.

Tuning & Behavior

  • Default Value: 0 (Disabled).
  • Recommendation: Set to a value slightly above your hover RPM, but below your max RPM.
    • 5" Quad: Hover ~5000-8000 RPM. Max ~30k. Set check to 10000.

TKOFF_RPM_MIN

RPM
Default 0
Range 0 5000

Takeoff RPM Minimum (TKOFF_RPM_MIN)

Description

TKOFF_RPM_MIN is a safety gate for drones with ESC Telemetry (BLHeli_32/AM32).

Before the drone leaves the ground in Auto mode, it checks that all motors are actually spinning. If any motor reports an RPM lower than this value, the takeoff is aborted. This prevents "Flip on Takeoff" crashes caused by a dead motor or a desync.

The Engineer's View

Used in ArduCopter/takeoff_check.cpp.
The autopilot queries AP_ESC_Telem for the RPM of all active motors.
If RPM < TKOFF_RPM_MIN, the takeoff is held.

Tuning & Behavior

  • Default Value: 0 (Disabled).
  • Recommendation: Set to a value slightly below your idle RPM.
    • 5" Quad: Idle is ~1500 RPM. Set to 1000.
    • Large Quad: Idle is ~800 RPM. Set to 500.

TKOFF_SLEW_TIME

s
Default 2.0
Range 0 10

Takeoff Slew Time (TKOFF_SLEW_TIME)

Description

TKOFF_SLEW_TIME makes automatic takeoffs smoother.

When you switch to Auto or Guided and command a takeoff, the drone doesn't just jump to full climb speed instantly. Instead, it smoothly ramps up the throttle target over this duration. This prevents the drone from "launching like a rocket" and stressing the battery or motors.

  • Low Value (0.5s): Aggressive takeoff.
  • High Value (5.0s): Very gentle lift-off.

Tuning & Behavior

  • Default Value: 2.0 seconds.
  • Cinematography: Increase to 4.0s for a buttery smooth start to the shot.

TKOFF_TDRAG_ELEV

%
Default 0
Range -100 100

Takeoff Tail-Dragger Elevator (TKOFF_TDRAG_ELEV)

Description

TKOFF_TDRAG_ELEV is an essential setting for planes with a Tail Wheel.

When a tail-dragger begins its takeoff run, the tail wheel provides the steering. However, as the motor pulls the plane forward, the tail naturally wants to lift into the air. If it lifts too soon, you lose steering control before the rudder becomes effective, causing the plane to "ground loop" (spin out).

This parameter forces the elevator to pull the tail down, keeping the steering wheel firmly on the ground until the plane has enough speed to steer with the rudder.

  • 100 (Full Up): Recommended for tail-draggers. Holds the tail wheel down.
  • 0 (Neutral): Standard for hand-launches.
  • -20 to -30 (Down): Used for some tricycle-gear planes to hold the nose wheel down for better grip.

The Engineer's View

This parameter provides a direct override to the elevator channel during the "Ground Run" phase of takeoff. It is active from the start of the roll until the speed reaches TKOFF_TDRAG_SPD1.

// ArduPlane/takeoff.cpp
// Apply g.takeoff_tdrag_elevator to elevator output during initial roll.

Tuning & Behavior

  • Default Value: 0.
  • Recommendation for Tail-draggers: Set to 100. As the plane reaches TKOFF_TDRAG_SPD1, the elevator will return to neutral, allowing the tail to rise into a level flight attitude.
  • Recommendation for Tricycle (Nose wheel): Set to -20 if your nose wheel tends to skitter or lose traction during high-power takeoffs.

Troubleshooting

  • Scenario: My tail-dragger always veers sharply to the left as soon as I start the takeoff roll.
    • Diagnosis: The tail is lifting too early, and you are losing steering.
    • Fix: Ensure TKOFF_TDRAG_ELEV is 100 and TKOFF_TDRAG_SPD1 is set to about 70% of your stall speed.

TKOFF_TDRAG_SPD1

m/s
Default 0
Range 0 30.0

Tail-Dragger Tail-Lift Airspeed (TKOFF_TDRAG_SPD1)

Description

TKOFF_TDRAG_SPD1 automates the specific takeoff physics of a Tail-Dragger airplane.

Tail-draggers require the pilot to hold "Full Up" elevator early in the takeoff roll to keep the tailwheel pinned for steering. Once enough speed is gained for the rudder to become effective, the tail must be allowed to lift so the plane can accelerate in a level attitude. This parameter defines that transition speed.

  • 0: Disabled. Use for tricycle gear or hand-launches.
  • Value (m/s): The airspeed at which the autopilot relaxes the "Up" elevator and levels the fuselage.

Tuning & Behavior

  • Recommendation: Set this to slightly below the stall speed of your aircraft.
  • Sequence:
    1. Ground roll starts with tail held down.
    2. At TKOFF_TDRAG_SPD1, tail lifts and plane rolls on main wheels only.
    3. At TKOFF_ROTATE_SPD, the plane pitches up and climbs.
  • Benefit: Ensures stable, straight-line takeoff rolls without the aircraft "nosing over" or bouncing.

TKOFF_THR_DELAY

ds
Default 2
Range 0 127

Takeoff Throttle Delay (TKOFF_THR_DELAY)

Description

TKOFF_THR_DELAY is a critical safety timer. It provides a brief pause between when you throw the plane and when the propeller starts spinning.

This delay is essential for hand-launches with pusher-propellers (motors at the back). It gives you enough time to move your hand away from the fuselage so that your fingers are not struck by the rotating blades.

  • Units: Deci-seconds (1/10th of a second).
  • 2 (Default): 0.2 seconds.
  • Recommendation: Use at least 2 for all hand launches. Use 20-30 (2-3 seconds) for bungee/catapult launches.

The Mathematics

The delay is a hard timer ($T\_{wait}$) applied after the acceleration check passes:

$$ T\_{wait} = \text{TKOFF\_THR\_DELAY} \times 0.1 \text{ seconds} $$

The throttle is held at 0% until this timer expires. After expiration, the TKOFF_THR_MINSPD check is performed.

The Engineer's View

Defined in ArduPlane/takeoff.cpp.

// ArduPlane/takeoff.cpp
uint16_t wait_time_ms = MIN(uint16_t(g.takeoff_throttle_delay)*100,12700);

The maximum allowed delay is 12.7 seconds. This is sufficient for even the longest catapult rails or complex bungee setups.

Tuning & Behavior

  • Default Value: 2 (0.2s).
  • Effect of Increasing: The motor starts later. Safe for your hands, but the plane will lose more altitude before the motor takes over.
  • Effect of Decreasing: The motor starts sooner. High risk of prop-striking your hand during launch.

Use Case Recommendations

  • Bungee Launch: Set to 30 (3.0s). This ensures the bungee ring has completely detached from the plane's hook before the propeller starts spinning, preventing the line from tangling in the motor.
  • Hand Launch (Front Prop): Set to 0 or 1. Your hand is behind the motor, so risk is low.
  • Hand Launch (Pusher Prop): Set to 2 or 5. You need to be fast, but safe.

TKOFF_THR_MAX

%
Default 0
Range 0 100

Maximum Throttle for Takeoff (TKOFF_THR_MAX)

Description

TKOFF_THR_MAX allows you to give your plane an "Extra Boost" for the launch.

In normal cruise, you might want to limit your throttle to 75% to save battery. However, during a hand-launch or a steep climb-out, you need 100% of the available power to avoid hitting the ground. This parameter lets you set a different power limit specifically for the takeoff phase.

  • 0 (Default): Use the global THR_MAX setting for takeoff as well.
  • 100: Allow full motor power during takeoff, even if the normal limit is lower.

The Engineer's View

Used by the TECS (Total Energy Control System).
During the takeoff flight stage, the aparm.throttle_max value is replaced by g.takeoff_throttle_max if it is non-zero. This ensures the energy controller has the maximum possible "Energy Add" capability to maintain airspeed and climb angle simultaneously.

Tuning & Behavior

  • Default Value: 0.
  • Recommendation: Set to 100 for all hand-launches to ensure the best possible climb rate.
  • Constraint: This value is still subject to your ESC's physical limits and the MOT_PWM_MAX settings.

TKOFF_THR_MIN

%
Default 0
Range 0 100

Takeoff Minimum Throttle (TKOFF_THR_MIN)

Description

TKOFF_THR_MIN forces the motor to keep pulling during the takeoff climb.

Normally, the TECS controller manages throttle. If the plane climbs too steeply and airspeed drops, TECS adds power. If the plane is fast and climbing well, TECS might reduce power. This parameter sets a "Floor" to prevent the throttle from dropping too low, ensuring a strong, positive climb-out.

The Engineer's View

Used when TKOFF_OPTIONS bit 0 is set (Allow variable throttle).
The throttle demand is clamped: output = max(output, TKOFF_THR_MIN).

Tuning & Behavior

  • Default Value: 0 (Use THR_MIN).
  • Recommendation: Set to 50% or 75% for hand-launched planes to guarantee they have energy to clear obstacles, even if the airspeed sensor thinks the plane is already fast enough.

TKOFF_THR_MINACC

$m/s^2$
Default 0
Range 0 30

Takeoff Throttle Min Acceleration (TKOFF_THR_MINACC)

Description

TKOFF_THR_MINACC is the "Starting Gun" for an automatic plane launch. It detects the physical throw of your hand or the pull of a bungee cord to tell the autopilot: "The mission has begun."

Without this parameter, the drone might try to start its motor the moment you switch to AUTO mode. With it, the drone sits silently until it feels a sharp forward jolt.

  • 0 (Default): Acceleration check is disabled. The takeoff sequence starts immediately upon entering AUTO mode.
  • 15.0 m/s²: Recommended for hand-launches. This requires a firm, confident throw to trigger.

The Mathematics

The autopilot uses the forward-axis accelerometer (X-axis) and removes the effects of gravity and tilt. It looks for a peak value:

$$ \text{Forward Acceleration} > \text{TKOFF\_THR\_MINACC} $$

Once this threshold is crossed, the takeoff timer starts. For even greater safety, you can require multiple "jolts" using the TKOFF_ACCEL_CNT parameter.

The Engineer's View

The value is sourced from the TECS_controller.get_VXdot() method, which provides a highly filtered and compensated acceleration estimate.

// ArduPlane/takeoff.cpp
float xaccel = TECS_controller.get_VXdot();
if (xaccel < g.takeoff_throttle_min_accel) {
    goto no_launch;
}

This prevents the takeoff from being triggered by wind gusts or simple tilting of the aircraft, as only true longitudinal acceleration is considered.

Tuning & Behavior

  • Default Value: 0
  • Range: 0 to 30 $m/s^2$ (0 to ~3G).
  • Effect of Increasing: Requires a harder throw. Safer against accidental triggers while walking with the drone.
  • Effect of Decreasing: Easier to trigger. Good for weak throwers or lightweight planes.

Troubleshooting

  • Scenario: I threw the plane but the motor never started!
    • Diagnosis: Your throw was too weak, or TKOFF_THR_MINACC is set too high.
    • Fix: Check your logs for TECS.VXdot. Reduce the parameter to match 70% of your typical throw peak.
  • Scenario: The motor started while I was just walking to the launch site!
    • Diagnosis: TKOFF_THR_MINACC is too low or 0.
    • Fix: Set to at least 10.0 to require a deliberate motion.

TKOFF_THR_MINSPD

m/s
Default 0
Range 0 30

Takeoff Throttle Min Speed (TKOFF_THR_MINSPD)

Description

TKOFF_THR_MINSPD is a safety gate for your airplane's motor. It ensures that the propeller does not start spinning until the aircraft is already moving at a safe speed.

This is primarily used for Hand Launches and Catapult Launches.

  • For Hand Launches, it prevents the motor from starting while the drone is still in your hand, protecting your fingers from a pusher-prop.

  • For Catapults, it ensures the motor only engages after the plane has gained some initial velocity from the bungee or rail.

  • 0 (Default): Speed check is disabled. The motor starts as soon as the acceleration and delay checks pass.

  • 4.0 m/s: Recommended for hand-launched pusher-prop planes.

The Mathematics

The takeoff state machine evaluates three conditions in sequence:

  1. Acceleration: Longitudinal acceleration $> \text{TKOFF\_THR\_MINACC}$.
  2. Delay: Wait for $T\_{delay} = \text{TKOFF\_THR\_DELAY} \times 0.1$ seconds.
  3. Speed: GPS Ground Speed $> \text{TKOFF\_THR\_MINSPD}$.

The throttle remains at 0% until:
$$ (V\_{gps} > \text{TKOFF\_THR\_MINSPD}) \lor (\text{TKOFF\_THR\_MINSPD} = 0) $$

The Engineer's View

Defined in ArduPlane/takeoff.cpp inside auto_takeoff_check().

The logic is designed to be robust against GPS noise. The ground speed check only arms after the acceleration check passes. This prevents a "GPS Jump" (where the coordinates jump 10 meters while sitting still) from accidentally starting the motor.

// ArduPlane/takeoff.cpp
if (((gps.ground_speed() > g.takeoff_throttle_min_speed || is_zero(g.takeoff_throttle_min_speed))) &&
    ((now - takeoff_state.last_tkoff_arm_time) >= wait_time_ms)) {
    // Motor unsuppressed
}

Tuning & Behavior

  • Default Value: 0
  • Effect of Increasing: Safer launches. The motor will start later in the throw/launch.
  • Effect of Decreasing: Faster motor response. The motor starts sooner.
  • Crucial Note: GPS speed usually lags real speed by about 0.5 seconds. Account for this lag when setting the speed threshold.

Use Case Recommendations

  • Bungee Launch: Set to 0 and rely on TKOFF_THR_DELAY (e.g., 3.0s) to let the bungee fall away before the prop starts.
  • Hand Launch (Pusher): Set to 4.0 m/s. This ensures the plane is already out of your hand before the blades spin up.
  • Rolling Takeoff (Runway): Set to 0. You want the motor to start immediately to begin the roll.

TKOFF_THR_SLEW

%/s
Default 0
Range -1 100

Takeoff Throttle Slew Rate (TKOFF_THR_SLEW)

Description

TKOFF_THR_SLEW prevents your motor from jumping from 0% to 100% instantly. It forces a smooth, gradual "ramp up" of power.

This is critical for Runway Takeoffs where a sudden burst of power could cause the plane to veer sideways or "torque roll" before the wings are generating lift. It is also easier on your battery and ESC, as it avoids massive instantaneous current spikes.

  • 0 (Default): Use the global THR_SLEWRATE value (typically 100%/s).
  • -1: No limit. The throttle jumps instantly. (Dangerous for large props!).
  • 20: Ramps the throttle from 0 to 100 over 5 seconds.

The Engineer's View

This parameter provides a dedicated slew rate limit specifically for the AUTO and TAKEOFF flight stages. It helps stabilize the initial ground run where aerodynamic surfaces like the rudder are not yet effective.

// ArduPlane/takeoff.cpp
// Limits the rate of change of the internal _throttle_output variable.

Tuning & Behavior

  • Default Value: 0.
  • Recommendation for Runway: Set to 20 or 30. This provides a scale-like, controllable acceleration.
  • Recommendation for Hand-Launch: Keep at 0 or set to 100. You want the power as fast as possible once the plane has left your hand.

Troubleshooting

  • Scenario: My plane always spins out on the runway as soon as the motor starts.
    • Diagnosis: The sudden torque of the propeller is overcoming the steering traction.
    • Fix: Reduce TKOFF_THR_SLEW to 20.

TKOFF_TIMEOUT

s
Default 0
Range 0 120

Takeoff Safety Timeout (TKOFF_TIMEOUT)

Description

TKOFF_TIMEOUT is a vital "Dead-Man's Switch" for automatic launches. It monitors your aircraft's progress and aborts the mission if the plane isn't speeding up as expected.

If you launch your plane but the motor fails, or if a wheel is stuck in a rut on the runway, the drone might continue to sit there with the throttle active, or it might stumble into the grass. TKOFF_TIMEOUT ensures that if the plane doesn't reach at least 4 m/s (roughly 9 mph) within this time limit, the autopilot kills the motor and disarms the drone.

  • 0 (Default): Timeout is disabled. The drone will keep trying to take off until the battery dies or it is manually disarmed.
  • Recommendation: Set to 5 or 10 seconds.

The Engineer's View

Defined in ArduPlane/takeoff.cpp.
The timer starts the moment the "Triggered AUTO" message appears (after the acceleration and delay checks pass). The logic checks the GPS ground speed against a fixed internal threshold (4.0 m/s).

// ArduPlane/takeoff.cpp
if (g2.takeoff_timeout > 0 &&
    !takeoff_state.launchTimerStarted &&
    now - takeoff_state.start_time_ms > (uint32_t)g2.takeoff_timeout*1000U &&
    gps.ground_speed() < 4.0f) {
    gcs().send_text(MAV_SEVERITY_CRITICAL, "Takeoff timeout");
    disarm_motors();
}

Tuning & Behavior

  • Default Value: 0 (Disabled).
  • Effect of Setting: Provides a crucial safety backup for autonomous operations.
  • Usage Tip: If you have a very large, slow-accelerating plane, ensure your timeout is long enough to account for the slow build-up of speed.

Troubleshooting

  • Scenario: My drone disarms immediately after a hand-launch!
    • Diagnosis: TKOFF_TIMEOUT is set too low, or your TKOFF_THR_DELAY is so long that the timeout expires before the motor even starts.
    • Fix: Increase TKOFF_TIMEOUT to 10.