rate limit most parameter_update subscriptions

- parameter updates can be quite expensive because they trigger nearly all modules to reload all of their parameters immediately
 - limit modules from updating faster than once per second
This commit is contained in:
Daniel Agar
2021-01-10 21:09:15 -05:00
committed by GitHub
parent 70e503cb91
commit 967d35a6b6
73 changed files with 212 additions and 122 deletions
@@ -58,6 +58,8 @@
#include <AttitudeControl.hpp>
using namespace time_literals;
/**
* Multicopter attitude control app start / stop handling function
*/
@@ -98,10 +100,11 @@ private:
AttitudeControl _attitude_control; ///< class for attitude control calculations
uORB::SubscriptionInterval _parameter_update_sub{ORB_ID(parameter_update), 1_s};
uORB::Subscription _vehicle_attitude_setpoint_sub{ORB_ID(vehicle_attitude_setpoint)};
uORB::Subscription _v_rates_sp_sub{ORB_ID(vehicle_rates_setpoint)}; /**< vehicle rates setpoint subscription */
uORB::Subscription _v_control_mode_sub{ORB_ID(vehicle_control_mode)}; /**< vehicle control mode subscription */
uORB::Subscription _params_sub{ORB_ID(parameter_update)}; /**< parameter updates subscription */
uORB::Subscription _manual_control_setpoint_sub{ORB_ID(manual_control_setpoint)}; /**< manual control setpoint subscription */
uORB::Subscription _vehicle_status_sub{ORB_ID(vehicle_status)}; /**< vehicle status subscription */
uORB::Subscription _vehicle_land_detected_sub{ORB_ID(vehicle_land_detected)}; /**< vehicle land detected subscription */
@@ -228,10 +228,10 @@ MulticopterAttitudeControl::Run()
perf_begin(_loop_perf);
// Check if parameters have changed
if (_params_sub.updated()) {
if (_parameter_update_sub.updated()) {
// clear update
parameter_update_s param_update;
_params_sub.copy(&param_update);
_parameter_update_sub.copy(&param_update);
updateParams();
parameters_updated();