diff --git a/conf/airframes/tudelft/rot_wing_25kg.xml b/conf/airframes/tudelft/rot_wing_25kg.xml index e8e6048f4b..cbc9575867 100644 --- a/conf/airframes/tudelft/rot_wing_25kg.xml +++ b/conf/airframes/tudelft/rot_wing_25kg.xml @@ -446,9 +446,9 @@ - - - + + + diff --git a/conf/modules/stabilization_indi.xml b/conf/modules/stabilization_indi.xml index d1884abf22..4013abc2d0 100644 --- a/conf/modules/stabilization_indi.xml +++ b/conf/modules/stabilization_indi.xml @@ -62,6 +62,7 @@ + diff --git a/sw/airborne/firmwares/rotorcraft/stabilization/stabilization_indi.c b/sw/airborne/firmwares/rotorcraft/stabilization/stabilization_indi.c index c2642ec09a..2a347bad94 100644 --- a/sw/airborne/firmwares/rotorcraft/stabilization/stabilization_indi.c +++ b/sw/airborne/firmwares/rotorcraft/stabilization/stabilization_indi.c @@ -217,6 +217,8 @@ float rate_vect_prev[3] = {0., 0., 0.}; float q_filt = 0.0; float r_filt = 0.0; +float stabilization_indi_filter_freq = 20.0; //Hz, for setting handler + // variables needed for estimation float g1g2_trans_mult[INDI_OUTPUTS][INDI_OUTPUTS]; float g1g2inv[INDI_OUTPUTS][INDI_OUTPUTS]; @@ -441,6 +443,16 @@ void stabilization_indi_enter(void) float_vect_zero(ddu_estimation, INDI_NUM_ACT); } +void stabilization_indi_update_filt_freq(float freq) +{ + stabilization_indi_filter_freq = freq; + float tau = 1.0 / (2.0 * M_PI * freq); + float sample_time = 1.0 / PERIODIC_FREQUENCY; + init_first_order_low_pass(&rates_filt_fo[0], tau, sample_time, stateGetBodyRates_f()->p); + init_first_order_low_pass(&rates_filt_fo[1], tau, sample_time, stateGetBodyRates_f()->q); + init_first_order_low_pass(&rates_filt_fo[2], tau, sample_time, stateGetBodyRates_f()->r); +} + /** * Function that resets the filters to zeros */ diff --git a/sw/airborne/firmwares/rotorcraft/stabilization/stabilization_indi.h b/sw/airborne/firmwares/rotorcraft/stabilization/stabilization_indi.h index 9abdaf4c6b..db589c367e 100644 --- a/sw/airborne/firmwares/rotorcraft/stabilization/stabilization_indi.h +++ b/sw/airborne/firmwares/rotorcraft/stabilization/stabilization_indi.h @@ -59,12 +59,14 @@ struct Indi_gains { extern float stablization_indi_yaw_dist_limit; extern struct Indi_gains indi_gains; +extern float stabilization_indi_filter_freq; //for setting handler extern void stabilization_indi_init(void); extern void stabilization_indi_enter(void); extern void stabilization_indi_rate_run(bool in_flight, struct StabilizationSetpoint *rate_sp, struct ThrustSetpoint *thrust, int32_t *cmd); extern void stabilization_indi_attitude_run(bool in_flight, struct StabilizationSetpoint *att_sp, struct ThrustSetpoint *thrust, int32_t *cmd); extern void stabilization_indi_set_wls_settings(void); +extern void stabilization_indi_update_filt_freq(float freq); // setting handler #endif /* STABILIZATION_INDI */