diff --git a/src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp b/src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp index 352875764e..a3849634fb 100644 --- a/src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp +++ b/src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp @@ -127,7 +127,12 @@ void FlightTaskManualPosition::_updateSetpoints() FlightTaskManualAltitude::_updateSetpoints(); // needed to get yaw and setpoints in z-direction _acceleration_setpoint.setNaN(); // don't use the horizontal setpoints from FlightTaskAltitude - _updateXYlock(); // check for position lock + if (_param_mpc_vel_only.get()) { + _position_setpoint(0) = NAN; + _position_setpoint(1) = NAN; + } else { + _updateXYlock(); // check for position lock + } _weathervane.update(); diff --git a/src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.hpp b/src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.hpp index b1f05092d3..9ba932673f 100644 --- a/src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.hpp +++ b/src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.hpp @@ -62,7 +62,8 @@ protected: (ParamFloat) _param_mpc_vel_man_side, (ParamFloat) _param_mpc_vel_man_back, (ParamFloat) _param_mpc_acc_hor_max, - (ParamFloat) _param_mpc_hold_max_xy + (ParamFloat) _param_mpc_hold_max_xy, + (ParamBool) _param_mpc_vel_only ) private: uint8_t _reset_counter{0}; /**< counter for estimator resets in xy-direction */ diff --git a/src/modules/mc_pos_control/multicopter_position_control_params.c b/src/modules/mc_pos_control/multicopter_position_control_params.c index 9409065d7c..15de9405b7 100644 --- a/src/modules/mc_pos_control/multicopter_position_control_params.c +++ b/src/modules/mc_pos_control/multicopter_position_control_params.c @@ -130,3 +130,14 @@ PARAM_DEFINE_FLOAT(MPC_VEL_NF_BW, 5.0f); * @group Multicopter Position Control */ PARAM_DEFINE_FLOAT(MPC_VELD_LP, 5.0f); + +/** + * Disable horizontal position lock in manual position mode + * + * Disable horizontal position lock when the sticks are centered in position controlled modes + * and when the vehicle is not moving. + * + * @boolean + * @group Multicopter Position Control + */ +PARAM_DEFINE_INT32(MPC_VEL_ONLY, 0);