From eaf4f99e38bb0ee6a46e4be3c196a3483aa1a7cc Mon Sep 17 00:00:00 2001 From: Matthias Grob <maetugr@gmail.com> Date: Wed, 28 Feb 2018 10:02:20 +0100 Subject: [PATCH] FlightTasks: adapt tasks to member setpoints The FlightTaskManual... tasks already had their internal setpoint member variables. I switched them to use the architecture with setpoint member variables as it was implemented the commit before. They simplify a lot. --- .../FlightTasks/tasks/FlightTaskManual.cpp | 9 ------- .../FlightTasks/tasks/FlightTaskManual.hpp | 9 ------- .../tasks/FlightTaskManualAltitude.cpp | 23 ++++++----------- .../tasks/FlightTaskManualAltitude.hpp | 2 -- .../tasks/FlightTaskManualAltitudeSmooth.cpp | 2 +- .../tasks/FlightTaskManualPosition.cpp | 25 +++++++------------ .../tasks/FlightTaskManualPosition.hpp | 2 -- .../tasks/FlightTaskManualPositionSmooth.cpp | 10 ++++---- .../tasks/FlightTaskManualStabilized.cpp | 25 +++++++------------ src/lib/FlightTasks/tasks/FlightTaskSport.hpp | 8 +++--- 10 files changed, 36 insertions(+), 79 deletions(-) diff --git a/src/lib/FlightTasks/tasks/FlightTaskManual.cpp b/src/lib/FlightTasks/tasks/FlightTaskManual.cpp index 827c2c9641..813a3b8b29 100644 --- a/src/lib/FlightTasks/tasks/FlightTaskManual.cpp +++ b/src/lib/FlightTasks/tasks/FlightTaskManual.cpp @@ -98,12 +98,3 @@ bool FlightTaskManual::_evaluateSticks() return false; } } - -void FlightTaskManual::_resetToNAN() -{ - _thr_sp *= NAN; - _vel_sp *= NAN; - _pos_sp *= NAN; - _yaw_sp = NAN; - _yaw_rate_sp = NAN; -} diff --git a/src/lib/FlightTasks/tasks/FlightTaskManual.hpp b/src/lib/FlightTasks/tasks/FlightTaskManual.hpp index 33dce897b7..fc3307a55f 100644 --- a/src/lib/FlightTasks/tasks/FlightTaskManual.hpp +++ b/src/lib/FlightTasks/tasks/FlightTaskManual.hpp @@ -63,15 +63,6 @@ protected: matrix::Vector3f _sticks_expo; /**< modified manual sticks using expo function*/ control::BlockParamFloat _stick_dz; /**< 0-deadzone around the center for the sticks */ - /* Setpoints: NAN means that setpoint is not being considered. */ - matrix::Vector3f _thr_sp{NAN, NAN, NAN}; /**< thrust setpoint */ - matrix::Vector3f _vel_sp{NAN, NAN, NAN}; /**< velocity setpoint */ - matrix::Vector3f _pos_sp{NAN, NAN, NAN}; /**< position setpoint */ - float _yaw_sp{NAN}; /**< yaw setpoint */ - float _yaw_rate_sp{NAN}; /**< yawspeed setpoint */ - - void _resetToNAN(); - private: uORB::Subscription<manual_control_setpoint_s> *_sub_manual_control_setpoint{nullptr}; diff --git a/src/lib/FlightTasks/tasks/FlightTaskManualAltitude.cpp b/src/lib/FlightTasks/tasks/FlightTaskManualAltitude.cpp index fa231d9476..1a75545067 100644 --- a/src/lib/FlightTasks/tasks/FlightTaskManualAltitude.cpp +++ b/src/lib/FlightTasks/tasks/FlightTaskManualAltitude.cpp @@ -48,13 +48,6 @@ FlightTaskManualAltitude::FlightTaskManualAltitude(control::SuperBlock *parent, {} -bool FlightTaskManualAltitude::activate() -{ - bool ret = FlightTaskManualStabilized::activate(); - _vel_sp(2) = 0.0f; - return ret; -} - void FlightTaskManualAltitude::_scaleSticks() { /* Reuse same scaling as for stabilized */ @@ -62,7 +55,7 @@ void FlightTaskManualAltitude::_scaleSticks() /* Scale horizontal velocity with expo curve stick input*/ const float vel_max_z = (_sticks(2) > 0.0f) ? _vel_max_down.get() : _vel_max_up.get(); - _vel_sp(2) = vel_max_z * _sticks_expo(2); + _velocity_setpoint(2) = vel_max_z * _sticks_expo(2); } void FlightTaskManualAltitude::_updateAltitudeLock() @@ -72,14 +65,14 @@ void FlightTaskManualAltitude::_updateAltitudeLock() */ /* handle position and altitude hold */ - const bool apply_brake_z = fabsf(_vel_sp(2)) <= FLT_EPSILON; + const bool apply_brake_z = fabsf(_velocity_setpoint(2)) <= FLT_EPSILON; const bool stopped_z = (_vel_hold_thr_z.get() < FLT_EPSILON || fabsf(_velocity(2)) < _vel_hold_thr_z.get()); - if (apply_brake_z && stopped_z && !PX4_ISFINITE(_pos_sp(2))) { - _pos_sp(2) = _position(2); + if (apply_brake_z && stopped_z && !PX4_ISFINITE(_position_setpoint(2))) { + _position_setpoint(2) = _position(2); } else if (!apply_brake_z) { - _pos_sp(2) = NAN; + _position_setpoint(2) = NAN; } } @@ -87,7 +80,7 @@ void FlightTaskManualAltitude::_updateSetpoints() { FlightTaskManualStabilized::_updateSetpoints(); // get yaw and thrust setpoints - _thr_sp *= NAN; // Don't need thrust setpoint from Stabilized mode. + _thrust_setpoint *= NAN; // Don't need thrust setpoint from Stabilized mode. /* Thrust in xy are extracted directly from stick inputs. A magnitude of * 1 means that maximum thrust along xy is required. A magnitude of 0 means no @@ -101,8 +94,8 @@ void FlightTaskManualAltitude::_updateSetpoints() sp.normalize(); } - _thr_sp(0) = sp(0); - _thr_sp(1) = sp(1); + _thrust_setpoint(0) = sp(0); + _thrust_setpoint(1) = sp(1); _updateAltitudeLock(); } diff --git a/src/lib/FlightTasks/tasks/FlightTaskManualAltitude.hpp b/src/lib/FlightTasks/tasks/FlightTaskManualAltitude.hpp index b6b5d0d385..293003c3e4 100644 --- a/src/lib/FlightTasks/tasks/FlightTaskManualAltitude.hpp +++ b/src/lib/FlightTasks/tasks/FlightTaskManualAltitude.hpp @@ -48,8 +48,6 @@ public: virtual ~FlightTaskManualAltitude() = default; - bool activate() override; - protected: control::BlockParamFloat _vel_max_down; /**< maximum speed allowed to go up */ control::BlockParamFloat _vel_max_up; /**< maximum speed allowed to go down */ diff --git a/src/lib/FlightTasks/tasks/FlightTaskManualAltitudeSmooth.cpp b/src/lib/FlightTasks/tasks/FlightTaskManualAltitudeSmooth.cpp index f319e8e830..bb0c5485de 100644 --- a/src/lib/FlightTasks/tasks/FlightTaskManualAltitudeSmooth.cpp +++ b/src/lib/FlightTasks/tasks/FlightTaskManualAltitudeSmooth.cpp @@ -50,7 +50,7 @@ void FlightTaskManualAltitudeSmooth::_updateSetpoints() FlightTaskManualAltitude::_updateSetpoints(); /* Smooth velocity in z*/ - _smoothing.smoothVelFromSticks(_vel_sp(2), _deltatime); + _smoothing.smoothVelFromSticks(_velocity_setpoint(2), _deltatime); /* Check for altitude lock*/ _updateAltitudeLock(); diff --git a/src/lib/FlightTasks/tasks/FlightTaskManualPosition.cpp b/src/lib/FlightTasks/tasks/FlightTaskManualPosition.cpp index 2067b5c04c..d84050c8d5 100644 --- a/src/lib/FlightTasks/tasks/FlightTaskManualPosition.cpp +++ b/src/lib/FlightTasks/tasks/FlightTaskManualPosition.cpp @@ -48,13 +48,6 @@ FlightTaskManualPosition::FlightTaskManualPosition(control::SuperBlock *parent, _vel_hold_thr_xy(parent, "MPC_HOLD_MAX_XY", false) {} -bool FlightTaskManualPosition::activate() -{ - bool ret = FlightTaskManualAltitude::activate(); - _vel_sp(0) = _vel_sp(1) = 0.0f; - return ret; -} - void FlightTaskManualPosition::_scaleSticks() { /* Use same scaling as for FlightTaskManualAltitude */ @@ -74,31 +67,31 @@ void FlightTaskManualPosition::_scaleSticks() /* Rotate setpoint into local frame. */ _rotateIntoHeadingFrame(vel_sp_xy); - _vel_sp(0) = vel_sp_xy(0); - _vel_sp(1) = vel_sp_xy(1); + _velocity_setpoint(0) = vel_sp_xy(0); + _velocity_setpoint(1) = vel_sp_xy(1); } void FlightTaskManualPosition::_updateXYlock() { /* If position lock is not active, position setpoint is set to NAN.*/ const float vel_xy_norm = Vector2f(&_velocity(0)).length(); - const bool apply_brake = Vector2f(&_vel_sp(0)).length() < FLT_EPSILON; + const bool apply_brake = Vector2f(&_velocity_setpoint(0)).length() < FLT_EPSILON; const bool stopped = (_vel_hold_thr_xy.get() < FLT_EPSILON || vel_xy_norm < _vel_hold_thr_xy.get()); - if (apply_brake && stopped && !PX4_ISFINITE(_pos_sp(0))) { - _pos_sp(0) = _position(0); - _pos_sp(1) = _position(1); + if (apply_brake && stopped && !PX4_ISFINITE(_position_setpoint(0))) { + _position_setpoint(0) = _position(0); + _position_setpoint(1) = _position(1); } else if (!apply_brake) { /* don't lock*/ - _pos_sp(0) = NAN; - _pos_sp(1) = NAN; + _position_setpoint(0) = NAN; + _position_setpoint(1) = NAN; } } void FlightTaskManualPosition::_updateSetpoints() { FlightTaskManualAltitude::_updateSetpoints(); // needed to get yaw and setpoints in z-direction - _thr_sp *= NAN; // don't require any thrust setpoints + _thrust_setpoint *= NAN; // don't require any thrust setpoints _updateXYlock(); // check for position lock } diff --git a/src/lib/FlightTasks/tasks/FlightTaskManualPosition.hpp b/src/lib/FlightTasks/tasks/FlightTaskManualPosition.hpp index e9a9929e00..2277a48e77 100644 --- a/src/lib/FlightTasks/tasks/FlightTaskManualPosition.hpp +++ b/src/lib/FlightTasks/tasks/FlightTaskManualPosition.hpp @@ -49,8 +49,6 @@ public: virtual ~FlightTaskManualPosition() = default; - bool activate() override; - protected: control::BlockParamFloat _vel_xy_manual_max; /**< maximum speed allowed horizontally */ control::BlockParamFloat _acc_xy_max;/**< maximum acceleration horizontally. Only used to compute lock time */ diff --git a/src/lib/FlightTasks/tasks/FlightTaskManualPositionSmooth.cpp b/src/lib/FlightTasks/tasks/FlightTaskManualPositionSmooth.cpp index 172c0c090b..a8507911f5 100644 --- a/src/lib/FlightTasks/tasks/FlightTaskManualPositionSmooth.cpp +++ b/src/lib/FlightTasks/tasks/FlightTaskManualPositionSmooth.cpp @@ -52,16 +52,16 @@ void FlightTaskManualPositionSmooth::_updateSetpoints() /* Smooth velocity setpoint in xy.*/ matrix::Vector2f vel(&_velocity(0)); - Vector2f vel_sp_xy = Vector2f(&_vel_sp(0)); - _smoothingXY.smoothVelocity(vel_sp_xy, vel, _yaw, _yaw_rate_sp, _deltatime); - _vel_sp(0) = vel_sp_xy(0); - _vel_sp(1) = vel_sp_xy(1); + Vector2f vel_sp_xy = Vector2f(&_velocity_setpoint(0)); + _smoothingXY.smoothVelocity(vel_sp_xy, vel, _yaw, _yawspeed_setpoint, _deltatime); + _velocity_setpoint(0) = vel_sp_xy(0); + _velocity_setpoint(1) = vel_sp_xy(1); /* Check for altitude lock.*/ _updateXYlock(); /* Smooth velocity in z.*/ - _smoothingZ.smoothVelFromSticks(_vel_sp(2), _deltatime); + _smoothingZ.smoothVelFromSticks(_velocity_setpoint(2), _deltatime); /* Check for altitude lock*/ _updateAltitudeLock(); diff --git a/src/lib/FlightTasks/tasks/FlightTaskManualStabilized.cpp b/src/lib/FlightTasks/tasks/FlightTaskManualStabilized.cpp index ea65e57725..a4efbcb870 100644 --- a/src/lib/FlightTasks/tasks/FlightTaskManualStabilized.cpp +++ b/src/lib/FlightTasks/tasks/FlightTaskManualStabilized.cpp @@ -52,9 +52,7 @@ FlightTaskManualStabilized::FlightTaskManualStabilized(control::SuperBlock *pare bool FlightTaskManualStabilized::activate() { - _resetToNAN(); - _yaw_rate_sp = 0.0f; - _thr_sp = matrix::Vector3f(0.0f, 0.0f, -_throttle_hover.get()); + _thrust_setpoint = matrix::Vector3f(0.0f, 0.0f, -_throttle_hover.get()); return FlightTaskManual::activate(); } @@ -62,8 +60,9 @@ void FlightTaskManualStabilized::_scaleSticks() { /* Scale sticks to yaw and thrust using * linear scale for yaw and piecewise linear map for thrust. */ - _yaw_rate_sp = _sticks(3) * math::radians(_yaw_rate_scaling.get()); - _yaw_rate_sp = math::sign(_yaw_rate_sp) * math::min(fabsf(_yaw_rate_sp), math::radians(_yaw_rate_max.get())); + _yawspeed_setpoint = _sticks(3) * math::radians(_yaw_rate_scaling.get()); + _yawspeed_setpoint = math::sign(_yawspeed_setpoint) * math::min(fabsf(_yawspeed_setpoint), + math::radians(_yaw_rate_max.get())); _throttle = _throttleCurve(); } @@ -74,11 +73,11 @@ void FlightTaskManualStabilized::_updateHeadingSetpoints() * TODO: add yawspeed to get threshold.*/ const bool stick_yaw_zero = fabsf(_sticks(3)) <= _stick_dz.get(); - if (stick_yaw_zero && !PX4_ISFINITE(_yaw_sp)) { - _yaw_sp = _yaw; + if (stick_yaw_zero && !PX4_ISFINITE(_yaw_setpoint)) { + _yaw_setpoint = _yaw; } else if (!stick_yaw_zero) { - _yaw_sp = NAN; + _yaw_setpoint = NAN; } } @@ -111,12 +110,12 @@ void FlightTaskManualStabilized::_updateThrustSetpoints() * upward by the Axis-Angle. */ Quatf q_sp = AxisAnglef(v(0), v(1), 0.0f); - _thr_sp = q_sp.conjugate(Vector3f(0.0f, 0.0f, -1.0f)) * _throttle; + _thrust_setpoint = q_sp.conjugate(Vector3f(0.0f, 0.0f, -1.0f)) * _throttle; } void FlightTaskManualStabilized::_rotateIntoHeadingFrame(Vector2f &v) { - float yaw_rotate = PX4_ISFINITE(_yaw_sp) ? _yaw_sp : _yaw; + float yaw_rotate = PX4_ISFINITE(_yaw_setpoint) ? _yaw_setpoint : _yaw; Vector3f v_r = Vector3f(Dcmf(Eulerf(0.0f, 0.0f, yaw_rotate)) * Vector3f(v(0), v(1), 0.0f)); v(0) = v_r(0); v(1) = v_r(1); @@ -147,11 +146,5 @@ bool FlightTaskManualStabilized::update() _scaleSticks(); _updateSetpoints(); - _position_setpoint = _pos_sp; - _velocity_setpoint = _vel_sp; - _thrust_setpoint = _thr_sp; - _yaw_setpoint = _yaw_sp; - _yawspeed_setpoint = _yaw_rate_sp; - return true; } diff --git a/src/lib/FlightTasks/tasks/FlightTaskSport.hpp b/src/lib/FlightTasks/tasks/FlightTaskSport.hpp index 590e6fd5b3..f8db313781 100644 --- a/src/lib/FlightTasks/tasks/FlightTaskSport.hpp +++ b/src/lib/FlightTasks/tasks/FlightTaskSport.hpp @@ -61,11 +61,11 @@ protected: FlightTaskManualPosition::_updateSetpoints(); // get all setpoints from position task /* Scale horizontal velocity setpoint by maximum allowed velocity. */ - if (PX4_ISFINITE(_vel_sp(0)) && Vector2f(&_vel_sp(0)).length() > 0.0f) { - Vector2f vel_sp_xy = Vector2f(&_vel_sp(0)); + if (PX4_ISFINITE(_velocity_setpoint(0)) && Vector2f(&_velocity_setpoint(0)).length() > 0.0f) { + Vector2f vel_sp_xy = Vector2f(&_velocity_setpoint(0)); vel_sp_xy = vel_sp_xy.normalized() * _vel_xy_max.get() / _vel_xy_manual_max.get() * vel_sp_xy.length(); - _vel_sp(0) = vel_sp_xy(0); - _vel_sp(1) = vel_sp_xy(1); + _velocity_setpoint(0) = vel_sp_xy(0); + _velocity_setpoint(1) = vel_sp_xy(1); } } -- GitLab