From 54a5e177f3e4d0a89628933b1f1f19954e1932aa Mon Sep 17 00:00:00 2001 From: Dennis Mannhart <dennis.mannhart@gmail.com> Date: Wed, 13 Dec 2017 14:53:33 +0100 Subject: [PATCH] ManualSmoothingZ: comments cleanup and style fix --- .../tasks/Utility/ManualSmoothingZ.cpp | 21 ++++---- .../tasks/Utility/ManualSmoothingZ.hpp | 51 +++++++++++++++---- 2 files changed, 50 insertions(+), 22 deletions(-) diff --git a/src/lib/FlightTasks/tasks/Utility/ManualSmoothingZ.cpp b/src/lib/FlightTasks/tasks/Utility/ManualSmoothingZ.cpp index f2ce930571..878b26b77d 100644 --- a/src/lib/FlightTasks/tasks/Utility/ManualSmoothingZ.cpp +++ b/src/lib/FlightTasks/tasks/Utility/ManualSmoothingZ.cpp @@ -34,7 +34,7 @@ /** * @file ManualSmoothingZ.hpp * - * This Class is used for smoothing the velocity setpoints in Z-direction. + * This Class is used for smoothing the velocity set-points in z-direction NED frame. */ #include "ManualSmoothingZ.hpp" @@ -47,7 +47,7 @@ ManualSmoothingZ::ManualSmoothingZ(const float &vel, const float &stick) : { _acc_max_up_h = param_find("MPC_ACC_UP_MAX"); _acc_max_down_h = param_find("MPC_ACC_DOWN_MAX"); - _jerk_max = param_find("MPC_JERK_MAX"); + _jerk_max_h = param_find("MPC_JERK_MAX"); /* Load the params the very first time */ setParams(); @@ -98,23 +98,23 @@ ManualSmoothingZ::updateAcceleration(float vel_sp[2], const float dt) const bool is_current_zero = (fabsf(_stick) <= FLT_EPSILON); /* default is acceleration */ - Intention intention = Intention::acceleration; + ManualIntentionZ intention = ManualIntentionZ::acceleration; /* check zero input stick */ if (is_current_zero) { - intention = Intention::brake; + intention = ManualIntentionZ::brake; } /* * update intention */ - if ((_intention != Intention::brake) && (intention == Intention::brake)) { + if ((_intention != ManualIntentionZ::brake) && (intention == ManualIntentionZ::brake)) { /* we start with lowest acceleration */ _acc_state_dependent = _acc_max_down; - /* reset slewrate: this ensures that there - * is no delay present because of the slewrate + /* reset slew-rate: this ensures that there + * is no delay present when user demands to brake */ vel_sp[1] = _vel; @@ -122,7 +122,7 @@ ManualSmoothingZ::updateAcceleration(float vel_sp[2], const float dt) } switch (intention) { - case Intention::brake: { + case ManualIntentionZ::brake: { /* limit jerk when braking to zero */ float jerk = (_acc_max_up - _acc_state_dependent) / dt; @@ -137,10 +137,9 @@ ManualSmoothingZ::updateAcceleration(float vel_sp[2], const float dt) break; } - case Intention::acceleration: { + case ManualIntentionZ::acceleration: { _acc_state_dependent = (getMaxAcceleration(vel_sp) - _acc_max_down) - _acc_state_dependent = (getMaxAcceleration() - _acc_max_down) * fabsf(_stick) + _acc_max_down; break; } @@ -170,7 +169,7 @@ ManualSmoothingZ::getMaxAcceleration(float vel_sp[2]) /* at rest */ return _acc_max_up; - } else if (vel_sp[0] < 0.0f ) { + } else if (vel_sp[0] < 0.0f) { /* braking downward */ return _acc_max_down; diff --git a/src/lib/FlightTasks/tasks/Utility/ManualSmoothingZ.hpp b/src/lib/FlightTasks/tasks/Utility/ManualSmoothingZ.hpp index 45746ff895..d69a61af3d 100644 --- a/src/lib/FlightTasks/tasks/Utility/ManualSmoothingZ.hpp +++ b/src/lib/FlightTasks/tasks/Utility/ManualSmoothingZ.hpp @@ -41,39 +41,68 @@ #include <systemlib/param/param.h> +/* User intention: brake or acceleration */ +enum class ManualIntentionZ { + brake, + acceleration, +}; class ManualSmoothingZ { public: ManualSmoothingZ(const float &vel, const float &stick); - ~ManualSmoothingZ(); + ~ManualSmoothingZ() {}; + /* Smooths velocity setpoint based + * on flight direction. + * @param vel_sp[2] array: vel_sp[0] = current velocity set-point; + * vel_sp[1] = previous velocity set-point + * vel_sp will contain smoothed current previous set-point. + * @param dt: time delta in seconds + */ void smoothVelFromSticks(float vel_sp[2], const float dt); + + /* Getter methods */ + float getMaxAcceleration(float vel_sp[2]); + ManualIntentionZ getIntention() {return _intention;}; + + /* Overwrite methods: + * Needed if different parameter values than default required. + */ + void overwriteAccelerationUp(float acc_max_up) {_acc_max_up = acc_max_up;}; + void overwriteAccelerationDown(float acc_max_down) {_acc_max_down = acc_max_down;}; + void overwriteJerkMax(float jerk_max) {_jerk_max = jerk_max;}; + private: - enum class Intention { - brake, - acceleration, - }; - Intention _intention{Intention::brake}; + /* User intention: brake or acceleration */ + ManualIntentionZ _intention{ManualIntentionZ::acceleration}; + /* Dependency injection: vehicle velocity in z-direction; + * stick input in z-direction + */ const float &_vel; const float &_stick; + /* Acceleration that depends on vehicle state + * _acc_max_down <= _acc_state_dependent <= _acc_max_up + */ + float _acc_state_dependent{0.0f}; + + /* Params */ param_t _acc_max_up_h{PARAM_INVALID}; param_t _acc_max_down_h{PARAM_INVALID}; param_t _jerk_max_h{PARAM_INVALID}; float _acc_max_up{0.0f}; float _acc_max_down{0.0f}; float _jerk_max{10000.0f}; - float _acc_state_dependent{0.0f}; int _parameter_sub{-1}; - + /* Helper methods */ void velocitySlewRate(float vel_sp[2], const float dt); - void updateParams(); - void updateAcceleration(float &vel_sp_prev, const float dt); void setParams(); - float getMaxAcceleration(); + void updateParams(); + void updateAcceleration(float vel_sp[2], const float dt); + }; -- GitLab