#33952·ardupilot

Missing @RebootRequired annotation on WP_SPD / Q_WP_SPD — mid-mission PARAM_SET has no effect on ArduPlane/QuadPlane

Author: tinhien11Created Aug 5, 2026Updated Sep 12, 2026

Summary

The WP_SPD parameter (in libraries/AC_WPNav/AC_WPNav.cpp:49-56) and its quadplane alias Q_WP_SPD lack the @RebootRequired: True annotation, despite the fact that changes to this parameter do not take effect mid-mission on ArduPlane/QuadPlane.

Reproduction (ArduPlane VTOL / QuadPlane, SITL)

  1. Boot with Q_WP_SPD=5 (default)
  2. Send PARAM_SET Q_WP_SPD=12 while disarmed (PARAM_VALUE ack confirms Q_WP_SPD=12 saved to EEPROM)
  3. Arm and start AUTO mission
  4. Observe drone still flies at ~5 m/s (the old default), not 12 m/s

Root cause (traced in source)

  • AC_WPNav::wp_and_spline_init_m(speed_ms) sets _check_wp_speed_change = !is_positive(speed_ms) (AC_WPNav.cpp:227). When called with a positive speed_ms (e.g. the current _wp_desired_speed_ne_ms), the change-detection flag is locked to false.
  • QuadPlane::waypoint_controller() (quadplane.cpp:3266) calls set_wp_destination_NED_m()wp_and_spline_init_m(_wp_desired_speed_ne_ms) BEFORE update_wpnav(). This locks _check_wp_speed_change=false before update_wpnav()'s change detection (AC_WPNav.cpp:688-693) can run.
  • Result: _wp_speed_ms (param) is updated to 12, but _wp_desired_speed_ne_ms (runtime) never syncs from the new param value. The drone continues at the old speed until reboot.

Expected behavior

Either:

(a) Add @RebootRequired: True to WP_SPD/Q_WP_SPD so GCSes (QGC, MP) prompt the user to reboot after changing it, or

(b) Fix the change-detection logic so mid-mission PARAM_SET takes effect on the next waypoint leg.

Workaround

Reboot the FC after setting Q_WP_SPD. Confirmed by ArduPilot's own autotest (Tools/autotest/quadplane.py:1742-1757), which sets Q_WP_SPD=7.0 then calls reboot_sitl() before flying.

Forum reports of this confusion

Version

master @ 6493770924 (also reproduces on 4.6.x)

Contrast with annotated params

Q_ENABLE correctly carries @RebootRequired: True (quadplane.cpp:14), so GCSes know to prompt for reboot. WP_SPD/Q_WP_SPD should follow the same pattern given the same effective behavior.