Missing @RebootRequired annotation on WP_SPD / Q_WP_SPD — mid-mission PARAM_SET has no effect on ArduPlane/QuadPlane
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)
- Boot with
Q_WP_SPD=5(default) - Send
PARAM_SET Q_WP_SPD=12while disarmed (PARAM_VALUE ack confirmsQ_WP_SPD=12saved to EEPROM) - Arm and start AUTO mission
- 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 positivespeed_ms(e.g. the current_wp_desired_speed_ne_ms), the change-detection flag is locked tofalse.QuadPlane::waypoint_controller()(quadplane.cpp:3266) callsset_wp_destination_NED_m()→wp_and_spline_init_m(_wp_desired_speed_ne_ms)BEFOREupdate_wpnav(). This locks_check_wp_speed_change=falsebeforeupdate_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
- https://discuss.ardupilot.org/t/q-wp-radius-and-q-wp-speed-quadplane-in-auto-mode/138387
- https://discuss.ardupilot.org/t/change-speed-command-not-working-in-quadplane/82781
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.
Source: ArduPilot/ardupilot