123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #include <AP_Math/AP_Math.h>
- #include "AC_HELI_PID.h"
- const AP_Param::GroupInfo AC_HELI_PID::var_info[] = {
-
-
-
- AP_GROUPINFO("P", 0, AC_HELI_PID, _kp, 0),
-
-
-
- AP_GROUPINFO("I", 1, AC_HELI_PID, _ki, 0),
-
-
-
- AP_GROUPINFO("D", 2, AC_HELI_PID, _kd, 0),
-
-
-
-
- AP_GROUPINFO("VFF", 4, AC_HELI_PID, _kff, 0),
-
-
-
- AP_GROUPINFO("IMAX", 5, AC_HELI_PID, _kimax, 0),
-
-
-
-
-
-
- AP_GROUPINFO("ILMI", 7, AC_HELI_PID, _leak_min, AC_PID_LEAK_MIN),
-
-
-
-
-
- AP_GROUPINFO("FLTT", 9, AC_HELI_PID, _filt_T_hz, AC_PID_TFILT_HZ_DEFAULT),
-
-
-
-
- AP_GROUPINFO("FLTE", 10, AC_HELI_PID, _filt_E_hz, AC_PID_EFILT_HZ_DEFAULT),
-
-
-
-
- AP_GROUPINFO("FLTD", 11, AC_HELI_PID, _filt_D_hz, AC_PID_DFILT_HZ_DEFAULT),
- AP_GROUPEND
- };
- AC_HELI_PID::AC_HELI_PID(float initial_p, float initial_i, float initial_d, float initial_ff, float initial_imax, float initial_filt_T_hz, float initial_filt_E_hz, float initial_filt_D_hz, float dt) :
- AC_PID(initial_p, initial_i, initial_d, initial_ff, initial_imax, initial_filt_T_hz, initial_filt_E_hz, initial_filt_D_hz, dt)
- {
- _last_requested_rate = 0;
- }
- void AC_HELI_PID::update_leaky_i(float leak_rate)
- {
- if(!is_zero(_ki) && !is_zero(_dt)){
-
- if (_integrator > _leak_min){
- _integrator -= (float)(_integrator - _leak_min) * leak_rate;
- } else if (_integrator < -_leak_min) {
- _integrator -= (float)(_integrator + _leak_min) * leak_rate;
- }
- _pid_info.I = _integrator;
- }
- }
|