mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-07-26 16:28:06 +08:00
fix(fw_mode_manager): honor DO_CHANGE_SPEED in manual airspeed modes (#27494)
* fix(fw_mode_manager): honor DO_CHANGE_SPEED in manual airspeed modes Re-anchor the throttle-stick airspeed interpolation on the last MAV_CMD_DO_CHANGE_SPEED value (falling back to FW_AIRSPD_TRIM if none). Previously, _commanded_manual_airspeed_setpoint was stored but never read when FW_POS_STK_CONF bit 1 was set (the default), so DO_CHANGE_SPEED had no effect in Position/Altitude. With this change: - Stick centered = commanded cruise speed (= FW_AIRSPD_TRIM if no command). - Stick deflection deviates from cruise between FW_AIRSPD_MIN/MAX. - Disconnecting the controller collapses the interpolation to the cruise (Sticks zeroes the throttle channel on manual_control_signal_lost). - No setpoint jump when a controller is plugged in with stick centered. - No behavior change for users who never send DO_CHANGE_SPEED. * fix(fw_mode_manager): clear DO_CHANGE_SPEED override on mode change Reset _commanded_manual_airspeed_setpoint to NaN when entering a manual airspeed mode from outside the manual airspeed pair, so a prior MAV_CMD_DO_CHANGE_SPEED does not silently anchor the manual airspeed setpoint after the pilot has left and re-entered manual airspeed control. Toggling between Position and Altitude preserves the commanded value since both modes share the same airspeed mechanic. Also fold in a make-format whitespace fix in get_manual_airspeed_setpoint. * docs(flight_modes_fw): document DO_CHANGE_SPEED in manual airspeed modes Describe how MAV_CMD_DO_CHANGE_SPEED re-anchors the throttle-stick cruise airspeed in Position and Altitude mode, matching the new behavior in the fw_mode_manager. Covers the centered-stick anchor, deflection scaling between FW_AIRSPD_MIN/MAX, the shared setpoint across both modes, and the reset to trim when entering from any other mode. Signed-off-by: Gregor Hohl <gregor.hohl@auterion.com> * Subedit * fix(fw_mode_manager): reset DO_CHANGE_SPEED override on any mode change Reset _commanded_manual_airspeed_setpoint to NaN whenever the position control mode changes, instead of only when entering manual airspeed control from outside the Position/Altitude pair. This makes the manual airspeed setpoint revert to FW_AIRSPD_TRIM on every mode change, including toggling between Position and Altitude, for predictable behavior. Signed-off-by: Gregor Hohl <gregor.hohl@auterion.com> * docs(flight_modes_fw): note manual airspeed resets on mode change Clarify that the commanded airspeed defaults to FW_AIRSPD_TRIM when no airspeed has been commanded, and document that the commanded airspeed resets on every flight mode change. Signed-off-by: Gregor Hohl <gregor.hohl@auterion.com> * docs(flight_modes_fw): clarify DO_CHANGE_SPEED param1/param2 handling Signed-off-by: Gregor Hohl <gregor.hohl@auterion.com> --------- Signed-off-by: Gregor Hohl <gregor.hohl@auterion.com> Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
This commit is contained in:
@@ -57,6 +57,21 @@ The mode is affected by the following parameters:
|
||||
| <a id="FW_T_CLMB_R_SP"></a>[FW_T_CLMB_R_SP](../advanced_config/parameter_reference.md#FW_T_CLMB_R_SP) | Max climb rate setpoint. Default: 3 m/s. |
|
||||
| <a id="FW_T_SINK_R_SP"></a>[FW_T_SINK_R_SP](../advanced_config/parameter_reference.md#FW_T_SINK_R_SP) | Max sink rate setpoint. Default: 2 m/s. |
|
||||
|
||||
## MAVLink Commands
|
||||
|
||||
The following commands are relevant to this mode:
|
||||
|
||||
- [MAV_CMD_DO_CHANGE_SPEED](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_CHANGE_SPEED) — Sets the cruise airspeed for centred throttle stick.
|
||||
|
||||
This requires an airspeed sensor.
|
||||
Only the airspeed speed type is handled (`param1` must be `0`); other speed types are ignored.
|
||||
At centered throttle the vehicle holds the commanded airspeed (`param2`) if a positive value is set (non-positive values are ignored).
|
||||
The value is constrained between [FW_AIRSPD_MIN](../advanced_config/parameter_reference.md#FW_AIRSPD_MIN) and [FW_AIRSPD_MAX](../advanced_config/parameter_reference.md#FW_AIRSPD_MAX), and defaults to [FW_AIRSPD_TRIM](../advanced_config/parameter_reference.md#FW_AIRSPD_TRIM) if no airspeed has been commanded.
|
||||
Deflecting the throttle stick scales the airspeed toward `FW_AIRSPD_MIN` (back) or `FW_AIRSPD_MAX` (forward) around this value.
|
||||
The commanded airspeed resets to `FW_AIRSPD_TRIM` on every flight mode change.
|
||||
|
||||
Note, other commands may be supported.
|
||||
|
||||
<!--
|
||||
FW notes:
|
||||
FW position controller is basically 2 independent pieces
|
||||
|
||||
@@ -51,3 +51,18 @@ The mode is affected by the following parameters:
|
||||
| <a id="FW_T_CLMB_R_SP"></a>[FW_T_CLMB_R_SP](../advanced_config/parameter_reference.md#FW_T_CLMB_R_SP) | Max climb rate setpoint. Default: 3 m/s. |
|
||||
| <a id="FW_T_SINK_R_SP"></a>[FW_T_SINK_R_SP](../advanced_config/parameter_reference.md#FW_T_SINK_R_SP) | Max sink rate setpoint. Default: 2 m/s. |
|
||||
| <a id="FW_PN_R_SLEW_MAX"></a>[FW_PN_R_SLEW_MAX](../advanced_config/parameter_reference.md#FW_PN_R_SLEW_MAX) | Roll setpoint slew rate limit. Default: 90 °/s. |
|
||||
|
||||
## MAVLink Commands
|
||||
|
||||
The following commands are relevant to this mode:
|
||||
|
||||
- [MAV_CMD_DO_CHANGE_SPEED](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_CHANGE_SPEED) — Sets the cruise airspeed for centred throttle stick.
|
||||
|
||||
This requires an airspeed sensor.
|
||||
Only the airspeed speed type is handled (`param1` must be `0`); other speed types are ignored.
|
||||
At centered throttle the vehicle holds the commanded airspeed (`param2`) if a positive value is set (non-positive values are ignored).
|
||||
The value is constrained between [FW_AIRSPD_MIN](../advanced_config/parameter_reference.md#FW_AIRSPD_MIN) and [FW_AIRSPD_MAX](../advanced_config/parameter_reference.md#FW_AIRSPD_MAX), and defaults to [FW_AIRSPD_TRIM](../advanced_config/parameter_reference.md#FW_AIRSPD_TRIM) if no airspeed has been commanded.
|
||||
Deflecting the throttle stick scales the airspeed toward `FW_AIRSPD_MIN` (back) or `FW_AIRSPD_MAX` (forward) around this value.
|
||||
The commanded airspeed resets to `FW_AIRSPD_TRIM` on every flight mode change.
|
||||
|
||||
Note, other commands may be supported.
|
||||
|
||||
Reference in New Issue
Block a user